Hi Dan,

I suspect you're using Karaf 3.0, cause there is an issue with the OpenJPA
feature (unfortunately).
I suggest you define the OpenJPA feature yourself based on the fix we have
in Karaf 3.0.1-SNAPSHOT [1]. Or use the latest 3.0.1-SNAPSHOT as basis, it
already got some nice fixes for certain issues.

regards, Achim

[1] -
https://github.com/apache/karaf/blob/master/assemblies/features/enterprise/src/main/feature/feature.xml#L50


2014/1/27 Daniel McGreal <[email protected]>

> Hi again,
>
> I started using Karaf features for the Spring dependencies and OpenJPA.
>
> I now have an OpenJPA error:
> Exception in thread "SpringOsgiExtenderThread-2"
> org.springframework.beans.factory.BeanCreationException: Error creating
> bean with name 'itemRepository': Injection of persistence dependencies
> failed; nested exception is <openjpa-2.3.0-r422266:1540826 nonfatal general
> error> org.apache.openjpa.util.GeneralException: Resource does not exist:
> bundle://143.10:1
> at
> org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:343)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
> at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:589)
> at
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
> at
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:69)
> at
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355)
> at
> org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
> at
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320)
> at
> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132)
> at java.lang.Thread.run(Thread.java:722)
> Caused by: <openjpa-2.3.0-r422266:1540826 nonfatal general error>
> org.apache.openjpa.util.GeneralException: Resource does not exist:
> bundle://143.10:1
> at
> org.apache.openjpa.meta.AbstractCFMetaDataFactory.getPersistentTypeNames(AbstractCFMetaDataFactory.java:635)
> at
> org.apache.openjpa.meta.MetaDataRepository.getPersistentTypeNamesInternal(MetaDataRepository.java:1478)
> at
> org.apache.openjpa.meta.MetaDataRepository.getPersistentTypeNames(MetaDataRepository.java:1470)
> at
> org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypesInternal(MetaDataRepository.java:1522)
> at
> org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1513)
> at
> org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1493)
> at
> org.apache.openjpa.persistence.meta.MetamodelImpl.<init>(MetamodelImpl.java:84)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.getMetamodel(EntityManagerFactoryImpl.java:345)
> at
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.getMetamodel(EntityManagerFactoryImpl.java:59)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:601)
> at
> org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:376)
> at
> org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:517)
> at $Proxy33.getMetamodel(Unknown Source)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:601)
> at
> org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:176)
> at $Proxy34.getMetamodel(Unknown Source)
> at
> org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.setEntityManager(JpaRepositoryFactoryBean.java:50)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:601)
> at
> org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:164)
> at
> org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:92)
> at
> org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:340)
> ... 15 more
> Caused by: java.io.IOException: Resource does not exist: bundle://143.10:1
> at
> org.apache.felix.framework.URLHandlersBundleURLConnection.<init>(URLHandlersBundleURLConnection.java:60)
> at
> org.apache.felix.framework.URLHandlersBundleStreamHandler.openConnection(URLHandlersBundleStreamHandler.java:64)
> at java.net.URL.openConnection(URL.java:969)
> at java.net.URL.openStream(URL.java:1035)
> at
> org.apache.openjpa.lib.util.J2DoPrivHelper$43.run(J2DoPrivHelper.java:946)
> at
> org.apache.openjpa.lib.util.J2DoPrivHelper$43.run(J2DoPrivHelper.java:944)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> org.apache.openjpa.meta.AbstractCFMetaDataFactory.parsePersistentTypeNames(AbstractCFMetaDataFactory.java:769)
> at
> org.apache.openjpa.meta.AbstractCFMetaDataFactory.getPersistentTypeNames(AbstractCFMetaDataFactory.java:623)
> ... 44 more
>
> I don’t understand it, but it sounds like this is the part where OpenJPA
> is loading entity definitions?
>
> I’m surprised as Spring-Data should have handled this with some class-path
> scanning:
>
> @Bean
>     public LocalContainerEntityManagerFactoryBean
> entityManagerFactory(DataSource dataSource) throws ClassNotFoundException
> {
>         LocalContainerEntityManagerFactoryBean entityManagerFactory = 
> newLocalContainerEntityManagerFactoryBean();
>
>         entityManagerFactory.setDataSource(dataSource);
>         entityManagerFactory.setPackagesToScan(
> "persistence.repository.jpa.entity");
>
> entityManagerFactory.setPersistenceProviderClass(PersistenceProviderImpl.
> class);
>         entityManagerFactory.setPersistenceUnitName("redbox");
>
>
>         {
>         OpenJpaVendorAdapter vendorAdaptor = new OpenJpaVendorAdapter();
>         vendorAdaptor.setDatabase(Database.POSTGRESQL);
>         vendorAdaptor.setGenerateDdl(true);
>
>
>         entityManagerFactory.setJpaVendorAdapter(vendorAdaptor);
>         }
>
>         return entityManagerFactory;
>     }
>
>
> I suspect this might be more of a Spring or OpenJPA question, but I thank
> you for any assistance you could offer.
>
> Best, Dan.
>
>
> On 27 Jan 2014, at 18:11, Achim Nierbeck <[email protected]> wrote:
>
> Hi,
>
> I strongly suggest using Features, in favor of copying your dependencies
> to the deploy directory.
> Second, if you install the desired spring feature before the spring-dm
> one, you won't run into your
> scenario where you end up with the wrong spring-version.
>
> I don't think it's really necessary to switch to OpenJPA (though it might
> help ;))
>
> If you need more help just cry-out :)
>
> Regards, Achim
>
>
> 2014/1/27 Daniel McGreal <[email protected]>
>
>> Hi,
>>
>> I’m investigating moving from Virgo to Karaf. My application uses Spring
>> Data, initially with JPA using EclipseLink.
>>
>> My strategy so far has resulted in:
>> Caused by: java.lang.IllegalArgumentException: class
>> org.eclipse.persistence.jpa.osgi.PersistenceProvider is not assignable to
>> interface javax.persistence.spi.PersistenceProvider
>>  at org.springframework.util.Assert.isAssignable(Assert.java:368)
>> at org.springframework.util.Assert.isAssignable(Assert.java:351)
>>  at
>> org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.setPersistenceProviderClass(AbstractEntityManagerFactoryBean.java:128)
>> at
>> com.redbite.redbox.persistence.repository.jpa.configuration.JpaPersistenceConfiguration.entityManagerFactory(JpaPersistenceConfiguration.java:42)
>>  at
>> com.redbite.redbox.persistence.repository.jpa.configuration.JpaPersistenceConfiguration$$EnhancerByCGLIB$$3c404459.CGLIB$entityManagerFactory$1(<generated>)
>>  at
>> com.redbite.redbox.persistence.repository.jpa.configuration.JpaPersistenceConfiguration$$EnhancerByCGLIB$$3c404459$$FastClassByCGLIB$$b6dd4002.invoke(<generated>)
>>  at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:215)
>> at
>> org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:285)
>>  at
>> com.redbite.redbox.persistence.repository.jpa.configuration.JpaPersistenceConfiguration$$EnhancerByCGLIB$$3c404459.entityManagerFactory(<generated>)
>>  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>  at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:601)
>>  at
>> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:160)
>> ... 17 more
>>
>> It looks like the class of the spi interface is not the same class that
>> the EclipseLink class has extended, possibly due to multiple versions of
>> bundles?
>>
>> I wonder if my strategy can be improved:
>>
>>
>>    1. I use Maven copy-dependencies to populate Karaf's deploy
>>    directory, this includes Spring 3.1.4.RELEASE bundles (I haven’t installed
>>    them using features) and EclipseLink, Spring Data (& JPA) and their
>>    dependencies, e.g. CGLib & AopAlliance bundles.
>>    2. I install spring-dm manually (if I installed it using Karaf’s
>>    features it starts loading things from a Spring 3.*2*.4.RELEASE
>>    context somehow), e.g. installing each featured bundle and setting its
>>    start-level to 30 manually.
>>    3. I deploy my spring bundle which configures a DataSource
>>    and LocalContainerEntityManagerFactoryBean as beans using JavaConfig.
>>
>>
>> I don’t think I’m doing this the “Karaf Way” and wonder how it can be
>> improved? I’m not tied to EclipseLink, and could happily use e.g. OpenJPA.
>>
>> Thanks for any help you can offer,
>> Dan.
>>
>
>
>
> --
>
> Apache Karaf <http://karaf.apache.org/> Committer & PMC
> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer &
> Project Lead
> OPS4J Pax for Vaadin <http://team.ops4j.org/wiki/display/PAXVAADIN/Home>
> Commiter & Project Lead
> blog <http://notizblog.nierbeck.de/>
>
>
>


-- 

Apache Karaf <http://karaf.apache.org/> Committer & PMC
OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer &
Project Lead
OPS4J Pax for Vaadin <http://team.ops4j.org/wiki/display/PAXVAADIN/Home>
Commiter & Project Lead
blog <http://notizblog.nierbeck.de/>

Reply via email to