Freitag, 10. Februar 2012


Artikel

Juni 2008 | Artikel

Kundendatenbanken mit EJB 3 virtualisieren Fortsetzung, Teil 4

Teil 1   Teil 2   Teil 3   Teil 4   

Nun kann das generische DAO in jeder beliebigen EnterpriseBean, per Dependency Injection, mithilfe der @EJB-Annotaion, geladen werden. Durch das Annotieren der setter-Methode mit @EJB wird eine Referenz des VirtualDao aus dem JNDI Baum geladen. Diese Referenz kann dann in den EnterpriseBean-Methoden beliebig oft verwendet werden.

  1. Listing 6: Remote EnterpriseBean mit dem DAO in Verwendung
  2. package javamagazin.virtual.ejb
  3. @Remote
  4. public class MyEJBImpl implements MyEJB {
  5. private VirtualDao virtualDao;
  6. @EJB
  7. public void setVirtualDao(VirtualDao virtualDao) {
  8. this.virtualDao = virtualDao;
  9. }
  10. public Something retrieveSomething(String arg0, String key) {
  11. Something s = virtualDao.getByQuery(key, “myQuery”, arg0);
  12. return s;
  13. }
  14. @TransactionAttribute(TransactionAttributeType.REQUIRED)
  15. public Long createSomething(String arg0, String arg1, String key) {
  16. Something s = new Something();
  17. s.setArg0(arg0);
  18. s.setArg1(arg1);
  19. return virtualDao.save(key, s);
  20. }
  21. }
Konfiguration des EntityManager JNDI und dessen Schlüssel

Die Konfigurationstabelle ist sehr simpel aufgebaut (Abb. 1). Sie besteht aus einer ID, die den Primärschlüssel dieser Tabelle stellt, sowie einer eindeutigen CUSTOMER_KEY-Spalte und dem dazugehörigen Wert, die JNDI_ENTRY-Spalte.

Bei der Verwendung einer Konfigurationstabelle muss der Zugriff auf diese bzw. auf die korrespondierende Entität zentral zugänglich gemacht werden. Dafür sollte der Applikationsserver eine Datasource bereitstellen, auf die über einen Eintrag in der persistence.xml zugegriffen werden kann. Nun muss im VirtualDaoImpl ein eigener EntityManager über die @PersistenceContext-Annotation geladen werden, um mit den Konfigurationsentitäten zu interagieren. Natürlich kann auch eine eigene EnterpriseBean, die nur zum Laden der Schlüsselwerte verantwortlich ist, verwendet werden. Eine weitere Möglichkeit, um mit solch einer Konfigurationstabelle zu interagieren, bietet das von Sun bekannte Servicelocator Pattern.

  1. Listing 6: Remote EnterpriseBean mit dem DAO in Verwendung
  2. package javamagazin.virtual.ejb
  3. @Remote
  4. public class MyEJBImpl implements MyEJB {
  5. private VirtualDao virtualDao;
  6. @EJB
  7. public void setVirtualDao(VirtualDao virtualDao) {
  8. this.virtualDao = virtualDao;
  9. }
  10. public Something retrieveSomething(String arg0, String key) {
  11. Something s = virtualDao.getByQuery(key, “myQuery”, arg0);
  12. return s;
  13. }
  14. @TransactionAttribute(TransactionAttributeType.REQUIRED)
  15. public Long createSomething(String arg0, String arg1, String key) {
  16. Something s = new Something();
  17. s.setArg0(arg0);
  18. s.setArg1(arg1);
  19. return virtualDao.save(key, s);
  20. }
  21. }
Fazit

Durch ein einfaches Anwenden und richtiges Konfigurieren der EJB sowie der JPA-XML-Dateien, wird ein dynamisches Laden von unterschiedlichen Kundendatenbankverbindungen zur Laufzeit ohne viel Aufwand möglich. Wie die einzelnen Beispiele in den Listings zeigen, ist auch der Java-Code einfach gehalten und richtet sich an die EJB-3-Spezifikation. Somit sollte der Java-Code ohne zusätzliche Modifikationen in jedem Applikationsserver laufen.

Johann Zagler ist Softwareengineer bei der Firma Nekom in Bärnbach (Österreich). Durch seine Erfahrungen in der EJB-3-Programmierung ist er neben der Umsetzung und Inbetriebnahme von EJB-3-Projekten auch für die Forschung neuer Technologien sowie Möglichkeiten, diese in bestehende Projekte zu integrieren, verantwortlich.
  1. www.hibernate.org
  2. www.oracle.com/technology/products/ias/toplink/
  3. java.sun.com/blueprints/corej2eepatterns/Patterns/ServiceLocator.html
  4. JSR 220: Enterprise JavaBeans, Version 3.0

Teil 1   Teil 2   Teil 3   Teil 4   

Kommentare