OSGi,JPA Eclipselink,Postgresql:原因:java.lang.ClassNotFoundException:org.eclipse.persistence.JPA.PersistenceProvider找不到
我创建了两个rcp包。第一个包实现JPA-service,第二个包实现JPA-client。 使用下一步技术: OSGi,JPA日食,RCP日食,RAP日食,日食分点 服务包: ServiceActivator:OSGi,JPA Eclipselink,Postgresql:原因:java.lang.ClassNotFoundException:org.eclipse.persistence.JPA.PersistenceProvider找不到,java,jpa,osgi,eclipselink,postgresql-9.1,Java,Jpa,Osgi,Eclipselink,Postgresql 9.1,我创建了两个rcp包。第一个包实现JPA-service,第二个包实现JPA-client。 使用下一步技术: OSGi,JPA日食,RCP日食,RAP日食,日食分点 服务包: ServiceActivator: public class HotelJPAImpl implements HotelJPA { @Override public boolean checkStatusRoom(Integer numbRoom) { EntityManager e
public class HotelJPAImpl implements HotelJPA {
@Override
public boolean checkStatusRoom(Integer numbRoom) {
EntityManager em = new JpaUtil().getEntityManagerFactory().createEntityManager();
boolean status;
try{
Long l = Long.valueOf(numbRoom.longValue());
Hotel hotel = (Hotel) em.find(Hotel.class, numbRoom);
status = hotel.getIsStatus();
}finally{
em.close();
}
return status;
}
}
public class ServiceActivator implements BundleActivator {
ServiceRegistration<HotelJPA> ServiceRegistration;
@Override
public void start(BundleContext context) throws Exception {
HotelJPA hotelJPA = new HotelJPAImpl();
ServiceRegistration = (ServiceRegistration<HotelJPA>) context
.registerService(HotelJPA.class.getName(), hotelJPA,
null);
}
@Override
public void stop(BundleContext context) throws Exception {
ServiceRegistration.unregister();
}
}
public class Activator implements BundleActivator {
ServiceReference<HotelJPA> serviceReference;
@Override
public void start(BundleContext context) throws Exception {
serviceReference = (ServiceReference<HotelJPA>)context.getServiceReference(HotelJPA.class.getName());
HotelJPA hotelJPA = (HotelJPA) context.getService(serviceReference);
System.out.println(hotelJPA.checkStatusRoom(1));
}
@Override
public void stop(BundleContext context) throws Exception {
context.ungetService(serviceReference);
}
}
原因:java.lang.ClassNotFoundException:org.eclipse.persistence.jpa.PersistenceProvider无法通过com.service_1.0.0找到。限定符
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 17 more
!ENTRY org.eclipse.osgi 4 0 2013-10-05 19:21:27.901
!MESSAGE Bundle com.client_1.0.0.qualifier [52] is not active.
请救命!谢谢。例外情况是捆绑包“服务”的类加载器没有看到EclipseLink的PersistenceProvider类
可能包org.eclipse.persistence.jpa没有导入到服务包(导入包)中。每次调用getEntityManagerFactory()函数时,都要重新初始化“emf”变量。您还可以使用@PersistenceUnit注释,尽管您可以通过编程方式初始化该变量。修复示例代码会很好,因为这样不清楚是否由于注释对类进行了任何运行时代码操作。谢谢。已经纠正了谢谢你的建议。但决定是将库放在类路径中。
public class Activator implements BundleActivator {
ServiceReference<HotelJPA> serviceReference;
@Override
public void start(BundleContext context) throws Exception {
serviceReference = (ServiceReference<HotelJPA>)context.getServiceReference(HotelJPA.class.getName());
HotelJPA hotelJPA = (HotelJPA) context.getService(serviceReference);
System.out.println(hotelJPA.checkStatusRoom(1));
}
@Override
public void stop(BundleContext context) throws Exception {
context.ungetService(serviceReference);
}
}
!SESSION 2013-10-05 19:21:27.348 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_25
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Command-line arguments: -dev file:C:/My_documents/Java/eclipse/workspace/.metadata/.plugins/org.eclipse.pde.core/RAP/dev.properties -os win32 -ws win32 -arch x86_64 -consoleLog -console -data C:\My_documents\Java\eclipse\workspace/.metadata/.plugins/org.eclipse.rap.tools.launch/RAP
!ENTRY com.client 4 0 2013-10-05 19:21:27.898
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Exception in hotel.client.Activator.start() of bundle com.client.
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
Caused by: java.lang.NoClassDefFoundError: org/eclipse/persistence/jpa/PersistenceProvider
at hotel.service.daoimpl.HotelJPAImpl.checkStatusRoom(HotelJPAImpl.java:70)
at hotel.client.Activator.start(Activator.java:21)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
... 12 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.persistence.jpa.PersistenceProvider cannot be found by com.service_1.0.0.qualifier
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 17 more
Root exception:
java.lang.NoClassDefFoundError: org/eclipse/persistence/jpa/PersistenceProvider
at hotel.service.daoimpl.HotelJPAImpl.checkStatusRoom(HotelJPAImpl.java:70)
at hotel.client.Activator.start(Activator.java:21)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 17 more
!ENTRY org.eclipse.osgi 4 0 2013-10-05 19:21:27.901
!MESSAGE Bundle com.client_1.0.0.qualifier [52] is not active.