如何在Websphere 8.5的战争中部署EJB 3.1会话bean

时间:2013-03-08 01:30:53

标签: ejb jersey websphere jax-rs websphere-8

现在我使用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很多。

1 个答案:

答案 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