注释验证异常 (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="..."
,您可以使用它来查找EntityManagerFactory
和new 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异常[关闭]