REST サービス (glassfish 3.2 サーバーで jersey を使用) 内に EJB を注入する際に問題があり、困惑しています。
次のように宣言された EJB インターフェースがあります。
import javax.ejb.Local;
@Local
public interface TestServiceLocal {
public String getText();
}
およびそれを実装するクラス Bean:
import javax.ejb.Local;
import javax.ejb.Stateless;
/**
* Session Bean implementation class TestService
*/
@Stateless
@Local(TestServiceLocal.class)
public class TestService implements Serializable, TestServiceLocal {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public TestService() {
// TODO Auto-generated constructor stub
}
@Override
public String getText() {
return this.getClass().getName();
}
}
REST サービスは次のようになります。
@Path("/service")
@Stateless
public class TestRestService {
@EJB(beanName="TestService")
private TestServiceLocal testService;
public TestRestService () {
}
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/events")
public String getText() {
return testService.getText();
}
}
問題は、REST サービスが呼び出されたときに Bean を作成できないことです。
SEVERE: EJB5070: Exception creating stateless session bean : [TestRestService]
WARNING: EJB5184:A system exception occurred during an invocation on EJB TestRestService, method: public java.lang.String TestRestService.getText()
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 com.sun.proxy.$Proxy839.getText(Unknown Source)
ここに投稿された回答をすでに見ましたが、どれもうまくいかないようでした。どんな助けでも大歓迎です。ありがとうございました!
PS: 言及するのを忘れていました (関連性があるかどうかはわかりません)。私のプロジェクトは、動的 Web プロジェクトとして eclipse Juno の下で作成されます。