Ich arbeite gerade an einer OSGi-Anwendung unter Apache Karaf, die JPA und QueryDSL verwendet.Ist es möglich, OSGi mit Spring Data zu integrieren?
Ich frage mich, ob ich Spring Data mit QueryDSL anstelle der aktuellen Ansatz verwenden könnte.
Der Grund dafür ist, dass Spring-Repositories sehr nützlich sind und eine Vorlage für NoSQL-Datenbankzugriffe in der Zukunft nützlich sein könnte.
Ich habe versucht, eine normale Feder-Anwendung ohne einen Webkontext mit OSGi zu starten, aber ich bekomme eine ClassNoutFoundException, wenn es versucht, die applicationContext.xml oder die ApplicationContext.class zu laden.
Ich möchte nicht Spring DM verwenden, da es eingestellt wird.
Grundsätzlich ist der einzige Grund, diese Integration ausprobieren zu wollen, die Spring Repositories, aber wenn Sie das nicht für nötig halten, sagen Sie es mir bitte. Jede Information darüber, wie dies zu erreichen ist oder ob es in Ordnung ist, dies zu tun, wäre mehr als willkommen.
Danke
aktualisieren
Ich habe es geschafft, mit org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext
durch Starten des Anwendungskontext Federarbeit zu machen. Der ApplicationContext wird in OSGi als Dienst exportiert und ich kann alle benötigten Beans abrufen.
Das Problem, das ich jetzt habe, ist, dass, wenn ich <jpa:repositories base-package="x.y.z" />
erkläre ich die folgende Ausnahme erhalten:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in URL [bundle://251.13:0/META-INF/spring/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: No persistence exception translators found in bean factory. Cannot perform exception translation.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)[185:org.springframework.beans:3.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)[185:org.springframework.beans:3.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)[185:org.springframework.beans:3.1.4.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)[185:org.springframework.beans:3.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)[185:org.springframework.beans:3.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)[185:org.springframework.beans:3.1.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1109)[187:org.springframework.context:3.1.4.RELEASE]
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.registerBeanPostProcessors(AbstractDelegatedExecutionApplicationContext.java:502)[193:org.eclipse.gemini.blueprint.core:1.0.0.RELEASE]
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.registerBeanPostProcessors(AbstractDelegatedExecutionApplicationContext.java:451)[193:org.eclipse.gemini.blueprint.core:1.0.0.RELEASE]
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:306)[193:org.eclipse.gemini.blueprint.core:1.0.0.RELEASE]
at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)[193:org.eclipse.gemini.blueprint.core:1.0.0.RELEASE]
at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:290)[193:org.eclipse.gemini.blueprint.core:1.0.0.RELEASE]
at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:137)[194:org.eclipse.gemini.blueprint.extender:1.0.0.RELEASE]
at java.lang.Thread.run(Thread.java:662)[:1.6.0_37]
Caused by: java.lang.IllegalStateException: No persistence exception translators found in bean factory. Cannot perform exception translation.
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:142)[195:org.springframework.transaction:3.1.4.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:79)[195:org.springframework.transaction:3.1.4.RELEASE]
at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70)[195:org.springframework.transaction:3.1.4.RELEASE]
at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:103)[195:org.springframework.transaction:3.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1475)[185:org.springframework.beans:3.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1443)[185:org.springframework.beans:3.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)[185:org.springframework.beans:3.1.4.RELEASE]
Als JPA-Provider ich OpenJPA bin mit. Die EntityManagerFactory ist ein Service, den ich mit dem Blueprint bekommen kann. Ich denke, ich muss es in <jpa:repositories base-package="x.y.z" />
verweisen, aber wie mache ich das, da die ApplicationContext.xml von Frühling gelesen wird und nicht die Blaupause?
Ich würde wirklich jeden Hinweis in die richtige Richtung schätzen.
Danke
Frühling DM nicht unterbrochen wird. Es wurde in "Gemini Blueprint" umbenannt. –
Aber jetzt ist es Blaupause, die etwas anders ist als die Feder-dm-Syntax, so könnte man es "unterbrochen" nennen. Ich benutze es immer noch für bestimmte Szenarien ... :) –
Danke Achim Nierbeck. Wegen Ihrer Antwort habe ich festgestellt, dass die Frühlings-DM-Klasse Spring gemacht hat. Ich habe auch meine Antwort aktualisiert. Wenn Sie etwas über die Integration von Apache Karaf mit Spring Data wissen, würde ich es sehr schätzen. Nochmals vielen Dank :) – Marius