руководство по использованию ejb 3 с подключением к источнику данных и множеству методов - PullRequest
0 голосов
/ 14 июля 2011

Мне нужно кодировать EJB3 без сохранения состояния, который использует вызываемые операторы и создает структуру XML. Я получаю соединение с источником данных от JNDI;

ctx.lookup('DS').getConnection();

У моего ejb есть много методов (которые строят каждую часть XML), и я обнаружил, что передавать соединение в качестве параметра каждому методу, который я могу вызвать, неудобно.

дело в том:

Должен ли я поместить соединение в качестве поля в моем ejb, открыть его на @PostConstruct и закрыть только на @PreRemove? чтобы он использовал одно и то же соединение OPEN в течение всего времени жизни компонента.

или

Должен ли я использовать Interceptor с блоком try / cacth, который открывает соединение и назначает его компоненту при каждом вызове? Кроме того, это не вызовет проблемы параллелизма? учитывая, что соединение является полем и является общим для потоков, вызывающих методы bean-компонентов без состояния?

Я думаю, что хочу то же самое, что мы можем сделать с JPA:

@PersistenceContext EntityManager em;

public String businessMethod(String param){
    em.find(...);
    someMethod(param);
}

private void sometMethod(String param){
    em.createQuery...;
}

но с java.sql.Connection

заранее спасибо

Victor

1 Ответ

0 голосов
/ 14 июля 2011

Чтобы избежать передачи соединения в качестве параметра всем методам, вы можете попробовать внедрение на основе поля для источника данных.

@Resource(name="defaultDS")
    private javax.sql.DataSource defaultDS;

Тогда вы сможете использовать источник данных во всех методах, представленных вэтот боб и может получить от него соединение.

...