EJB Stateless Bean ist immer null im REST WebService

Dieses Thema EJB Stateless Bean ist immer null im REST WebService im Forum "Application Tier" wurde erstellt von Millman, 12. Jan. 2012.

Thema: EJB Stateless Bean ist immer null im REST WebService Hallo Community, ich hoffe ihr könnt mir bei folgendem Problem helfen: Ich habe ein WebProjekt mit Eclipse als...

  1. Hallo Community,

    ich hoffe ihr könnt mir bei folgendem Problem helfen:
    Ich habe ein WebProjekt mit Eclipse als dynamisches WebProjekt erstellt und verwende als Application Server den Glassfish3. Daneben nutze ich EJB 3.0 um eine stateless bean als Facade (@stateless Annotation) zu erzeugen, welche die folgende Business Logik implementiert:
    Code (Text):
    @Stateless
    public class Facade {  

    public void test(){    
    System.out.println("test hat geklappt!!");
    }  
    }
    Zusätzlich verwende ich eine RESTRessource um den REST WebService anzubieten welcher meine EJB (@EJB Annotation) verwendet:
    Code (Text):
    @RequestScoped
    @Path("/prescriptions")
    public class Ressource {

        @EJB
        private Facade facade;

        public Ressource() {
            super();
        }

        @GET
        @Path("/user/{userid}")
        @Produces(MediaType.APPLICATION_JSON)
        public void getUser(@PathParam("userid") String userid) {

            facade.test();

        }  

    }
    Obwohl ich in den REST-WS komme und aufrufen kann, ist meine EJB immer null und ich finde keinen Grund wieso.

    Ich wäre euch sehr dankbar, wenn ihr mir helfen könntet. Falls ihr mehr Informationen benötigt, sagt mir einfach bescheid.

    Vielen Dank im Voraus für eure Hilfe,
    Florian

    PS: Dies ist die Fehlermeldung, die ich immer bekomme:
    Code (Text):
    INFO: Portable JNDI names for EJB Facade : [java:global/TestProject/Facade,java:global/TestProject/Facade!webservices.Facade]  
    INFO: Portable JNDI names for EJB Facade : [java:global/TestProject/Facade, java:global/TestProject/Facade!webservices.Facade]
    INFO: Scanning for root resource and provider classes in the packages:
    webservices
    INFO: Root resource classes found:
    class webservices.Ressource
    INFO: No provider classes found.
    INFO: Initiating Jersey application, version 'Jersey: 1.5 01/14/2011 12:36 PM'

    SCHWERWIEGEND: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container    
    java.lang.NullPointerException

    at webservices.Ressource.getUser(Ressource.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:150)
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:70)
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:279)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:86)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:74)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1347)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1279)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1219)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:419)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:662)
     
  2. Vielleicht hilft dir das Grundlagen Training weiter --> *Klick*
  3. Verwende
    Code (Java):

    import com.sun.jersey.spi.inject.Inject;
    ...
    @Path("/x")
    public class XyService {

      /**
       * the standard javax.inject.inject does not work here!
       */

      @Inject
      private XyBean xBean;

     
     
  4. Ich musste, damit die Injection mit
    Code (Text):
    @EJB
    in einer RestFul Resource funktioniert, den RestFul Service selbst als EJB (
    Code (Text):
    @Stateless
    ) definieren.
     
  5. Das ist ebenfalls eine gültige Lösung wobei hier dann das @javax.inject.Inject benutzt werden sollte. @EJB sollte vereinfacht gesagt nur für Remote EJB eingesetzt werden. Unter anderem weil es keine @Alternatives zulässt.

    Quelle: https://community.jboss.org/thread/179388
     
  6. Kostenloses Java-Grundlagen Training im Wert von 39 €
    Schau dir jetzt hier das Tutorial an und starte richtig durch!