Как определить конструктор сеансового компонента EJB3

StackOverflow https://stackoverflow.com/questions/3803365

  •  25-09-2019
  •  | 
  •  

Вопрос

Я создаю модуль EJB3, который пытается уважать определенный шаблон дизайна фасада / реализации. Мой фасад должен быть полностью EJB бесплатно.

У меня есть 2 класса в этом модуле: фасоль сущности и сессионный боб, который является менеджером этой организации. Менеджер содержит атрибут EntityManager.

У меня также есть фабрика, которая создает фасоль My Manager Bean, но эта фабрика не знает о реализации менеджера (таким образом, не знает о EJB). Фабрика может получить только имя класса менеджера с использованием файла свойств. Завод затем создает интеграцию менеджера:

Class lClass = Class.forName (lClassName);
corporateActionManager = (ICorporateActionManager) lClass.newInstance();

Мой вопрос: Могу ли я объявить конструктор в реализации моего менеджера, а затем внутри этого конструктора инициализировать мой Entitymanager?

Обычно я бы просто использовал аннотацию @PersistenceCtextext над EntityManager:

@PersistenceContext(unitName = "my_persistence_unit")
private EntityManager em;

Но, по-видимому, это не работает, когда класс напрямую призван.

Я попробовал что-то вроде этого:

public CorporateActionManagerImpl() {
    Context jndi;
    try {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("my_persistence_unit")
    em = emf.createEntityManager();
    } catch (NamingException e1) {
    e1.printStackTrace();
    }
} 

Но тогда я получаю NoinitialContextException, по-видимому, мой контекст JNDI неправильно инициализирован.

Кто-нибудь может помочь мне здесь?

Спасибо

Это было полезно?

Решение

Я закончил создать еще один класс «менеджера», который бы заключил бы сессионный боб и инициализацию его в конструкторе.

Он делает добавление другого слоя, но в конце его гораздо проще разобраться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top