Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/12/2008, 09:08
pepeADL
 
Fecha de Ingreso: mayo-2008
Ubicación: Madrid capital, España
Mensajes: 11
Antigüedad: 16 años, 7 meses
Puntos: 0
Duke´s Bank contra JBoss

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