No soy muy habitual de este foro. Disculpas.
Mi custión es que trato de desplegar el Duke´s Bank de Sun en mi JBoss 4.2.2 GA
y tengo el problema de que no puedo llamar desde los session stateful bean a los entities. Los session implementan la interfaz home y remote y los entities las interfaces local-home y local.
Llamar a los session no hay problema, pero estos invocan a los entities y no hay manera de dar con el JNDI
Este es mi código:
Código:
Esta es una clase de utilidad para llamar a los EJBs. Los codigos de los nombres de los EJBs está en otra clase de utilidad:public final class EJBGetter { public static AccountHome getAccountHome() throws NamingException { Context initial = getInitialContext(); //InitialContext initial = new InitialContext(); Object objref = initial.lookup(CodedNames.ACCOUNT_EJBHOME); Debug.print("AccountHome", objref); //return (AccountHome) PortableRemoteObject.narrow(objref, AccountHome.class); return (AccountHome)objref; } public static AccountControllerHome getAccountControllerHome() throws NamingException { Context initial = getInitialContext(); //InitialContext initial = new InitialContext(); Object objref = initial.lookup(CodedNames.ACCOUNT_CONTROLLER_EJBHOME); Debug.print("AccountControllerHome", objref); return (AccountControllerHome) PortableRemoteObject.narrow(objref, AccountControllerHome.class); } public static CustomerHome getCustomerHome() throws NamingException { Context initial = getInitialContext(); //InitialContext initial = new InitialContext(); Object objref = initial.lookup(CodedNames.CUSTOMER_EJBHOME); Debug.print("CustomerHome", objref); //return (CustomerHome) PortableRemoteObject.narrow(objref, CustomerHome.class); return (CustomerHome)objref; } public static CustomerControllerHome getCustomerControllerHome() throws NamingException { Context initial = getInitialContext(); //InitialContext initial = new InitialContext(); Object objref = initial.lookup(CodedNames.CUSTOMER_CONTROLLER_EJBHOME); Debug.print("CustomerControllerHome", objref); return (CustomerControllerHome) PortableRemoteObject.narrow(objref, CustomerControllerHome.class); } public static TxHome getTxHome() throws NamingException { Context initial = getInitialContext(); //InitialContext initial = new InitialContext(); Object objref = initial.lookup(CodedNames.TX_EJBHOME); Debug.print("TxHome", objref); //return (TxHome) PortableRemoteObject.narrow(objref, TxHome.class); return (TxHome)objref; } public static TxControllerHome getTxControllerHome() throws NamingException { Context initial = getInitialContext(); //InitialContext initial = new InitialContext(); Object objref = initial.lookup(CodedNames.TX_CONTROLLER_EJBHOME); Debug.print("TxControolerHome", objref); return (TxControllerHome) PortableRemoteObject.narrow(objref, TxControllerHome.class); } private static Context getInitialContext(){ Context ctx = null; Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.PROVIDER_URL, "localhost:1099"); env.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces"); env.put("j2ee.clientName", "bank-client"); try { // Get an initial context ctx = new InitialContext(env); System.out.println("Got context"); } catch (NamingException ne) { // TODO Auto-generated catch block System.out.println("Did not get context"); ne.printStackTrace(); } return ctx; } }
Código:
De esta lista de codigos accedo a la base de datos y a los *controller*, pero estos, que son los session, llaman a los entities que son los restantes y JBoss me da EJBException porque no puede crear los entitiespublic interface CodedNames { public static final String BANK_DATABASE = "java:/DefaultDS"; public static final String ACCOUNT_EJBHOME = "AccountEJB"; public static final String ACCOUNT_CONTROLLER_EJBHOME = "AccountControllerEJB"; public static final String CUSTOMER_EJBHOME = "CustomerEJB"; public static final String CUSTOMER_CONTROLLER_EJBHOME = "CustomerControllerEJB"; public static final String TX_EJBHOME = "TxEJB"; public static final String TX_CONTROLLER_EJBHOME = "TxControllerEJB"; }
Estos son mis descriptores:
jboss-client.xml.-
Código:
application-client.xml.-<jboss-client> <jndi-name>bank-client</jndi-name> <ejb-ref> <ejb-ref-name>ejb/AccountControllerEJB</ejb-ref-name> <jndi-name>accountController</jndi-name> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/CustomerControllerEJB</ejb-ref-name> <jndi-name>customerController</jndi-name> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/TxControllerEJB</ejb-ref-name> <jndi-name>txController</jndi-name> </ejb-ref> </jboss-client>
Código:
No os incluyo el ejb-jar.xml por motivos de espacio pero lo paso en otro post. Si podeis ayudarme os estaría muy agradecido.<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE application-client PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.3//EN' 'http://java.sun.com/dtd/application-client_1_3.dtd'> <application-client> <display-name>BankAdmin</display-name> <ejb-ref> <ejb-ref-name>ejb/CustomerControllerEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>com.sun.ebank.ejb.customer.CustomerControllerHome</home> <remote>com.sun.ebank.ejb.customer.CustomerController</remote> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/AccountControllerEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>com.sun.ebank.ejb.account.AccountControllerHome</home> <remote>com.sun.ebank.ejb.account.AccountController</remote> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/TxControllerEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>com.sun.ebank.ejb.tx.TxControllerHome</home> <remote>com.sun.ebank.ejb.tx.TxController</remote> </ejb-ref> </application-client>
Un saludo,
pepeADL