OSGi,JPA Eclipselink,Postgresql:原因:java.lang.ClassNotFoundException:org.eclipse.persistence.JPA.PersistenceProvider找不到

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

我创建了两个rcp包。第一个包实现JPA-service,第二个包实现JPA-client。 使用下一步技术:

OSGi,JPA日食,RCP日食,RAP日食,日食分点

服务包: ServiceActivator:

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.