Anfängerproblem mit Session Bean

oppi

Mitglied
Hallo ! Ich bekomme leider ein simples HelloWorld Bean Beispiel nicht zum laufen. Ich benutze Netbeans 6.9.1 mit dem integrierten Glassfish

Hier der Code:

Das interface der Bean. Liegt im selben Package wie der Client und natürlich in der Jar File auf dem Server
Java:
package HelloWorldBean;

import java.rmi.RemoteException;

public interface HelloWorld {

    public void setName(String name) throws RemoteException;
    public String getName() throws RemoteException;

}

Die Implementierung:
Java:
package HelloWorldBean;

import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.Remote;
import javax.ejb.Stateful;

@Stateful
@Remote(HelloWorld.class)
public class HelloWorldBean implements Serializable, HelloWorld {

    private String name = "unbekannter Benutzer";

    public void setName(String name) throws RemoteException {
        this.name = name;
    }

    public String getName() throws RemoteException {
        return "Hello " + name;
    }

}

und hier der Client

Java:
package HelloWorldBean;

import java.rmi.RemoteException;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Main {

    public static void main(String[] args) throws NamingException, RemoteException {
        String jndiName = HelloWorld.class.getName();
        InitialContext ctx = new InitialContext();
        try {
            HelloWorld remote = (HelloWorld)
              ctx.lookup(jndiName);
            System.out.println(remote.toString());
        } catch (NamingException nex) {
            System.out.println(nex.toString());
        }
        
    }

}

Leider wirft er mir hier die Exception:
Java:
java.lang.NullPointerException
javax.naming.NamingException: Lookup failed for 'HelloWorldBean.HelloWorld' in SerialContext  [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]]
        at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
        at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at HelloWorldBean.Main.main(Main.java:31)

Bin total neu in der Welt der EJB, von daher denke ich das ich irgendetwas total falsch mache 🙂
 
Der JNDI-Name ist nicht gleich dem Klassennamen. der JNDI-Name fängt mit "java:comp/env/..." o.ä. an.
Grüße

Ja, der JNDI Name ist in der Regel nicht der Klassenname, wäre aber möglich.

Ein von außen sichtbarer JNDI Name hat übrigens keinen Prefix. "java:" ist der Prefix für den Namespace, der nur innerhalb der VM des JNDI Servers sichtbar ist und "comp/env" ist der komponenteneigene Namespace des EJBs, also nur innerhalb des Beans sichtbar und für Mappings verwendet wird.
 

Zurück
Oben