Szoftverfejlesztés J2EE platformon - Labor: EJB 3.0

A VIK Wikiből


Banki alkalmazás

Inicializálás

  • Nyissuk meg a BankApp, BankApp-ejb es BankApp-war projekteket
  • Jobb click a projecteken, Resolve Reference Problems
    • valasszuk ki a megfelelo konyvtarat
  • Runtime ful / Databases / derby / Connect vagy
    Tools / Java DB Database / Start Java DB Server

Táblák létrehozása

  • Runtime ful / Databases / derby / Tables / Create Table...
    • Client (clientid INT PRIMARY KEY NOT NULL, name VARCHAR(50), address VARCHAR(200))
    • Account (accountid INT PRIMARY KEY NOT NULL, createdate DATE, balance DOUBLE)
  • varazsloban nem lehet foreign key-t beallitani =>
    • jdbc:derby / Execute Command...
    • ALTER TABLE APP."Account" ADD CONSTRAINT FK_CLIENT FOREIGN KEY ("clientid") REFERENCES APP."Client"("clientid")
      (minden tabla- es mezonev case sensitive; ha nem nagybetusek, idezojelbe kell tenni)
      • Ehhez kell egy =clientid= attribútumot is létrehozni előbb.
    • Account / Refresh
    • Foreign Key alatt meg kell jelennie az FK_CLIENT idegen kulcsnak

Entity beanek létrehozása

  • EJB projekten New / File/Folder... / Persistence / Persistence unit
    • Default beallitasokkal (name=BankApp-ejbPU, persistence provider=TopLink, data source=jdbc/sample) mukodik
  • EJB projekten New / Entity classes from database...
    • Data source: jdbc/sample
    • Adjuk hozza az Account tablat, a Client tabla az idegen kulcs miatt automatikusan hozzaadodik
    • Package: bank.ejb
    • Generate Named Query Annotations for Persistent Fields maradjon beixelve
  • BankApp-ejb / Source Packages / bank.ejb alatt megjelennek a generalt beanek
  • Az accountid es clientid private valtozok ele irjunk @GeneratedValue annotaciot

Session beanek létrehozása

(Ebből kell ellesni az entity bean hívást az önálló feladathoz)

  • EJB projekten New / File/Folder... / Persistence / Session beans for Entity Classes
    • Add all>>
    • Local interface
  • Letrejon a bank.ejb package-en belul 4 java file: AccountFacade.java, AccountFacadeLocal.java, ClientFacade.java, ClientFacadeLocal.java.
  • AccountFacade.java
    • A =@PersistenceContext= annotacio hatasara, a =private EntityManager em;= valtozot automatikusan inicializalja az alkalmazas szerver.

Önállóan megoldott feladat

  • BankOperator stateless session beant letrehozni
    • =void createClient(Client c);=
    • =void createAccount(int clientid, Account a);=
    • =void transfer(int from, int to, double amount) throws BankException;=

Részleges megoldás

  • =tar cf BankApp.tar BankApp=
  • ctrl+d-vel lepjunk ki a zonabol
  • =scp labor@zoneX:BankApp.tar .=

Példa egyéb EJB3 feature-ökre

Késleltetett átutalás

@Stateless
... implements TimedObject;

@Resource
private TimerService ts;
ts.CreateTimer(mikor, TransferInfo);

public void ejbTimeout(Timer t) {
	t.get...
	transfer...
}

Interceptors

@Interceptors({Logger.class, c2.class})
@Stateless
public class SessionBean extends SessionBeanLocal {
}

public class Logger {
	 @AroundInvoke
	 public Object ...(InvocationContext ic) throws Exception {
		  //ic.getMethod().getName()
		  //ic.getMethod().getParameters()
		  return ic.proceed();
	 }
}

EJB-QL 3.0 újítások

ld. JMS labor


-- Peti - 2006.10.11. </noautolink>