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 = new 
LocalContainerEntityManagerFactoryBean();

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

Reply via email to