V predchádzajúcom článku sme načrtli spôsob implementácie synchronizačných metód ejbLoad a ejbStore. Ako ste si mohli všimnúť, v prvej menovanej metóde sme, čo sa týka predmetu (objektu) aukcie, nemali k dispozícii priamo tento predmet (ako objekt triedy Item), ale iba hodnotu jeho primárneho kľúča.

Toto riešenie je v podstate vyhovujúce, ale treba si uvedomiť že iba potiaľ, pokiaľ nie je problém získať referenciu na rozhranie (component interface) daného objektu, predstavujúceho predmet aukcie. Problém by to byť nemal, pretože rovnako ako každý iný klient, aj entitný objekt môže získať referenciu na iný entitný objekt prostredníctvom volania vyhľadávacej metódy home rozhrania referencovaného objektu.

To znamená, že prvým krokom je získať referenciu na spomínané home rozhranie. EJB získava referenciu na home rozhranie inej EJB použitím definície uloženej v nastaveniach prostredia. Dané informácie sú uložené v deployment descriptore ejb-jar.xml. Nasledujúci fragment tohto súboru ukazuje, ako je možné definovať EJB referenciu na lokálne home rozhranie inej EJB.

<ejb-jar>
 <enterprise-beans>
  <entity>
   <ejb-name>EnglishAuction</ejb-name>
   …
    <ejb-local-ref>
     <description>
      Táto EJB referencia je použitá na
      lokalizáciu predmetu aukcie
     </description>
     <ejb-ref-name>ejb/Item</ejb-ref-name>
     <ejb-ref-type>Entity</ejb-ref-type>
     <local-home>ItemHome</local-home>
     <local>Item</local>
    </ejb-local-ref>
   …
  </entity>
  …
 </enterprise-beans>
 …
</ejb-jar>

EJB referencia je umiestnená v rámci subkontextu definície prostredia EJB. Hore uvedená deklarácia umožňuje aukčnej entite referencovať lokálne home rozhranie entitnej triedy Item – prostredníctvom elementu <ejb-ref-name>. Aby však bola spomínaná referencia aj dostupná, musíme ešte namapovať jej meno na JNDI kontext. Nasledujúci fragment zobrazuje ako je možné toto zabezpečiť ak používate server WebLogic. V prípade použitia iného servera musíte konzultovať dokumentáciu.

<weblogic-ejb-jar>
 <weblogic-enterprise-bean>
  <ejb-name>EnglishAuction</ejb-name>
   <reference-descriptor>
    …
    <ejb-local-reference-description>
     <ejb-ref-name>ejb/Item</ejb-ref-name>
     <jndi-name>Item</jndi-name>
    </ejb-local-reference-description>
   </reference-descriptor>
  …
 </weblogic-enterprise-bean>
 …
</weblogic-ejb-jar>

Keď máte EJB referenciu plne definovanú, potom Item už môže byť lokalizovaný z vnútra triedy EnglishAuctionBean použitím hodnoty jej primárneho kľúča. Nasledujúci fragment ilustruje tento spôsob.

 public class EnglishAuctionBean extends AbstractEntity
       implements EntityBean {
  …
  public Item getItem() {
   if (getItemId() != null) {
    if (item == null) {
     try {
      item = getItemHome().findByPrimaryKey(itemId);
     }
     catch (FinderException e) {
      throw new EJBException;
     }
    }
   }
   return item;
  }
  …
  private ItemHome getItemHome() {
   InitialContext initCtx = null;
   try {
    initCtx = new InitialContext();
    Object obj = initCtx.lookup( „java:comp/env/ejb/Item“ );
    return (ItemHome)obj;
   }
   catch (NamingException ex) {
    throw new EJBException(ex);
   }
   finally {
    try {
     if (initCtx != null) {
      initCtx.close();
     }
    }
    catch (Exception ex) {
     throw new EJBException(ex);
    }
   }
  }
  …
 }

Keď je EJB referencia nájdená, výsledkom je referencia na home rozhranie. Následne môžete zavolať vyhľadávaciu metódu tohto rozhrania a získať referenciu priamo na rozhranie komponenty asociované s entitnou triedou.

Predchádzajúci príklad ukazuje, ako použiť EJB referenciu na získanie lokálneho home rozhrania. Proces získania referencie na remote home rozhranie je takmer rovnaký. Rozdiel je v tom, že namiesto použitia elementu <ejb-local-ref> v deployment descriptore, použijete element <ejb-ref>. Tento element identifikuje remote a remote home rozhrania entitnej triedy pomocou nasledujúcej syntaxe:

<ejb-jar>
 <enterprise-beans>
  <entity>
   <ejb-name>EnglishAuction</ejb-name>
    …
    <ejb-ref>
     <description>
      EJB referencia pre remote bean
     </description>
     <ejb-ref-name>ejb/RemoteBean</ejb-ref-name>
     <ejb-ref-type>Entity</ejb-ref-type>
     <home>RemoteBeanHome</home>
     <remote>RemoteBean</remote>
    </ejb-ref>
   …
  </entity>
  …
 </enterprise-beans>
 …
</ejb-jar>

Ako implementovať vyhľadávacie metódy a ako správne používať metódy na odstraňovanie entitných objektov si ukážeme v inom článku.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět