EclipseLink-7198, Class was not found while converting from class names to classes [message #543435] |
Tue, 29 June 2010 12:41 |
Marcin Messages: 6 Registered: June 2010 |
Junior Member |
|
|
Hi
I observed weird errors when DAO class use criteria API (with generated meta model):
Local Exception Stack:
Exception [EclipseLink-7198] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Class: [(...).model.AbstractEntity] was not found while converting from class names to classes.
Internal Exception: java.lang.ClassNotFoundException: (...).model.AbstractEntity
at org.eclipse.persistence.exceptions.ValidationException.class NotFoundWhileConvertingClassNames(ValidationException.java:2 317)
AbstractEntity is an abstract class, annotated as @MappedSuperclass.
The problem occurs only for criteria queries, for named queries everything works fine. After execution any named query, the problematic criteria query also works!
It looks that during criteria query evaluation the class can not be loaded. If the class has been already loaded by another query (named query) the criteria query is evaluated successfully.
My environment:
glassfish 3.0.1
java 1.6.0_17
DataSource from JNDI
JTA transactions
All entities are defined explicitly (exclude-unlisted-classes set to true).
For the Glassfish nightly build (eclipselink 2.1.0.v20100529-r7411) identical exception is thrown.
Any help will be appreciated.
Marcin
[Updated on: Tue, 29 June 2010 12:49] Report message to a moderator
|
|
|
|
Re: EclipseLink-7198, Class was not found while converting from class names to classes [message #544045 is a reply to message #543539] |
Thu, 01 July 2010 13:02 |
Marcin Messages: 6 Registered: June 2010 |
Junior Member |
|
|
Sorry for the long delay. I changed load time weaving to static one and configure Spring to manage entity manager instead of application server. But it didn't help.
I will try to reproduce the error in integration test also (in J2SE environment).
Abstract entity class:
@MappedSuperclass
public abstract class AbstractEntity implements Entity {
private Long entityId;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "entity_id")
public Long getEntityId() {
return entityId;
}
public void setEntityId(Long entityId) {
this.entityId = entityId;
}
}
Employee entity (fragment), all fields use property access:
@Entity
@Table(name = "jee6_employee")
@NamedQueries( {
@NamedQuery(name = Employee.FIND_ALL_QUERY, query = "select e from Employee e order by e.lastName, e.firstName"),
@NamedQuery(name = Employee.COUNT_QUERY, query = "select count(e) from Employee e") })
@SuppressWarnings("serial")
public class Employee extends AbstractEntity {
public final static String FIND_ALL_QUERY = "Employee.findAll";
public final static String COUNT_QUERY = "Employee.count";
private String firstName;
private String lastName;
private String email;
private String phoneNumber;
...
}
The criteria query:
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
Root<Employee> employee = cq.from(Employee.class);
cq.orderBy(cb.asc(employee.get(Employee_.lastName)), cb.asc(employee.get(Employee_.firstName)));
TypedQuery<Employee> q = getEm().createQuery(cq);
q.setFirstResult(firstResult);
q.setMaxResults(maxResults);
return q.getResultList();
Stack trace (without JRebel integration, exception also is thrown):
Local Exception Stack:
Exception [EclipseLink-7198] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Class: [example.model.AbstractEntity] was not found while converting from class names to classes.
Internal Exception: java.lang.ClassNotFoundException: example.model.AbstractEntity
at org.eclipse.persistence.exceptions.ValidationException.classNotFoundWhileConvertingClassNames(ValidationException.java:2317)
at org.eclipse.persistence.descriptors.ClassDescriptor.convertClassNamesToClasses(ClassDescriptor.java:1217)
at org.eclipse.persistence.internal.jpa.metamodel.MappedSuperclassTypeImpl.create(MappedSuperclassTypeImpl.java:89)
at org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.create(ManagedTypeImpl.java:433)
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.initialize(MetamodelImpl.java:342)
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.<init>(MetamodelImpl.java:101)
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.<init>(MetamodelImpl.java:120)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.getMetamodel(EntityManagerSetupImpl.java:1956)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getMetamodel(EntityManagerFactoryImpl.java:472)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getCriteriaBuilder(EntityManagerFactoryImpl.java:456)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.zeroturnaround.jrebel.integration.toplink.EntityManagerFactoryMethodHandler.invokeInternal(EntityManagerFactoryMethodHandler.java:105)
at org.zeroturnaround.jrebel.integration.toplink.EntityManagerFactoryMethodHandler.invoke(EntityManagerFactoryMethodHandler.java:68)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl_$$_javassist_0.getCriteriaBuilder(EntityManagerFactoryImpl_$$_javassist_0.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:423)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:485)
at $Proxy129.getCriteriaBuilder(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:176)
at $Proxy130.getCriteriaBuilder(Unknown Source)
at example.dao.EmployeeDaoImpl.findByQuery(EmployeeDaoImpl.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:50)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy131.findByQuery(Unknown Source)
at example.web.primefaces.EmployeeController$1.fetchLazyData(EmployeeController.java:77)
at org.primefaces.component.datatable.DataTable.loadLazyData(DataTable.java:393)
at org.primefaces.component.datatable.DataTableRenderer.encodeTable(DataTableRenderer.java:503)
at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:441)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:239)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:77)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:61)
at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:201)
at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:133)
at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:69)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: example.model.AbstractEntity
at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:744)
at org.apache.felix.framework.ModuleImpl.access$100(ModuleImpl.java:61)
at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1656)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:88)
at org.eclipse.persistence.descriptors.ClassDescriptor.convertClassNamesToClasses(ClassDescriptor.java:1214)
... 96 more
[Updated on: Thu, 01 July 2010 13:07] Report message to a moderator
|
|
|
Re: EclipseLink-7198, Class was not found while converting from class names to classes [message #544059 is a reply to message #544045] |
Thu, 01 July 2010 13:42 |
Marcin Messages: 6 Registered: June 2010 |
Junior Member |
|
|
I found the root cause of the error - transactional context settings. When I define transactional propagation as SUPPORTS (Spring notation) the exception is thrown. With REQUIRED propagation everything works as I expected.
For the read only operation SUPPORTS transaction propagation should be 100% fine. And it is, but not for first invocation of criteria query when it fails.
Could you verify the criteria query execution without transactional context (auto commit mode), please?
[Updated on: Thu, 01 July 2010 13:42] Report message to a moderator
|
|
|
Re: EclipseLink-7198, Class was not found while converting from class names to classes [message #544425 is a reply to message #544059] |
Fri, 02 July 2010 15:48 |
Chris Delahunt Messages: 1389 Registered: July 2009 |
Senior Member |
|
|
Hello,
I suspect that when you have a transaction, the entitymanager is already initialized, and so the criteria query is getting a preloaded metamodel. When it is not in a transaction (or other queries are not executed first), because Spring wraps the EM, the underlying EclipseLink EntityManager/EMF might not have been initialized/deployed, and so may not have the correct classloader yet.
Please file an EclipseLink bug, and remember to vote for it and include the logs with EclipseLink log level set to finest(and a simple test case if possible). You can set the log level via the <property name="eclipselink.logging.level" value="FINEST" /> persistence property.
Best Regards,
Chris
|
|
|
|
Re: EclipseLink-7198, Class was not found while converting from class names to classes [message #641455 is a reply to message #543435] |
Thu, 25 November 2010 15:01 |
Mikael Nousiainen Messages: 7 Registered: August 2010 |
Junior Member |
|
|
I'm experiencing the same problem using a combination of Spring 3.0.5, EclipseLink 2.1.1 and GlassFish 3.0.1.
The class that causes the exception is always a @MappedSuperclass-annotated class (that is inside another JAR-file under WEB-INF/lib in a WAR package):
However, I've noticed that the exception happens only when restarting an already deployed application or restarting GlassFish. Deploying the application by uploading it to GlassFish seems to work every time.
Also, I'm using Propagation.REQUIRED for the transaction and I wouldn't like to introduce any hacks in the code, such as using EXTENDED PersistenceContext just as a workaround.
See stack trace:
Caused by: org.eclipse.persistence.exceptions.ValidationException:
Exception Description: Class: [com.company.wire.data.AbstractDataObject] was not found while converting from class names to classes.
Internal Exception: java.lang.ClassNotFoundException: com.company.wire.data.AbstractDataObject
at org.eclipse.persistence.exceptions.ValidationException.classNotFoundWhileConvertingClassNames(ValidationException.java:2362) ~[org.eclipse.persistence.core_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.descriptors.ClassDescriptor.convertClassNamesToClasses(ClassDescriptor.java:1233) ~[org.eclipse.persistence.core_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.internal.jpa.metamodel.MappedSuperclassTypeImpl.create(MappedSuperclassTypeImpl.java:89) ~[org.eclipse.persistence.jpa_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.create(ManagedTypeImpl.java:443) ~[org.eclipse.persistence.jpa_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.initialize(MetamodelImpl.java:343) ~[org.eclipse.persistence.jpa_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.(MetamodelImpl.java:101) ~[org.eclipse.persistence.jpa_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.(MetamodelImpl.java:120) ~[org.eclipse.persistence.jpa_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.getMetamodel(EntityManagerSetupImpl.java:1996) ~[org.eclipse.persistence.jpa_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getMetamodel(EntityManagerFactoryImpl.java:495) ~[org.eclipse.persistence.jpa_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getCriteriaBuilder(EntityManagerFactoryImpl.java:478) ~[org.eclipse.persistence.jpa_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at com.sun.enterprise.container.common.impl.EntityManagerFactoryWrapper.getCriteriaBuilder(EntityManagerFactoryWrapper.java:109) ~[container-common.jar:3.0.1]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_16]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_16]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_16]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_16]
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:176) ~[org.springframework.orm-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at $Proxy188.getCriteriaBuilder(Unknown Source) ~[na:na]
at com.company.wire.config.AbstractJpaConfigurationRepository.load(AbstractJpaConfigurationRepository.java:139) ~[wire-core-1.1.0.jar:1.1.0 (r5087)]
at com.company.devcap.config.impl.ApplicationConfigurationImpl.load(ApplicationConfigurationImpl.java:57) ~[ApplicationConfigurationImpl.class:na]
at com.company.devcap.config.impl.ApplicationConfigurationImpl.init(ApplicationConfigurationImpl.java:43) ~[ApplicationConfigurationImpl.class:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_16]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_16]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_16]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_16]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:340) ~[org.springframework.beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:293) ~[org.springframework.beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130) ~[org.springframework.beans-3.0.5.RELEASE.jar:3.0.5.RELEASE]
... 84 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.company.wire.data.AbstractDataObject
at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:744) ~[felix.jar:na]
at org.apache.felix.framework.ModuleImpl.access$100(ModuleImpl.java:61) ~[felix.jar:na]
at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1656) ~[felix.jar:na]
at java.lang.ClassLoader.loadClass(ClassLoader.java:252) ~[na:1.6.0_16]
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ~[na:1.6.0_16]
at java.lang.Class.forName0(Native Method) ~[na:1.6.0_16]
at java.lang.Class.forName(Class.java:247) ~[na:1.6.0_16]
at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:88) ~[org.eclipse.persistence.core_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
at org.eclipse.persistence.descriptors.ClassDescriptor.convertClassNamesToClasses(ClassDescriptor.java:1230) ~[org.eclipse.persistence.core_2.1.1.v20100817-r8050.jar:2.1.1.v20100817-r8050]
... 109 common frames omitted
[Updated on: Thu, 25 November 2010 15:03] Report message to a moderator
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04194 seconds