2017-02-21 5 views
0

Je fais une migration simple de Toplink 10g à natif Eclipselink v2.6.4 en suivant les instructions here (en particulier les tâches 3 et 4). Tout compile bien mais quand j'essaye d'exécuter mon application j'obtiens l'erreur ci-dessous.erreur Eclipselink 3002

J'ai essayé d'utiliser l'ancien fichier de mappage (qui est toujours compatible) ainsi qu'un nouveau fichier généré à partir de Eclipselink workbench en important mon ancien projet de plan de travail Toplink.

Notez que je ne fais qu'une migration de Toplink vers Eclispelink natif. Il n'y a pas d'APP en cause.

Des idées sur ce qui ne va pas? Il semble que j'essaie d'utiliser incorrectement String au lieu de ma classe actuelle, mais je ne suis pas sûr.

De plus, mon application n'a jamais eu de fichier persistence.xml. Ai-je besoin d'un maintenant?

2017-02-20 14:55:52 ERROR - Presentation - Local Exception Stack: 
Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.ConversionException 
Exception Description: The object [ca.ncams.wisor.refdata.AccessTandem], of class [class java.lang.String], from mapping [org.eclipse.persistence.oxm.mappings.XMLDirectMapping[javaClass-->class/text()]] with descriptor [XMLDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor --> [DatabaseTable(class-mapping-descriptor)])], could not be converted to [class java.lang.Class]. 
Internal Exception: java.lang.ClassNotFoundException: ca.ncams.wisor.refdata.AccessTandem 
       at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConvertedToClass(ConversionException.java:98) 
       at org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToClass(ConversionManager.java:451) 
       at org.eclipse.persistence.internal.helper.ConversionManager.convertObject(ConversionManager.java:146) 
       at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertObject(XMLConversionManager.java:197) 
       at org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform.convertObject(DatasourcePlatform.java:179) 
       at org.eclipse.persistence.oxm.mappings.XMLDirectMapping.getAttributeValue(XMLDirectMapping.java:301) 
       at org.eclipse.persistence.oxm.mappings.XMLDirectMapping.valueFromRow(XMLDirectMapping.java:364) 
       at org.eclipse.persistence.mappings.DatabaseMapping.readFromRowIntoObject(DatabaseMapping.java:1539) 
       at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:462) 
       at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildAttributesIntoObject(XMLObjectBuilder.java:378) 
       at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildObject(XMLObjectBuilder.java:291) 
       at org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping.buildCompositeObject(XMLCompositeCollectionMapping.java:380) 
       at org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping.buildObjectFromNestedRow(XMLCompositeCollectionMapping.java:587) 
       at org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping.valueFromRow(XMLCompositeCollectionMapping.java:511) 
       at org.eclipse.persistence.mappings.DatabaseMapping.readFromRowIntoObject(DatabaseMapping.java:1539) 
       at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:462) 
       at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildAttributesIntoObject(XMLObjectBuilder.java:378) 
       at org.eclipse.persistence.internal.oxm.XMLObjectBuilder.buildObject(XMLObjectBuilder.java:291) 
       at org.eclipse.persistence.internal.oxm.record.DOMUnmarshaller.xmlToObject(DOMUnmarshaller.java:469) 
       at org.eclipse.persistence.internal.oxm.record.DOMUnmarshaller.unmarshal(DOMUnmarshaller.java:267) 
       at org.eclipse.persistence.internal.oxm.record.DOMUnmarshaller.unmarshal(DOMUnmarshaller.java:246) 
       at org.eclipse.persistence.internal.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:530) 
       at org.eclipse.persistence.sessions.factories.XMLProjectReader.readObjectPersistenceRuntimeFormat(XMLProjectReader.java:293) 
       at org.eclipse.persistence.sessions.factories.XMLProjectReader.read(XMLProjectReader.java:186) 
       at org.eclipse.persistence.sessions.factories.XMLProjectReader.read(XMLProjectReader.java:242) 
       at org.eclipse.persistence.sessions.factories.XMLProjectReader.read(XMLProjectReader.java:100) 
       at ca.ncams.wisor.persistence.toplink.PersistenceManager.initializeTopLink(PersistenceManager.java:491) 
       at ca.ncams.wisor.persistence.toplink.PersistenceManager.<init>(PersistenceManager.java:83) 
       at ca.ncams.wisor.persistence.toplink.PersistenceManager.getInstance(PersistenceManager.java:96) 
       at ca.ncams.wisor.persistence.toplink.AutoRollbackFilter.doFilter(AutoRollbackFilter.java:57) 
       at ca.ncams.wisor.filter.FilterChainImpl.doFilter(FilterChainImpl.java:124) 
       at ca.ncams.wisor.presentation.filters.CatchAllFilter.doFilter(CatchAllFilter.java:60) 
       at ca.ncams.wisor.filter.FilterChainImpl.doFilter(FilterChainImpl.java:124) 
       at ca.ncams.wisor.presentation.filters.NoCacheFilter.doFilter(NoCacheFilter.java:47) 
       at ca.ncams.wisor.filter.FilterChainImpl.doFilter(FilterChainImpl.java:124) 
       at ca.ncams.wisor.filter.FilterJspBase.service(FilterJspBase.java:111) 
       at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286) 
       at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260) 
       at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137) 
       at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350) 
       at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:489) 
       at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:376) 
       at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:247) 
       at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3679) 
       at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.__run(WebAppServletContext.java:3649) 
       at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java) 
       at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326) 
       at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197) 
       at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203) 
       at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71) 
       at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2433) 
       at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2281) 
       at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2259) 
       at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1691) 
       at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1651) 
       at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270) 
       at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348) 
       at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333) 
       at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54) 
       at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) 
       at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640) 
       at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406) 
       at weblogic.work.ExecuteThread.run(ExecuteThread.java:346) 
Caused by: java.lang.ClassNotFoundException: ca.ncams.wisor.refdata.AccessTandem 
       at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
       at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
       at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
       at java.lang.Class.forName0(Native Method) 
       at java.lang.Class.forName(Class.java:348) 
       at org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToClass(ConversionManager.java:448) 
       ... 61 more 
+1

Le problème est dû au fait que vos fichiers de mappage contiennent la référence "ca.ncams.wisor.refdata.AccessTandem". Pour charger le projet, vous devez le convertir en classe, mais vous ne pouvez pas le faire car vous ne disposez pas du Fichier .ncams.wisor.refdata.AccessTandem sur le chemin de classe du projet. – Chris

+0

Les anciens et nouveaux fichiers de mappage contiennent tous les noms de package. Cela fonctionne bien avec les noms complets via Toplink mais pas EL. Les fichiers ca.ncams.wisor. * Sont les classes de mon application, donc ils sont définitivement là. Cependant je me demande si l'ordre dans lequel les classes sont chargées est différent maintenant. Dans l'ancien système, tout se trouvait dans le répertoire WEB-INF/lib, mais maintenant EclipseLink se trouve dans le conteneur. Cela ferait-il une différence? Y a-t-il un moyen de changer la commande? –

+0

Passez-vous dans le chargeur de classe qui a vos classes ca.ncams.wisor. * Dans XMLProjectReader? Quel que soit le chargeur utilisé, il est impossible de trouver la classe ca.ncams.wisor.refdata.AccessTandem spécifiée résultant de l'exception. – Chris

Répondre

0

Voici ce que je fini par faire:

  1. Ajouter EclipseLink 2.6.4 dépendance à pom (compilez au lieu de condition)
  2. Ajouter à weblogic.xml:
<wls:container-descriptor> 
    <wls:prefer-application-packages> 
     <wls:package-name>org.eclipse.persistence</wls:package-name> 
    </wls:prefer-application-packages> 
</wls:container-descriptor> 

Maintenant Eclipse lien trouve mes classes et démarre.

Notez que mon code transmettait uniquement dans le fichier de mappage et non un chargeur de classe à XMLProjectReader.read(); donc j'imagine que j'utilisais le chargeur de classe par défaut.

Si quelqu'un sait comment passer dans un classloader, je serais toujours curieux de savoir (d'où puis-je l'obtenir?).