programmera.net -> ejb -> normal för utskrift | info@programmera.net |
SessionBean och RMI
1. SessionBean och RMI 2. Protokoll i EJB och RMI 3. Problem med modellen? |
1. SessionBean och RMI
Denna sida är till för dig som redan kan RMI och vill veta vad som skiljer ett RMI-anrop från ett anrop till en sessionsböna. Sessionsbönor (och entitetsbönor också för den delen) kan utnyttja RMI för att möjligjöra att klienter på andra maskiner gjör fjärranrop mot servern, en teknik som beskrivs på sidan om
RMI . Nedan visas en figur som föreställer en typisk implementation av RMI. I figuren vill vi att klassen Z ska utnyttjas från en klient på en annan maskin:
Jämför detta med arkitekturen för en sessionsböna:
Det finns några skillnader mellan hur sessionsbönor och RMI fungerar:
2. Protokoll i EJB och RMI
EJB och RMI använder inte samma protokoll för kommunikation mellan datorer:
IIOP har följande egenskaper:
3. Problem med modellen?
Det är lätt att man ställer sig frågan: Om Z definierar affärslogiken hos bönan, varför ärver inte även ZBean från Z så att man är garanterad att affärslogiken verkligen implementeras i bönan? Som det är nu kan Z definiera upp en affärslogik som helt ignoreras av ZBean.
Svaret är: Jo, så borde det vara. Men, eftersom Z ärver av EJBObject kommer i så fall ZBean också att ärva av EJBObject. Detta resulterar i att ZBean tvingas att implementera en mängd funktioner som bönan inte använder. Det är till och med en säkerhetsrisk att göra på detta sätt, eftersom bönan då implementerar metoder som gör den tillgänglig för klasser som inte har rätt till den. Om man verkligen vill lösa problemet kan man göra såhär:
Här bestämmer man affärslogiken i ZBusiness och låter både Z och ZBean ärva från det gränssnittet. Nu måste ZBean implementera affärslogiken.