现在我使用Jersey在Websphere 8.5上创建了宁静的Web服务。
我还希望restful web服务具有EJB 3.1的容量。
我的宁静网络服务代码如下:
@Stateless
@Path("/tagServiceRS/{tagid}")
@Interceptors(TestTagServiceInterceptor.class)
public class TagServiceRS implements Serializable{
private static final long serialVersionUID = 5L;
private static final Logger log = LoggerFactory.getLogger(TagServiceRS.class);
@EJB
private TagTestService tagTestService;
@PersistenceContext(unitName = "tag-ejb")
private EntityManager entityManager;
@GET
@Produces("text/plain")
public String findTagById(@PathParam("tagid") String tagid) {
return "TAG";
}
/**
* @return the tagTestService
*/
public TagTestService getTagTestService() {
return tagTestService;
}
/**
* @param tagTestService the tagTestService to set
*/
public void setTagTestService(TagTestService tagTestService) {
this.tagTestService = tagTestService;
}
当我在Websphere 8.5上部署战争时。 TagServiceRS成功部署为一个宁静的Web服务。我测试它。没关系。
但TagServiceRS 失败部署为 EJB会话bean 。
TagServiceRS的 entityManager 和 tagTestService 字段都是 null 。
我看到日志,没有错误或警告日志
下面是我的TagTestServiceBean代码。
@Stateless
public class TagTestServiceBean implements TagTestService, Serializable {
private static final long serialVersionUID = 5L;
private static final Logger log = LoggerFactory.getLogger(TagTestServiceBean.class);
@Override
public Tag testFindTagById(Long id) {
log.info("testFindTagById ++++++++++++++++++++++++++++++++++++++++ invoked for id: {}", id);
return new Tag();
}
}
@Remote
public interface TagTestService extends Serializable {
/**
* @param id
* the ID from database
* @return a tag, may null
*/
Tag testFindTagById(Long id);
}
If Any Answers.Thanks很多。
答案 0 :(得分:0)
将注释从@EJB
更改为@Resource
@Resource
private TagTestService tagTestService;
该类本身不需要使用@Stateless
注释进行注释。
此外,JAX-RS根资源和提供程序类必须具有JCDI指定的范围。范围控制JCDI托管bean的生命周期。根资源类可以具有任何有效范围,例如@ javax.enterprise.context.RequestScoped,这使得JAX-RS根资源类的行为与启用非JCDI的应用程序中的行为相同。 javax.ws.rs.core.Application子类和JAX-RS提供程序必须具有@ javax.enterprise.context.ApplicationScoped注释。
更多信息here。