Attualmente sto lavorando a un'applicazione OSGi in esecuzione con apache Karaf che utilizza JPA e QueryDSL.È possibile integrare OSGi con Spring Data?
Mi chiedevo se potevo usare Spring Data con QueryDSL invece dell'approccio corrente.
La ragione di ciò è che trovo gli archivi di Spring molto utili e avere un modello per gli accessi al database NoSQL potrebbe essere utile in futuro.
Ho provato ad avviare una normale applicazione di primavera senza un contesto Web con OSGi ma ottengo una classe ClassNoutFoundException quando tenta di caricare applicationContext.xml o ApplicationContext.class.
Non voglio utilizzare Spring DM da quando è stato interrotto.
Fondamentalmente l'unica ragione per voler provare questa integrazione è per i repository primaverili, ma se pensi che questo non sia necessario per favore dimmelo. Qualsiasi informazione su come ottenere questo o se è ok a perseverare sarebbe più che benvenuta.
Grazie
Aggiornamento
sono riuscito a far funzionare la primavera avviando il contesto dell'applicazione con org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext
. ApplicationContext viene esportato in OSGi come servizio e posso richiamare tutti i bean necessari.
Il problema che sto avendo in questo momento è che, quando dichiaro <jpa:repositories base-package="x.y.z" />
ottengo la seguente eccezione:
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]
Come fornitore JPA sto usando OpenJPA. L'entityManagerFactory è un servizio che posso ottenere usando il blueprint. Penso che ho bisogno di fare riferimento a <jpa:repositories base-package="x.y.z" />
, ma come faccio a farlo dal momento che applicationContext.xml viene letto da primavera e non il progetto?
Gradirei davvero ogni suggerimento nella giusta direzione.
Grazie
primavera DM non è interrotto. È stato rinominato in "Gemini Blueprint". –
Ma ora è un progetto che è leggermente diverso dalla sintassi spring-dm, quindi si potrebbe chiamarlo "discontinued". Lo uso ancora per determinati scenari ... :) –
Grazie Achim Nierbeck. Grazie alla tua risposta, ho trovato quella classe Spring DM che ha fatto lavorare Spring. Ho anche aggiornato la mia risposta. Se sai qualcosa sull'integrazione di Apache Karaf con Spring Data, lo apprezzerei molto. Grazie ancora :) – Marius