Witam,
mam taki problem - wygląda na to, że program nie znajduje mi Beana po interfejsie lokalnym.
Program kliencki:
package org.j2eesamples.newcalc;
import java.util.Hashtable;
import javax.naming.InitialContext;
import org.j2eesamples.newcalc.NewCalcLocal;
import org.j2eesamples.newcalc.NewCalcLocalHome;
public class NewCalcClientLocal {
public static void main(String[] args) {
try {
Hashtable props = new Hashtable();
props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://127.0.0.1:1099");
InitialContext ic = new InitialContext(props);
System.out.println("Local - Jest kontekst!");
NewCalcLocalHome nclh = (NewCalcLocalHome)ic.lookup("NewCalcLocal");
System.out.println("Jest obiekt domowy!");
System.out.println(nclh.toString());
System.out.println(nclh.getClass().toString());
NewCalcLocal nc = nclh.create();
System.out.println(nc.sum(3, 8));
System.out.println(nc.getHello());
} catch (Exception e) {
//System.out.println(e.toString());
e.printStackTrace();
}
}
}
I trace do tego:
Local - Jest kontekst!
Jest obiekt domowy!
NewCalcLocalHome
class $Proxy0
java.lang.NullPointerException
at org.jboss.ejb.plugins.local.LocalHomeProxy.invoke(LocalHomeProxy.java:133)
at $Proxy0.create(Unknown Source)
at org.j2eesamples.newcalc.NewCalcClientLocal.main(NewCalcClientLocal.java:26)
NewCalcLocal.java:
package org.j2eesamples.newcalc;
import javax.ejb.CreateException;
public interface NewCalcLocal extends javax.ejb.EJBLocalObject {
public int sum(int arg1, int arg2) throws CreateException;
public String getHello() throws CreateException;
}
NewCalcLocalHome.java:
package org.j2eesamples.newcalc;
public interface NewCalcLocalHome extends javax.ejb.EJBLocalHome {
public static final String COMP_NAME = "java:comp/env/ejb/NewCalcLocal"; //bez tego...
public static final String JNDI_NAME = "NewCalcLocal"; //i tego jest tak samo
public NewCalcLocal create() throws javax.ejb.CreateException;
}
klasa Beana jest sandardowa więc już nie będę zamieszczał, bo nie w niej jest problem...
jeszcze ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
version="2.1">
<enterprise-beans>
<session>
<ejb-name>NewCalc</ejb-name>
<home>org.j2eesamples.newcalc.NewCalcHome</home>
<remote>org.j2eesamples.newcalc.NewCalc</remote>
<local-home>org.j2eesamples.newcalc.NewCalcLocalHome</local-home>
<local>org.j2eesamples.newcalc.NewCalcLocal</local>
<ejb-class>org.j2eesamples.newcalc.NewCalcBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
<ejb-local-ref>
<ejb-ref-name>NewCalcLocal</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>org.j2eesamples.newcalc.NewCalcLocalHome</local-home>
<local>org.j2eesamples.newcalc.NewCalcLocal</local>
<ejb-link>NewCalcLocal</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
</ejb-jar>
i jboss.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_2.dtd">
<jboss>
<enterprise-beans>
<session>
<ejb-name>NewCalc</ejb-name>
<jndi-name>newcalc/NewCalc</jndi-name>
<local-jndi-name>NewCalcLocal</local-jndi-name>
</session>
</enterprise-beans>
</jboss>
w tej chwili skończyły mi się pomysły jak zrobić, żeby to zadziałało. dodam tylko, że stworzyłem analogiczny program kliencki dla interfejsu zdalnego i tam pięknie śmiga. a tutaj z interfejsem lokalnym mam jakiś kosmiczny problem. Bardzo prosze o pomoc o chociaż jakąś wskazówkę.