[j2ee] ejb 2.1 - interfejs lokalny

0

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ę.

0

Wylistuj sobie całe drzewo JNDI wtedy zobaczyć pod jaką nazwą zarejestrował się ten bean

Pozdrawiam

0

lokalizacja jest taka jaką określiłem w plikach xml, sprawdzałem to już wcześniej:

 +- newcalc (class: org.jnp.interfaces.NamingContext)
  |   +- NewCalc (proxy: $Proxy60 implements interface org.j2eesamples.newcalc.NewCalcHome,interface javax.ejb.Handle)
  |   +- NewCalcLocal (proxy: $Proxy58 implements interface org.j2eesamples.newcalc.NewCalcLocalHome)

1 użytkowników online, w tym zalogowanych: 0, gości: 1