当我试图在服务器上部署我的应用程序时,我在IBM Websphere Application server8.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 {...}发布于 2012-11-02 21:24:48
简而言之,当在一个类上声明@PersistenceUnit时,您必须添加一个name="...",您可以使用它来查找带有new InitialContext("java:...")的EntityManagerFactory。或者,您可以在类中声明一个@PersistenceUnit(...) EntityManagerFactory emf;字段并省略其名称。
所有引用注释基本上都与@Resource相同。根据commons注解规范:
名称元素是资源的
名称。在字段上应用Resource注释时,name元素的默认值是由类名限定的字段名称。在方法上应用时,默认值是与由类名称限定的方法相对应的JavaBeans属性名称。当应用于类时,没有默认值,必须指定名称。
最后一句话是相关的,而且很有意义:使用@PersistenceUnit (和所有其他@Resource-like注释)有两个效果:
java:comp命名空间中。如果在字段或方法上声明批注,则缺省名称为java:comp/env/com.example.ClassName/targetName.如果在类上声明注释,则(1)没有注入,(2)没有默认名称,因此无法绑定到java:comp/env。在这种情况下,注释声明是没有意义的,所以这是一个错误。
https://stackoverflow.com/questions/13189881
复制相似问题