我在Java 7下使用WAS Liberty 8.5.5.5(在Oracle java 7-8和IBM java 7下也尝试过)。
当我创建一个NamedQuery
时,代码会编译,部署并运行正常。
但是,如果我尝试使用NamedQueries
注释,我会得到以下重复:
java.lang.ArrayStoreException: com.sun.proxy.$Proxy29
at sun.reflect.annotation.AnnotationParser.parseAnnotationArray(AnnotationParser.java:765)
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:537)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355)
at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
at java.lang.Class.createAnnotationData(Class.java:3521)
at java.lang.Class.annotationData(Class.java:3510)
at java.lang.Class.getAnnotation(Class.java:3415)
经过一番调查,我发现了以下两个错误:
Jboss中的ArrayStoreException:https://issues.jboss.org/browse/JBAS-9392
声明类缺失的注释时ArrayStoreException:http://bugs.java.com/view_bug.do?bug_id=7183985
似乎环境中缺少javax.persistence.NamedQueries
接口(stavgely javax.persinstence.NameQuery存在......)
我使用Eclipse Kepler进行开发,部署也由IDE处理。 更多的事情;使用相同代码库的其他开发人员可以使用前面提到的设置成功部署和运行应用程序 - 所以我怀疑部署可能是这个问题的原因。
有没有办法“告诉”WAS包含缺少的类运行时?
答案 0 :(得分:0)
花了一些时间,但我找到了解决方案。
我们正在使用Ecliselink作为JPA提供程序,并相应地加载它:
<classloader commonLibraryRef="EclipseLinkLib" delegation="parentLast"/>
似乎Eclipselink(版本2.5.2)包含javax.persistence.NamedQuery
接口,但不包含javax.persistence.NamedQueries
接口 - 这样WAS不会加载缺少的接口。
通过更改delegation="parentFirst"
,该应用可以正常使用。