Știi, curs tehnologia enterprise fasole Java Intuit

Un exemplu de „ora locală“

Dezvoltarea sesiune apatride de fasole (apatride Session Bean), care, ca răspuns la o interogare va returna ora serverului curent. Noi numim componenta CorrectTimeBean .Vnachale uita-te la codul sursă al componentei și consola client, prin care vom afla timpul exact al serverului, și apoi arată cum puteți pune în aplicare acest exemplu folosind mediul de dezvoltare clase Eclipse-WTP .Toate și interfețe specifice componentei, correctTimeBean plasat în ambalaj.

interfață de la distanță

În primul rând, vom defini o interfață de la distanță (Remote Interface) a dezvoltat fișier CorrectTimeRemote.java componente. Toate tipurile de interfețe de la distanță se extind de interfață (extinde) javax.ejb.EJBObject.

Aici există doar obtainCorrectTime () metoda - returnează ora serverului curent. Această metodă poate genera RemoteExcepton excepție necesară pentru toate metodele de interfață la distanță.

Interfața acasă

Acum definesc interfața de start (Acasă Interface) în fișierul CorrectTimeHomejava.

crea (), metoda este responsabilă pentru componenta dezvoltată exemplu de inițializare. Dacă este necesar, creați (), metoda poate fi supraîncărcat (supraîncărcat), adică identificat cu metodele pot crea o altă listă de parametri formali. Call crea () returneaza link-ul de CorrectTimeBean componenta de la distanță.

o clasă de componente

Acum ia în considerare clasa care implementează componenta dezvoltată (fișier CorrectTimeBean.java).

În această clasă obtainCorrectTime (este definit) metoda. Se returnează ora curentă pe server. In plus, mai multe metode sunt definite în această componentă.

  • void ejbCreate (). componente EJB nu ar trebui să definească constructori. Inițializarea necesară se realizează ejbCreate metoda (). Pentru apatridului sesiune de fasole (apatride Session Bean) Această metodă se numește doar o singură dată - în mod direct în crearea serverului său. Atunci când un client folosind interfața de start (Acasă Interface) primește o referință la obiectul sesiune de fasole este apatrid, ejbCreate () metoda nu este numit.
  • void ejbActivate () aruncă EJBException, RemoteException. Această metodă este utilizată pentru componentele sesiunii de stat (fasole Statefull sesiune) și componentele obiect (entitate) Fasole boabe .În sesiune apatride (Fasole Apatrid sesiune) nu este utilizat.
  • void ejbPassivate () aruncă EJBException, RemoteException. Această metodă este folosită pentru fasole sesiune cu fasole de stat și entități. Apatridului fasole (fasole sesiune Apatrid sesiune) nu este utilizat.
  • void ejbRemove () aruncă EJBException, RemoteException. Această metodă pentru apatridului sesiune de fasole numită -Cu o dată retragerea acesteia.
  • void setSessionContext (SessionContext arg0).

domeniu bine definit public static final de serialVersionUID lung. Incepand cu Java 1.5 în toate clasele care implementează (implementează) interfață java.io.Serializable. se recomandă să se definească acest domeniu, cu o cheie unică de 64-biți. Dacă acest câmp nu este specificat, Java aparatul va trebui să-l genereze atunci când serializarea unui obiect. Acest câmp este generat de clasa obiectului. versiuni ale claselor cu serializarea și deserializarea pot fi diferite (poate fi, de exemplu, un pic metode puse în aplicare în mod diferit) - în cazul în care este generat automat, poate apărea următoarea situație. Apoi, când deserializarea este o excepție este aruncată. În cazul în care câmpul a fost definit de către dezvoltator, atunci această situație ar fi putut fi evitate. câmp serialVersionUID pot fi generate de built-in mecanismul Eclipse-WTP (cm. mai jos), sau folosind utilitarul serialver. intrarea în orice detaliu Java Development Kit .Bolee despre mecanismul de serializare poate fi găsit în Obiect Java serializare Specificații.

Descriptorul de implementare

Acum trebuie să definiți XML - descriptor de implementare componente (descriptor de implementare) Componentele sunt de diferite tipuri, pot interacționa cu serviciul de securitate, sistemul de tranzacție numele și alte servicii comune pentru sistemele de obiecte distribuite. Containerul EJB gestionează componente în mod automat, dar este necesar pentru a furniza informații suplimentare despre fiecare componentă. În acest scop, descriptorii de implementare. Inițial, EJB 1.0 ca descriptorii utilizate clase speciale, atunci aceste clase au fost înlocuite cu un fișier XML. Pentru EJB 2.1 descriptor de implementare pentru CorrectTimeBean după cum urmează:

Acest descriptor de implementare conține următoarele elemente:

Aplicația client

Acum, creați o aplicație client (fișier CorrectTimeClient.java), care se va conecta la containerul EJB, pentru a primi o referință la componenta de interfață de la distanță pentru a provoca o metodă de obținere a timpului de server, și pentru a imprima de data aceasta, împreună cu ora de pe computerul client.

Clientul cu privire la rândul său, la componenta, începe cu pachete folosind JNDI (Java Naming si director Interface) pentru conectarea la un container de componente. JNDI - este independent de implementare API pentru numele de motoare și directoare. Fiecare furnizor EJB trebuie să furnizeze serviciul de director compatibil-JNDI. Cu ajutorul clientului JNDI primește o referință la distanță la componentele plasate într-un container EJB. createJBossContext () metoda conține logica, bazată pe JNDI pentru a obține o conexiune de rețea la serverul JBoss EJB .Pentru containere diferite, acest cod va fi diferit, de exemplu, pentru WebSphere codul containerului arată diferit:

Mai multe JNDI vor fi discutate în continuare într-un capitol separat.

Parametrul java.naming.provider.urI organism metoda createJBossContext () specifică URL-ul serverului de aplicații JBoss .În acest exemplu, acest parametru este JNP: //127.0.0.1: 1099 serviciu / JNDI corespunzătoare din JBoss, care rulează pe mașina locală. După stabilirea JNDI -connection și obținerea contextul metodei createJBossContext () Acest context poate fi utilizat pentru a căuta un CorrectTimeBean obiect intern.

Obiect ref = jndiContext.lookup ( "CorrectTimeBean");

În această aplicație client, metoda

PortableRemoteObject. îngust (); CorrectTimeHome home = (CorrectTimeHome)

PortableRemoteObject. îngust (ref, CorrectTimeHome.class);

Numele prin care obiectul este cautat pentru componenta CorrectTimeBean internă setată în timpul desfășurării. Acesta poate fi la fel ca o componentă în limbajul XML descriptor, sau să fie ceva complet diferit.

Primirea o referință la distanță la un obiect intern, putem folosi pentru a crea o nouă componentă de obiect CorrectTimeBean.

CorrectTimeRemote remote = home.create ();

De fapt, după cum am menționat mai devreme, un apatrid sesiune de fasole nu a creat în mod necesar atunci când se solicită crearea () - în container EJB are o piscină de componente gata făcute fără condiție. Apelul crea () returnează doar una dintre ele. Acum putem apela metoda obtainCorrectTime (). prin care RMI se numește prin metoda corespunzătoare a componentei a EJB container.

Data remoteDate = remote.obtainCorrectTime ();