karaf-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Soto <alex.s...@envieta.com>
Subject Re: OpenJPA with AriesJPA Java.peristence
Date Fri, 11 May 2018 18:58:52 GMT
What is strange is that (based on the logs) it seems as if the persistence unit is being discovered:


14:50:44.050 INFO [features-3-thread-1] Found persistence unit responderPersistenUnit in bundle
org.enquery.encryptedquery.responder-data-jpa-entity-manager with provider org.apache.openjpa.persistence.PersistenceProviderImpl.
14:50:44.052 INFO [features-3-thread-1] Found provider for responderPersistenUnit org.apache.openjpa.persistence.PersistenceProviderImpl
14:50:44.142 INFO [features-3-thread-1] Adding transformer org.apache.openjpa.persistence.PersistenceProviderImpl$ClassTransformerImpl


But the  javax.persistence.EntityManager service is not being registered, and there is no
errors.


> On May 11, 2018, at 2:19 PM, Alex Soto <alex.soto@envieta.com> wrote:
> 
> Ok, I made some progress (I guess) I am no longer getting the original error:  java.lang.ClassCastException:
org.apache.openjpa.persistence.PersistenceProviderImpl cannot be cast to javax.persistence.spi.PersistenceProvider
> 
> 
> I added my own version of the jpa feature, in which I substitute the line
> 
>         <bundle dependency="true">mvn:org.eclipse.persistence/javax.persistence/2.1.0</bundle>
> 
> 
> With:
>         <bundle dependency="true">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1</bundle>
> 
> Which results in:
> 
> 	<feature name="aries-jpa2”>
> 	     <capability>
>             osgi.service;effective:=active;objectClass=javax.persistence.spi.PersistenceProvider
>         </capability>
>         
> 		<bundle dependency="true">mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/1.1</bundle>
>         <bundle dependency="true">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1</bundle>
>         <bundle dependency="true">mvn:org.osgi/org.osgi.service.jdbc/1.0.0</bundle>
>         <bundle dependency="true" start-level="30">mvn:org.apache.felix/org.apache.felix.coordinator/1.0.2</bundle>
>         <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.api/${aries.jpa.version}</bundle>
>         <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.container/${aries.jpa.version}</bundle>
>         <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.support/${aries.jpa.version}</bundle>
>         <conditional>
>             <condition>aries-blueprint</condition>
>             <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.blueprint/${aries.jpa.version}</bundle>
>         </conditional>
> 	</feature>
> 
> 
> 
> Now, in my own feature, I have:
> 
> 	<feature>aries-blueprint</feature>
>  	<feature>jndi</feature>
> 	<feature>jdbc</feature>
> 	<feature>transaction</feature>
> 	<feature>aries-jpa2</feature>
> 	<feature>openjpa</feature>
> 	<feature>pax-jdbc-mariadb</feature>
>         <feature>pax-jdbc-config</feature>
> 
> Among others.  Now my bundle fails to start:
> 
> Status: GracePeriod
> Declarative Services
> Blueprint
> 5/11/18 2:14 PM
> Missing dependencies: 
> (&(osgi.unit.name=responderPersistenUnit)(objectClass=javax.persistence.EntityManager))

> 
> There are no errors in the log, just this unresolved dependency.
> Any idea about why my persistent unit is not being registered?
> 
> Best regards,
> Alex soto
> 
> 
> 
> 
>> On May 11, 2018, at 11:09 AM, Tim Ward <tim.ward@paremus.com <mailto:tim.ward@paremus.com>>
wrote:
>> 
>> 
>> 
>>> On 11 May 2018, at 15:53, Alex Soto <alex.soto@envieta.com <mailto:alex.soto@envieta.com>>
wrote:
>>> 
>>> Thanks for the help Tim.
>>> 
>>>> On May 11, 2018, at 10:24 AM, Tim Ward <tim.ward@paremus.com <mailto:tim.ward@paremus.com>>
wrote:
>>>> 
>>>> Aries JPA can work with either JPA 2.0, or JPA 2.1, and is tested with EclipseLink,
Hibernate and OpenJPA. 
>>> 
>>> I am looking at these integration tests, but the test itself does not uses the
feature, as defined in the feature.xml file.  It loads a different version of javax.persistence
for the OpenJPA integration test. So unless you are an AriesJPA developer, you would not know
about this.  How would anybody figure this out? 
>>> 
>>> @Configuration
>>>     public Option[] configuration() {
>>>         return new Option[] {
>>>             baseOptions(), //
>>>             ariesJpa20(), //
>>>             jta11Bundles(), // Openjpa currently does not work with jta 1.2.
See https://issues.apache.org/jira/browse/OPENJPA-2607 <https://issues.apache.org/jira/browse/OPENJPA-2607>
>>>             openJpa(), //
>>>             derbyDSF(), //
>>>             testBundle()
>>>         };
>>> 
>>> Then the example does not use OpenJPA, but Hibernate, so there is no information
on how to make it work with OpenJPA out of the box.  
>>> One option here would be to have multiple specific features: jpa-hibernate, jpa-openjpa,
etc.
>> 
>> Yes, that’s pretty much what is needed, but Karaf would be the place to create
and maintain those features.
>> 
>>> 
>>>> 
>>>> It is highly recommended that you use the JavaJPA contract in any of your
bundles using JPA so that you are isolated from the API version number changes in the future
(most Java EE specifications make major version bumps quite regularly).
>>>> 
>>> 
>>> I have this in my bundle’s osgi.bnd file:
>>> 
>>> 	-contract: JavaJPA
>>> 
>>> Is that all that is needed?  It does not indicate version.
>> 
>> That is most of what is needed - you also need to be compiling against a library
which offers the contract (for example the spec bundles provided by Aries). If you do that
you will end up with Import-Package statements for javax.persistence (et al) with no version,
but also a Require-Capability: osgi.contract;filter:=(&(osgi.contract=JavaJPA)(version=XXX))
where the XXX is determined from the Provide-Capability of the bundle you compiled against.
>> 
>>> 
>>>> The real problem is that the AriesJPA feature shouldn’t exist as a standalone
thing (it doesn’t make sense to deploy it on its own). It should come for free when you
install the OpenJPA (or Hibernate, or EclipseLink) feature, using whichever API they have
deployed.
>>> 
>>> Exactly, this is harder than it should be.  When I install a feature, I expect
the feature to bring in all that is needed, not having to chase down all these dependencies.
>>> Is there an intention to take this approach any time soon?
>> 
>> I’m afraid that would be a decision for the Karaf maintainers rather than me. I’m
only chipping in because I’m an Aries PMC member who deals quite a bit with the JPA and
Tx Control components.
>> 
>> Best Regards,
>> 
>> Tim Ward
>> 
>>> 
>>> 
>>> 
>>> 
>>>> 
>>>> Tim
>>>> 
>>>> 
>>>>> On 11 May 2018, at 14:23, Alex Soto <alex.soto@envieta.com <mailto:alex.soto@envieta.com>>
wrote:
>>>>> 
>>>>> I had accidentally replied directly to Tim.  Repeating here:
>>>>> 
>>>>> Let me see if I understand this correctly:
>>>>> 
>>>>> Karaf version 4.2.0 enterprise repository depends on version 2.6.1 of
AriesJPA.
>>>>> AriesJPA version 2.6.1 depends on  javax.persistence version 2.1.0.
>>>>> Karaf’s enterprise repository defines a openjpa feature that depends
on OpenJPA version 2.4.2.
>>>>> OpenJPA version 2.4.2 depends on javax.persistence version 2.0.0.
>>>>>  
>>>>> Is this correct?
>>>>> Is there is a bug in the Enterprise repository mixing incompatible versions
of OpenJPA and AriesJPA?
>>>>> Is the problem in OpenJPA not declaring the version it depends on?
>>>>> 
>>>>> Inspecting in Karaf’s console:
>>>>> 
>>>>> karaf@root()> list
>>>>> 
>>>>>  97 │ Active  │  80 │ 2.4.2               │ OpenJPA Aggregate
Ja
>>>>> 
>>>>> karaf@root()> bundle:requirements 97
>>>>> 
>>>>> osgi.wiring.package; (&(osgi.wiring.package=javax.persistence)(version>=1.1.0)(!(version>=2.1.0)))
resolved by:
>>>>>    osgi.wiring.package; javax.persistence 2.0.0 from org.apache.geronimo.specs.geronimo-jpa_2.0_spec
[66]
>>>>> 
>>>>> 
>>>>> karaf@root()> feature:info jpa
>>>>> Feature jpa 2.6.1
>>>>> Description:
>>>>>   OSGi Persistence Container
>>>>> Details:
>>>>>   JPA implementation provided by Apache Aries JPA 2.x. NB: this feature
doesn't provide the JPA engine, you have to install one by yourself (OpenJPA for instance)
>>>>> Feature has no configuration
>>>>> Feature has no configuration files
>>>>> Feature has no dependencies.
>>>>> Feature contains followed bundles:
>>>>>   mvn:org.eclipse.persistence/javax.persistence/2.1.0
>>>>>   mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1
>>>>>   mvn:org.osgi/org.osgi.service.jdbc/1.0.0
>>>>>   mvn:org.apache.felix/org.apache.felix.coordinator/1.0.2 start-level=30
>>>>>   mvn:org.apache.aries.jpa/org.apache.aries.jpa.api/2.6.1 start-level=30
>>>>>   mvn:org.apache.aries.jpa/org.apache.aries.jpa.container/2.6.1 start-level=30
>>>>>   mvn:org.apache.aries.jpa/org.apache.aries.jpa.support/2.6.1 start-level=30
>>>>> 
>>>>> Best regards,
>>>>> Alex soto
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>>> On May 10, 2018, at 5:45 PM, Tim Ward <tim.ward@paremus.com <mailto:tim.ward@paremus.com>>
wrote:
>>>>>> 
>>>>>> OpenJPA 2.4.x supports JPA 2.0 (not 2.1) you can get the API you
need from Apache Aries, as well as the JPA container. This is also all used and tested with
Aries Transaction Control, so you can look at the bundles used there.
>>>>>> 
>>>>>> Best Regards,
>>>>>> 
>>>>>> Tim
>>>>>> 
>>>>>> Sent from my iPhone
>>>>>> 
>>>>>>> On 10 May 2018, at 20:43, Jean-Baptiste Onofré <jb@nanthrax.net
<mailto:jb@nanthrax.net>> wrote:
>>>>>>> 
>>>>>>> Anyway, let me check if OpenJPA 2.4.2 supports JPA 2.1 (it's
what I thought).
>>>>>>> 
>>>>>>> Regards
>>>>>>> JB
>>>>>>> 
>>>>>>>> On 05/10/2018 09:36 PM, Alex Soto wrote:
>>>>>>>> I am sorry I only see one version:
>>>>>>>> 
>>>>>>>> karaf@root()> feature:list | grep jpa
>>>>>>>> openjpa                                  │ 2.4.2      
     │          │
>>>>>>>> Started     │ enterprise-4.2.0                  │ Apache
OpenJPA 2.4.x
>>>>>>>> persistence engine support
>>>>>>>> camel-jpa                                │ 2.21.1     
     │       
>>>>>>>>  │ Uninstalled │ camel-2.21.1                      │
>>>>>>>> deltaspike-jpa                           │ 1.4.2      
     │       
>>>>>>>>  │ Uninstalled │ org.ops4j.pax.cdi-1.0.0.RC2       │
Apache Deltaspike jpa support
>>>>>>>> deltaspike-jpa                           │ 1.8.1      
     │       
>>>>>>>>  │ Uninstalled │ org.ops4j.pax.cdi-1.0.0           │
Apache Deltaspike jpa support
>>>>>>>> jpa                                      │ 2.6.1      
     │          │
>>>>>>>> Started     │ aries-jpa-2.6.1                   │ OSGi
Persistence Container
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Is there a repository I need to add?  
>>>>>>>> 
>>>>>>>> Best regards,
>>>>>>>> Alex soto
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On May 10, 2018, at 3:25 PM, Jean-Baptiste Onofré <jb@nanthrax.net
<mailto:jb@nanthrax.net>
>>>>>>>>> <mailto:jb@nanthrax.net <mailto:jb@nanthrax.net>>>
wrote:
>>>>>>>>> 
>>>>>>>>> Karaf provides both jpa 1.x and  2.x feature.
>>>>>>>>> 
>>>>>>>>> You just have to  install the right one depending of
the engine you are using:
>>>>>>>>> 
>>>>>>>>> feature:install jpa/1.x
>>>>>>>>> feature:install  openjpa
>>>>>>>>> 
>>>>>>>>> Regards
>>>>>>>>> JB
>>>>>>>>> 
>>>>>>>>>> On 05/10/2018 09:23 PM, Alex Soto wrote:
>>>>>>>>>> Thanks JB,
>>>>>>>>>> 
>>>>>>>>>> I was hoping to use whatever was defined in the Karaf’s
enterprise feature,
>>>>>>>>>> but if that doesn’t work ,then which version do
I need?  I am afraid if I
>>>>>>>>>> deviate from the versions selected by Kara’s Enterprise
feature I will get
>>>>>>>>>> into more version mismatch problems.   Also what
do I put in my POM for
>>>>>>>>>> javax.persistence dependency?
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Best regards,
>>>>>>>>>> Alex soto
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> On May 10, 2018, at 3:16 PM, Jean-Baptiste Onofré
<jb@nanthrax.net <mailto:jb@nanthrax.net>
>>>>>>>>>>> <mailto:jb@nanthrax.net <mailto:jb@nanthrax.net>>>
wrote:
>>>>>>>>>>> 
>>>>>>>>>>> Hi,
>>>>>>>>>>> 
>>>>>>>>>>> OpenJPA 2.x still uses JPA 1.x. By default, jpa
feature will provide 2.x
>>>>>>>>>>> version.
>>>>>>>>>>> 
>>>>>>>>>>> You should specify the jpa feature version.
>>>>>>>>>>> 
>>>>>>>>>>> Regards
>>>>>>>>>>> JB
>>>>>>>>>>> 
>>>>>>>>>>>> On 05/10/2018 09:08 PM, Alex Soto wrote:
>>>>>>>>>>>> Hello,
>>>>>>>>>>>> 
>>>>>>>>>>>> I am running Karaf 4.2.0, trying to setup
a project with OpenJPA.  I am getting
>>>>>>>>>>>> error:
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 14:44:07.799 ERROR [FelixDispatchQueue] FrameworkEvent
ERROR
>>>>>>>>>>>> - org.apache.aries.jpa.container
>>>>>>>>>>>> java.lang.ClassCastException:
>>>>>>>>>>>> org.apache.openjpa.persistence.PersistenceProviderImpl
>>>>>>>>>>>> cannot be cast to javax.persistence.spi.PersistenceProvider
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:84)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
~[?:?]
>>>>>>>>>>>> at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:103)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:87)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:66)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:39)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579)
~[?:?]
>>>>>>>>>>>> at org.apache.felix.framework.Felix.startBundle(Felix.java:2174)
~[?:?]
>>>>>>>>>>>> at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1373)
~[?:?]
>>>>>>>>>>>> at
>>>>>>>>>>>> org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
>>>>>>>>>>>> ~[?:?]
>>>>>>>>>>>> at java.lang.Thread.run(Thread.java:748)
[?:?]
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> This looks like version mismatch.  I am loading
the following packages in my
>>>>>>>>>>>> feature:
>>>>>>>>>>>> 
>>>>>>>>>>>> <feature>aries-blueprint</feature>
>>>>>>>>>>>> <feature>war</feature>
>>>>>>>>>>>> <feature>camel-core</feature>
>>>>>>>>>>>> <feature>camel-servlet</feature>
>>>>>>>>>>>> <feature>camel-blueprint</feature>
>>>>>>>>>>>> <feature>camel-jackson</feature>
>>>>>>>>>>>> <feature>jndi</feature>
>>>>>>>>>>>> <feature>jdbc</feature>
>>>>>>>>>>>> <feature>transaction</feature>
>>>>>>>>>>>> <feature>jpa</feature>
>>>>>>>>>>>> <feature>openjpa</feature>
>>>>>>>>>>>> <feature>pax-jdbc-mariadb</feature>
>>>>>>>>>>>>       <feature>pax-jdbc-config</feature>
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> One thing I don’t know if is correct is
the javax.persistence dependency in
>>>>>>>>>>>> my POM:
>>>>>>>>>>>> 
>>>>>>>>>>>> <dependency>
>>>>>>>>>>>>           <groupId>org.eclipse.persistence</groupId>
>>>>>>>>>>>>           <artifactId>javax.persistence</artifactId>
>>>>>>>>>>>>           <version>2.0.5</version>
>>>>>>>>>>>>           <scope>provided</scope>
>>>>>>>>>>>>       </dependency>
>>>>>>>>>>>> 
>>>>>>>>>>>> Any hints?
>>>>>>>>>>>> 
>>>>>>>>>>>> Best regards,
>>>>>>>>>>>> Alex soto
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> -- 
>>>>>>>>>>> Jean-Baptiste Onofré
>>>>>>>>>>> jbonofre@apache.org <mailto:jbonofre@apache.org>
<mailto:jbonofre@apache.org <mailto:jbonofre@apache.org>>
>>>>>>>>>>> http://blog.nanthrax.net <http://blog.nanthrax.net/>
>>>>>>>>>>> Talend - http://www.talend.com <http://www.talend.com/>
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> -- 
>>>>>>>>> Jean-Baptiste Onofré
>>>>>>>>> jbonofre@apache.org <mailto:jbonofre@apache.org>
<mailto:jbonofre@apache.org <mailto:jbonofre@apache.org>>
>>>>>>>>> http://blog.nanthrax.net <http://blog.nanthrax.net/>
>>>>>>>>> Talend - http://www.talend.com <http://www.talend.com/>
>>>>>>>> 
>>>>>>> 
>>>>>>> -- 
>>>>>>> Jean-Baptiste Onofré
>>>>>>> jbonofre@apache.org <mailto:jbonofre@apache.org>
>>>>>>> http://blog.nanthrax.net <http://blog.nanthrax.net/>
>>>>>>> Talend - http://www.talend.com <http://www.talend.com/>


Mime
View raw message