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

Posted

技术标签:

【中文标题】注释验证异常 (com.ibm.wsspi.amm.validate.ValidationException)【英文标题】:Annotation Validation Exception (com.ibm.wsspi.amm.validate.ValidationException) 【发布时间】:2012-11-02 05:35:49 【问题描述】:

当我尝试在服务器上部署我的应用程序时,我在 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】:

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

所有的 ref 注解与@Resource 基本相同。根据公共注释规范:

name 元素是资源的 JNDI 名称。当资源 注解应用于字段,名称的默认值 element 是类名限定的字段名。应用时 一个方法,默认是对应的JavaBeans属性名 由类名限定的方法。当应用于一个类时,有 不是默认值,必须指定名称。

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

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

如果您在类上声明注释,那么 (1) 没有注入,并且 (2) 没有默认名称,因此无法绑定到 java:comp/env。在这种情况下,注解声明将毫无意义,因此这是一个错误。

【讨论】:

以上是关于注释验证异常 (com.ibm.wsspi.amm.validate.ValidationException)的主要内容,如果未能解决你的问题,请参考以下文章

在spring security dofilter身份验证方法中使用@Autowired注释时出现Nullpointer异常[关闭]

启用Bean验证2.0?

十进制的最佳数据注释(18,2)

Visual Studio编译问题

Visual Studio编译问题

Visual Studio编译问题