2

私は残りのWebサービスを持っています。この残りの Web サービス内で@EJB、EJB を注入するために使用します。次に、EJB で関数を呼び出します。問題は、私がそうするとすべてが爆発することです。デモ用に簡単な例を作成しました。

私は2つのプロジェクトを持っています。1 つは、EJB を含む ear プロジェクトです。


import javax.ejb.Stateless;
import javax.ejb.LocalBean;

/**
 *
 * @author dan
 */
@Stateless
@LocalBean
public class DummyBean {

    public String dummMessage(){
        return "Hello World";
    }
}

もう 1 つは、私の Web サービスを含む戦争です。


@Stateless
@Path("resources")
public class CasperMessage {

    private final Logger logger = Logger.getLogger(ServerMessageManager.class.getName());

    @Context
    private UriInfo context;

    @EJB
    DummyBean db;

    /**
     * Creates a new instance of CasperMessage
     */
    public CasperMessage() {
    }

    @PUT
    @Consumes("application/xml")
    @Produces("application/xml")
    @Path("/message/get")
    public String getMessage(String content) 
    {
       //Message retVal = serverMessageManager.getMessageRecieved(message);
       String retVal = db.dummMessage();
       return retVal;
    };

}

コードを実行すると、次の例外が発生します。


SEVERE: EJB5070: Exception creating stateless session bean : [DummyBean]
WARNING: EJB5184:A system exception occurred during an invocation on EJB DummyBean, method: public java.lang.String com.dv.business.messaging.server.DummyBean.dummMessage()
WARNING: javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:454)
    at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2547)
    at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1899)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    at $Proxy207.dummMessage(Unknown Source)
    at com.dv.business.messaging.server.__EJB31_Generated__DummyBean__Intf____Bean__.dummMessage(Unknown Source)
    at com.dv.ws.CasperMessage.getMessage(CasperMessage.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

アイデアや提案はありますか?これはとても単純なアイデアのように思えますが、私にはうまくいきません。

4

1 に答える 1

1

私はあなたのクラスで簡単な戦争を作成します-すべてうまく機能しています。
WAR構造

-META-INF/MANIFEST.MF  
-WEB-INF/sun-web.xml  
-WEB-INF/web.xml  
-WEB-INF/classes/com/package/CasperMessage.class  
-WEB-INF/classes/com/package/DummyBean.class  
-index.jsp  

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>  

sun-web.xml

<sun-web-app>
    <context-root>/api</context-root>
</sun-web-app>  

Glass Fish 3.1にデプロイし、 / api / resources / message / getでPUTリクエストを送信し、応答を取得します

于 2012-09-07T16:43:46.163 に答える