# Hello World mit Stateless Session Bean - Was mache ich falsch?



## JUserToto (29. Jan 2015)

Hallo zusammen,

ich habe in Netbeans eine Enterprise Application angelegt. Anschließend noch ein Class Library Project für die Remote-Schnittstellen der Session Beans.
Dann habe ich dem EJB Projekt eine Stateless Session Bean hinzugefügt (Remote):


```
package de.beans;
import javax.ejb.Stateless;

@Stateless
public class HelloWorldBean implements HelloWorldBeanRemote {
    @Override
    public String helloWorld() {
        return "Hello World!";
    }
}
```

Nun habe ich ein einfaches Servlet angelegt und möchte nun die SessionBean ansprechen:


```
import de.beans.HelloWorldBean;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {
    @EJB
    private static HelloWorldBean bean;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.getWriter().println("<html><head><title>HelloWorld</title></head><body>");
        response.getWriter().println(bean.helloWorld());
        response.getWriter().println("</body></html>");
    }
}
```

Nach dem Deploy bekomme ich die (sehr hilfreiche) Fehlermeldung:

Warnung:   StandardWrapperValve[TestServlet]: Servlet.service() for servlet TestServlet threw exception
java.lang.NoClassDefFoundError: de/beans/HelloWorldBean

Welchen Denkfehler habe ich hier? Das ganze soll auf JavaEE 7 laufen mit GlassFish 4.0.
Danke im Voraus!
lg Toto


edit: Nachdem ich es nochmal undeployed und wieder deployed habe bekomme ich nun die Fehlermeldung:
Warnung:   StandardWrapperValve[TestServlet]: Allocate exception for servlet TestServlet
javax.naming.NameNotFoundException: de.beans.HelloWorldBean#de.beans.HelloWorldBean not found


----------



## JUserToto (29. Jan 2015)

Ich habe ein Talent dafür, Probleme direkt zu lösen, nachdem ich sie hier gepostet habe. Selbst wenn ich den ganzen Tag schon davor hing...

In diesem Fall war wohl der Fehler, dass ich versucht habe, auf die Session Bean zuzugreifen und nicht auf die Remote Session Bean. Ich habe also im WAR-Projekt das Class-Library Projekt mit der Remote-Bean eingebunden und den Code geändert zu:


```
public class TestServlet extends HttpServlet {
    @EJB
    public HelloWorldBeanRemote bean;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.getWriter().println("<html><head><title>HelloWorld</title></head><body>");
        response.getWriter().println(bean.helloWorld());
        response.getWriter().println("</body></html>");
    }
}
```

So funktioniert es. Hat das so auch seine Richtigkeit?

liebe Grüße, (und sorry für den Doppelpost)
Toto


----------



## Steven Hachel (9. Mrz 2015)

Ja, so ist es richtig.


----------

