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
- futtatas laborbol: BankApp deploy utan http://zoneX:8080/BankApp-war/index.jsp
- =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>