In EJB2 kon je een stateful session bean als voglt bean initialiseren:
Hoe doe ik dit nu in EJB3? In EJB3 is het wordt voor het instantiëren van een bean namelijk geen home interface meer gebruikt:
In bovenstaand voorbeeld mis ik dus de mogelijkheid de stateful bean te initialiseren? In de Javadoc zie ik wel een @Init annotatie die blijkbaar een initialisatie methode aanwijst, maar hoe en wanneer wordt deze dan aangeroepen? De Javadoc spreekt van een "adapted Home/LocalHome interface". EJB3 heeft toch geen home interfaces meer?
Als tijdelijke workaround heb ik gewoon een init methode op de sessiebean gezet die dan zo geïnstantieerd wordt:
Deze aanpak is niet wenselijk aangezien men de init-methode kan vergeten. Of erger nog: meer dan eens aanroepen waardoor de gebruikscontext van de bean gereset wordt. Ik wil afdwingen dat de stateful session bean bij creatie geïnitialiseerd wordt.
Java:
1
2
3
4
| InitialContext context = new InitialContext(); Object obj = (MijnFacadeHome) context.lookup("nl/bedrijf/MijnFacadeHome"); MijnFacadeHome home = (MijnFacadeHome) PortableRemoteObject.narrow(obj, MijnFacadeHome.class); MijnFacadeBean bean = home.create(initParam1, initParam2); |
Hoe doe ik dit nu in EJB3? In EJB3 is het wordt voor het instantiëren van een bean namelijk geen home interface meer gebruikt:
Java:
1
2
| InitialContext context = new InitialContext(); MijnFacadeBean bean = (MijnFacadeBean) context.lookup("nl/bedrijf/MijnFacadeBean"); |
In bovenstaand voorbeeld mis ik dus de mogelijkheid de stateful bean te initialiseren? In de Javadoc zie ik wel een @Init annotatie die blijkbaar een initialisatie methode aanwijst, maar hoe en wanneer wordt deze dan aangeroepen? De Javadoc spreekt van een "adapted Home/LocalHome interface". EJB3 heeft toch geen home interfaces meer?
Als tijdelijke workaround heb ik gewoon een init methode op de sessiebean gezet die dan zo geïnstantieerd wordt:
Java:
1
2
3
| InitialContext context = new InitialContext(); MijnFacadeBean bean = (MijnFacadeBean) context.lookup("nl/bedrijf/MijnFacadeBean"); bean.init(initParam1, initParam2); |
Deze aanpak is niet wenselijk aangezien men de init-methode kan vergeten. Of erger nog: meer dan eens aanroepen waardoor de gebruikscontext van de bean gereset wordt. Ik wil afdwingen dat de stateful session bean bij creatie geïnitialiseerd wordt.
"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand