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

时间:2012-11-02 05:35:49

标签: java-ee ejb websphere

当我尝试在服务器上部署我的应用程序时,我在IBM Websphere Application Server 8.5上遇到以下异常。 我在我的应用程序中使用WS 8.5,EJB 3.1,Java EE 6。

[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代码。

@PersistenceContext(unitName="myUnit")
@Stateless(name="UsersService")
public class UsersServiceBean implements UsersService {...}

1 个答案:

答案 0 :(得分:1)

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

所有参考注释与@PersistenceUnit基本相同。根据公共注释规范:

  

name元素是资源的JNDI名称。当资源   注释应用于字段,即名称的默认值   element是由类名限定的字段名称。申请时   一个方法,默认是对应的JavaBeans属性名   由类名限定的方法。当应用于课程时,那里   没有默认值,必须指定名称。

最后一句是相关的,这是有道理的:使用@Resource(以及所有其他java:comp - 如注释)有两个效果:

  1. 如果在字段或方法上声明注释,则容器将在创建实例时自动注入。
  2. 使用其名称将引用插入java:comp/env/com.example.ClassName/targetName命名空间。如果在字段或方法上声明注释,则默认名称为java:comp/env
  3. 如果在类上声明注释,则(1)没有注入,(2)没有默认名称,因此无法绑定到{{1}}。在这种情况下,注释声明将毫无意义,因此这是一个错误。

相关问题