EJB 3.1 @ EJB Wtrysk do POJO
Być kompletnym turbot dziś po południu i nie wydaje się znaleźć odpowiedź gdziekolwiek.
Z nową specyfikacją EJB 3.1 Czy możliwe jest wstrzyknięcie EJB do pojo? Wiem, że w EJB 3.0 adnotacja @ EJB może być używana do wstrzykiwania EJB, ale to nie działało na prostych pojosach.
Jeśli nie jest to czy muszę szukać fasoli w JNDI jak Wiem nie można po prostu użyć nowego słowa kluczowego.
Z góry dzięki.
Karl
4 answers
Tak, użyj JNDI lookup.
Ponieważ twoje POJO jest tworzone przez Ciebie (zakładam), kontener nie jest odpowiedzialny za wstrzykiwanie zależności.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-07 17:37:41
Z nową specyfikacją EJB 3.1 Czy możliwe jest wstrzyknięcie EJB do pojo? Wiem, że w EJB 3.0 adnotacja @ EJB może być używana do wstrzykiwania EJB, ale to nie działało na prostych pojosach.
Wstrzyknięcie EJB do POJO jest możliwe Jeśli używasz JSR-299 (Java Contexts and Dependency I njection) tzn. jeśli Twoje POJO jest zarządzanym CDI. W takim razie możesz zrobić:
@Inject MyEJB service
Ale to nie jest funkcja EJB 3.1, to pochodzi z CDI. A jeśli nie używasz CDI, musisz to sprawdzić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-22 03:16:56
Nowa Specyfikacja EJB (3.1) dodaje możliwość określania globalnych nazw JNDI dla EJB. Oznacza to, że można ich używać w każdej fasoli, w dowolnym miejscu.
Musisz jednak przeprowadzić jawne wyszukiwanie JNDI, ponieważ kontener EJB 3.1 nie będzie wiedział o Twoim POJO.
Jedynym wyjątkiem, który zgaduję, że nie dotyczy ciebie, jest to, że jeśli Twoje POJO jest naprawdę klientem aplikacji, w którym to przypadku pod warunkiem, że pole, które ma zawierać EJB jest statyczne, możesz zastosować do niego adnotację @ EJB. Jeśli taka jest Twoja sytuacja, powinieneś zapoznać się z zasadami klienta aplikacji w ogólnej specyfikacji Java EE 5.
Wreszcie, Java EE 6, wraz z włączeniem JSR-299, może w jakiś sposób pozwolić na to, co opisujesz; nie znam jeszcze specyfikacji, więc nie mogę jej skomentować.
Mam nadzieję, że to wszystko pomoże.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-07 18:19:36
Zastanawiam się też, czy mógłbym wstrzyknąć EJB do niezarządzanych obiektów . Więcej szczegółów można znaleźć w dokumentacji Weld (JSR 299 reference implementation).
Ale możesz wykonać iniekcję zależności ręcznie wewnątrz repozytorium lub fabryki w następujący sposób:
@Stateless
public PojoRespository {
@Inject
ResourceForPojos resource;
@PersistenceContext
private EntityManager em;
public Pojo findById(Object id) {
Pojo p = (Pojo) em.find(Pojo.class, id);
p.setResource(resource); // injects resource
return p;
}
}
Jeśli masz wiele metod, w których należy wykonać wstrzyknięcie, możesz użyć Interceptora.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:30:42