2017-02-21 3 views
0

Я делаю простой переход из Toplink 10g в родной Eclipselink v2.6.4, следуя инструкциям here (в частности, задача 3 и 4). Все компилируется нормально, но когда я пытаюсь запустить приложение, я получаю ошибку ниже.Ошибка Eclipselink 3002

Я попытался использовать старый файл сопоставления (который по-прежнему совместим), а также новый, созданный на рабочем столе Eclipselink, импортируя мой старый проект Workbench Toplink.

Обратите внимание, что я выполняю миграцию только с Toplink на родной Eclispelink. Нет JPA.

Любые идеи о том, что не так? Похоже, он пытается ненадлежащим образом использовать String вместо моего фактического класса, но не уверен.

Кроме того, в моем приложении никогда не было файла persistence.xml. Нужно ли мне сейчас?

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

Проблема возникает из-за того, что ваши файлы сопоставления содержат ссылку «ca.ncams.wisor.refdata.AccessTandem», и для загрузки проекта необходимо преобразовать его в класс, но не может, так как у вас нет .ncams.wisor.refdata.AccessTandem файла в пути к классу проекта. – Chris

+0

Оба старых и новых файла сопоставления содержат полные имена пакетов. Он отлично работает с полными именами через Toplink, но не с EL. Файлы ca.ncams.wisor. * Являются классами в моем приложении, поэтому они определенно существуют. Однако мне интересно, отличается ли порядок загрузки классов. В старой системе все было в каталоге WEB-INF/lib, но теперь EclipseLink находится в контейнере. Будет ли это иметь значение? Есть ли способ изменить порядок? –

+0

Вы передаете в classloader, который имеет классы ca.ncams.wisor. * Для XMLProjectReader? Когда используется какой-либо загрузчик, он не может найти указанный класс ca.ncams.wisor.refdata.AccessTandem, приводящий к исключению. – Chris

ответ

0

Вот что я в конечном итоге делает:

  1. Добавить EclipseLink 2.6.4 зависимость к ПОМ (компилировать вместо поставки)
  2. Добавить в 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> 

Теперь Eclipse ссылка находит мои классы и загружается.

Обратите внимание, что мой код проходил только в файле сопоставления, а не загрузчик классов до XMLProjectReader.read();, поэтому я предполагаю, что использовал загрузчик классов по умолчанию.

Если кто-нибудь знает, как пройти в загрузчике классов, мне все же будет интересно узнать (откуда я его получаю?).

Смежные вопросы