Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用EJB';它在一个Restful Web服务中_Java_Rest_Jakarta Ee_Ejb_Ejb 3.1 - Fatal编程技术网

Java 无法使用EJB';它在一个Restful Web服务中

Java 无法使用EJB';它在一个Restful Web服务中,java,rest,jakarta-ee,ejb,ejb-3.1,Java,Rest,Jakarta Ee,Ejb,Ejb 3.1,我有一个非常简单的类,它是一个RESTfulWeb服务。我想在web服务中使用EJB。我使用@EJB注释来注入我的EJB。唯一的问题是,EJB总是空的。然后,我使我的web服务本身成为无状态EJB。这修复了空值问题。但是,当我尝试调用EJB上的任何函数时,会出现以下错误: EVERE: EJB5070: Exception creating stateless session bean : [CasperLoggingDao] WARNING: EJB5184:A system exceptio

我有一个非常简单的类,它是一个RESTfulWeb服务。我想在web服务中使用EJB。我使用@EJB注释来注入我的EJB。唯一的问题是,EJB总是空的。然后,我使我的web服务本身成为无状态EJB。这修复了空值问题。但是,当我尝试调用EJB上的任何函数时,会出现以下错误:

EVERE: EJB5070: Exception creating stateless session bean : [CasperLoggingDao] WARNING: EJB5184:A system exception occurred during an invocation on EJB CasperLoggingDao, method: public boolean com.dv.model.dao.CasperLoggingDao.log(com.dv.model.entity.CasperLogMessage) 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 $Proxy319.log(Unknown Source) at com.dv.model.dao.__EJB31_Generated__CasperLoggingDao__Intf____Bean__.log(Unknown Source) at com.dv.ws.casper.logging.CasperLoggingResource.putXml(CasperLoggingResource.java:64) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052) at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124) at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388) at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571) at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(Int ... 我以前做过这个。为了从Restful web服务访问EJB,我需要做一些特殊的事情吗?还有其他想法吗

编辑:下面是CasperLoggingDao的代码

@Stateless
@LocalBean
public class CasperLoggingDao extends BaseDao<CasperLogMessage> {

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

public CasperLoggingDao()
{
    super(CasperLogMessage.class);
}

public CasperLoggingDao(EntityManager em)
{
    super(CasperLogMessage.class, em);
}


public boolean log(CasperLogMessage casperLogMessage)
{
    return create(casperLogMessage) != null;
}


}
@无状态
@本地豆
公共类CasperLoggingDao扩展了BaseDao{
私有静态最终记录器Logger=Logger.getLogger(CasperLoggingDao.class.getName());
公共图书馆
{
super(CasperLogMessage.class);
}
公共CasperLoggingDao(实体管理器em)
{
super(CasperLogMessage.class,em);
}
公共布尔日志(CasperLogMessage CasperLogMessage)
{
返回创建(casperLogMessage)!=null;
}
}

假设您的
BaseDao
可以调用
EntityManager
这样做是否安全:

@PersistenceContext(unitName = "somePU") 
protected EntityManager entityManager;

另外,您不需要在
CasperLoggingDao
上使用
@LocalBean
。您还需要
@Stateless
BaseDao

什么是CasperLoggingResource的第64行?如何在类级别上对
CasperLoggingDao
进行注释?您可以发布CasperLoggingDao的代码吗?@JamesB第64行是
casperLogger.log(消息)@esej我已经发布了该类的代码
@PersistenceContext(unitName = "somePU") 
protected EntityManager entityManager;