Hola,
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:
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;
}
}
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:
Código:
public 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";
}
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 entities
Estos son mis descriptores:
jboss-client.xml.-
Código:
<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>
application-client.xml.-
Código:
<?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>
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.
Un saludo,
pepeADL