当我尝试在服务器上部署我的应用程序时,我在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 {...}
答案 0 :(得分:1)
简而言之,在对某个类声明@PersistenceUnit
时,您必须添加一个name="..."
,您可以使用EntityManagerFactory
查找new InitialContext("java:...")
@PersistenceUnit(...) EntityManagerFactory emf;
。或者,您可以在班级中声明@Resource
字段并省略名称。
所有参考注释与@PersistenceUnit
基本相同。根据公共注释规范:
name元素是资源的JNDI名称。当资源 注释应用于字段,即名称的默认值 element是由类名限定的字段名称。申请时 一个方法,默认是对应的JavaBeans属性名 由类名限定的方法。当应用于课程时,那里 没有默认值,必须指定名称。
最后一句是相关的,这是有道理的:使用@Resource
(以及所有其他java:comp
- 如注释)有两个效果:
java:comp/env/com.example.ClassName/targetName
命名空间。如果在字段或方法上声明注释,则默认名称为java:comp/env
。如果在类上声明注释,则(1)没有注入,(2)没有默认名称,因此无法绑定到{{1}}。在这种情况下,注释声明将毫无意义,因此这是一个错误。