EclipseLink-7198, Class was not found while converting from class names to classes [message #543435] |
Tue, 29 June 2010 08:41  |
Eclipse User |
|
|
|
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 08:49] by 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 09:02   |
Eclipse User |
|
|
|
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 09:07] by 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 11:48   |
Eclipse User |
|
|
|
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
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04663 seconds