Questo esempio prende in considerazione JBoss 6.1.0 (l'ultima versione di JBoss supportata da Netbeans) come EJB Server, e Tomcat 6.0.x come Web Server ( Tomcat è molto più leggero ma non è in grado di gestire gli EJB ).
Il problema principale è far comunicare i due Server, problema che può essere risolto così:
1) Innanzitutto le interfacce dei beans in JBoss devono essere dichiarate come remote
2) E' necessario importare determinate librerie in Tomcat, in modo che capisca come comunicare con JBoss. Tra queste c'è sicuramente il progetto dell'EJB Server; cosa molto facile con netbeans : Tasto destro sull'applicazione del web server > proprietà > libraries > add project.
Le altre fanno riferimento ad alcuni Jar di JBoss:
/client/jboss-client.jar
/client/jboss-common-core.jar
/client/jbossall-client.jar
/client/jnp-client.jar
/lib/jboss-loggin
3) Bisogna richiamare i bean remoti. Per semplicità potete creare una classe Utitlity che abbia un metodo simile:
public Object callRemoteBean(String name) throws NamingException {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(props);
return ctx.lookup(name);
e a questo punto per richiamare il gestore di bean associato:
NomeBeanFacadeRemote nomeBeanFacade = (NomeBeanFacadeRemote) utility.callRemoteBean("NomeBeanFacade/remote");
e poi
nomeBeanFacade.find(idBean);