I know there are several questions related to this, but none have been able
to solve my problem. As it stands, I believe that my persistence.xml is
simply not being registered or parsed by the container.

I'm running as a maven application, which is built and then manually
deployed to my Karaf (2.2.10) OSGi container.

The original web-service tutorial I followed can be found here:
http://www.liquid-reality.de/display/liquid/2011/12/22/Karaf+Tutorial+Part+4+-+CXF+Services+in+OSGi
The tutorial does not include anything persistence-related - only setting up
web services through CXF in Karaf. My problem is coming from trying to add
persistence support through eclipselink.

While it may be possible to upgrade to Gemini JPA, administrative powers
greater than I would like this to be done in eclipselink.

*Manifest.xml:*
Manifest-Version: 1.0
Bnd-LastModified: 1363204729441
Build-Jdk: 1.6.0_39
Bundle-ManifestVersion: 2
Bundle-Name: stuffservice-server
Bundle-SymbolicName: stuffservice-server
Bundle-Version: 1.1.0.SNAPSHOT
Created-By: Apache Maven Bundle Plugin
Import-Package: stuffservice.stuff;version="[1.1
 ,2)",com.google.gson;version="[2.2,3)",javax.persistence;version="[2.0,
 3)",javax.ws.rs;version="[1.1,2)",org.apache.cxf.endpoint,org.apache.cx
 f.jaxrs,org.apache.cxf.jaxrs.lifecycle,org.osgi.service.blueprint;versi
 on="[1.0.0,2.0.0)"
JPA-PersistenceUnits: testingtesting
Meta-Persistence: META-INF/persistence.xml
Tool: Bnd-1.50.0


I can verify that persistence.xml is being copied to the same directory as
the Manifest.MF (target/classes/META-INF/) upon maven install. I believe
that's what is supposed to happen, but feel free to correct me if I'm wrong!
*persistence.xml:*
<persistence xmlns="http://java.sun.com/xml/ns/persistence";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd";
    version="2.0">

    <persistence-unit name="testingtesting"
transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="eclipselink.ddl-generation"
value="drop-and-create-tables" />
            <property name="eclipselink.jdbc.driver"
value="org.postgresql.Driver" />
            <property name="eclipselink.jdbc.url"
value="jdbc:postgresql://localhost/testdb" />
            <property name="eclipselink.jdbc.user" value="----------" />
            <property name="eclipselink.jdbc.password" value="----------" />
        </properties>
    </persistence-unit>
</persistence>

*Directory Structure:*
    src
        main
            java
                stuffservice
                    impl
                        StuffServiceImpl.java
            resources
                META-INF
                    persistence.xml
                OSGI-INF
                    ...
                
*StuffServiceImpl.java:*
Within the constructor, I originally had no properties map, etc - just emf =
Persistence.createEntityManagerFactory("testingtesting", properties); I was
pointed in the properties direction from various other questions posted here
on SO, to no avail.  I'm assuming this may be unusable outside of an
Activator class?
    ...
    public class StuffServiceImpl implements StuffService {
        @PersistenceUnit
        EntityManagerFactory emf;
        Map<String, Stuff> stuffMap;

        public StuffServiceImpl() {
            Map<String,Object> properties = new HashMap<String, Object>();
            properties.put(PersistenceUnitProperties.CLASSLOADER,
this.getClass().getClassLoader());
            emf = Persistence.createEntityManagerFactory("testingtesting",
properties);
            stuffMap = new HashMap<String, Stuff>();
            Stuff stuff = createExampleStuff();
            stuffMap.put("1", stuff);
        }

*Error:*
    2013-03-13 14:52:56,699 | ERROR | rint Extender: 3 |
BlueprintContainerImpl           | 9 - org.apache.aries.blueprint - 0.3.2 |
Unable to start blueprint container for bundle stuffservice-server
    org.osgi.service.blueprint.container.ComponentDefinitionException: Error
when instanciating bean stuffServiceImpl of class class
stuffservice.impl.stuffServiceImpl
        at
org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:271)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:708)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:147)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:631)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:337)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:230)[9:org.apache.aries.blueprint:0.3.2]
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)[:1.6.0_39]
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_39]
        at
java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_39]
        at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)[:1.6.0_39]
        at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)[:1.6.0_39]
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)[:1.6.0_39]
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)[:1.6.0_39]
        at java.lang.Thread.run(Thread.java:662)[:1.6.0_39]
    Caused by: javax.persistence.PersistenceException: *No Persistence
provider for EntityManager named testingtesting*
        at
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
        at
stuffservice.impl.stuffServiceImpl.<init>(stuffServiceImpl.java:51)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)[:1.6.0_39]
        at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)[:1.6.0_39]
        at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)[:1.6.0_39]
        at
java.lang.reflect.Constructor.newInstance(Constructor.java:513)[:1.6.0_39]
        at
org.apache.aries.blueprint.utils.ReflectionUtils.newInstance(ReflectionUtils.java:257)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BeanRecipe.newInstance(BeanRecipe.java:842)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:269)[9:org.apache.aries.blueprint:0.3.2]
        ... 15 more
    
    
    
I've been trying to deal with this issue for a few days, now, with no luck. 
Something that just hit me earlier this morning - would setting up another,
eclipselink-specific osgi package and then accessing it from the web service
be a better solution?  Forgive me if this sounds like a novice OSGi
question, as I am a novice in OSGi :)



--
View this message in context: 
http://karaf.922171.n3.nabble.com/Karaf-OSGi-Web-Service-with-EclipseLink-No-Persistence-provider-tp4028199.html
Sent from the Karaf - User mailing list archive at Nabble.com.

Reply via email to