首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批注验证异常(com.ibm.wsspi.amm.validate.ValidationException)

批注验证异常(com.ibm.wsspi.amm.validate.ValidationException)
EN

Stack Overflow用户
提问于 2012-11-02 13:35:49
回答 1查看 2.7K关注 0票数 3

当我试图在服务器上部署我的应用程序时,我在IBM Websphere Application server8.5上得到了以下异常。我在我的应用程序中使用了WS 8.5、EJB 3.1、Java EE 6。

代码语言:javascript
复制
[11/1/12 11:06:47:208 PKT] 0000005d annotations   E   CWWAM0003E: An exception occurred while validating an annotation: com.ibm.wsspi.amm.validate.ValidationException: CWWAM2302E: The class com.xxx.yyy.services.UsersServiceBean is annotated with an invalid @PersistenceContext declaration; no name is specified.
                             com.ibm.wsspi.amm.validate.ValidationException: CWWAM2302E: The class com.xxx.yyy.services.UsersServiceBean is annotated with an invalid @PersistenceContext declaration; no name is specified.
at com.ibm.ws.amm.validate.persistence.PersistenceContextValidator.validateClassAnnotation(PersistenceContextValidator.java:86)

下面是我的Java代码。

代码语言:javascript
复制
@PersistenceContext(unitName="myUnit")
@Stateless(name="UsersService")
public class UsersServiceBean implements UsersService {...}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-02 21:24:48

简而言之,当在一个类上声明@PersistenceUnit时,您必须添加一个name="...",您可以使用它来查找带有new InitialContext("java:...")EntityManagerFactory。或者,您可以在类中声明一个@PersistenceUnit(...) EntityManagerFactory emf;字段并省略其名称。

所有引用注释基本上都与@Resource相同。根据commons注解规范:

名称元素是资源的

名称。在字段上应用Resource注释时,name元素的默认值是由类名限定的字段名称。在方法上应用时,默认值是与由类名称限定的方法相对应的JavaBeans属性名称。当应用于类时,没有默认值,必须指定名称。

最后一句话是相关的,而且很有意义:使用@PersistenceUnit (和所有其他@Resource-like注释)有两个效果:

  1. 如果在字段或方法上声明注释,则容器将在创建实例时自动插入。
  2. 引用将使用其名称插入到java:comp命名空间中。如果在字段或方法上声明批注,则缺省名称为java:comp/env/com.example.ClassName/targetName.

如果在类上声明注释,则(1)没有注入,(2)没有默认名称,因此无法绑定到java:comp/env。在这种情况下,注释声明是没有意义的,所以这是一个错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13189881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档