You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@karaf.apache.org by ingulp <in...@gmail.com> on 2013/03/14 18:33:56 UTC

Karaf OSGi Web Service with EclipseLink: “No Persistence provider”

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.

Re: Karaf OSGi Web Service with EclipseLink: “No Persistence provider”

Posted by lb <lb...@gmail.com>.
First you have to install some Karaf's enterprise features (
http://aries.apache.org):

features:install transaction
features:install jndi
features:install jpa

Then you need to deploy a JPA implementation such as EclipseLink or OpenJPA.

There are some differences among the JPA implementations and for EcliseLink
you have to manually register an OSGi service to let the framework aware of
the EcliseLink's PeristenceProvider implementation, you can find a very
simple example here:
https://github.com/lburgazzoli/lb-karaf-examples/tree/master/jpa-eclipselink-adapter

Once done you are ready to implement your JPA bundle (very simple example
here
https://github.com/lburgazzoli/lb-karaf-examples/tree/master/jpa-eclipselink
)



On Thu, Mar 14, 2013 at 9:48 PM, ingulp <in...@gmail.com> wrote:

> Could you elaborate?  Sorry, I'm still fairly new to the frameworks I'm
> using.
>
> Thanks,
> Peter
>
>
>
> --
> View this message in context:
> http://karaf.922171.n3.nabble.com/Karaf-OSGi-Web-Service-with-EclipseLink-No-Persistence-provider-tp4028199p4028205.html
> Sent from the Karaf - User mailing list archive at Nabble.com.
>

Re: Karaf OSGi Web Service with EclipseLink: “No Persistence provider”

Posted by Freeman Fang <fr...@gmail.com>.
Hi,

Did you already install jpa feature and eclipse link bundle?

-------------
Freeman(Yue) Fang

Red Hat, Inc. 
FuseSource is now part of Red Hat
Web: http://fusesource.com | http://www.redhat.com/
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: @Freeman小屋

On 2013-3-15, at 上午4:48, ingulp wrote:

> Could you elaborate?  Sorry, I'm still fairly new to the frameworks I'm
> using.
> 
> Thanks,
> Peter
> 
> 
> 
> --
> View this message in context: http://karaf.922171.n3.nabble.com/Karaf-OSGi-Web-Service-with-EclipseLink-No-Persistence-provider-tp4028199p4028205.html
> Sent from the Karaf - User mailing list archive at Nabble.com.


Re: Karaf OSGi Web Service with EclipseLink: “No Persistence provider”

Posted by ingulp <in...@gmail.com>.
Could you elaborate?  Sorry, I'm still fairly new to the frameworks I'm
using.

Thanks,
Peter



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

Re: Karaf OSGi Web Service with EclipseLink: “No Persistence provider”

Posted by lb <lb...@gmail.com>.
 Did you export the EclipseLink persistence provider?

https://github.com/lburgazzoli/lb-karaf-examples


On Thursday, March 14, 2013, ingulp wrote:

> 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.
>