# Spring DM und Spring Framework



## Gast2 (15. Feb 2010)

Hallo zusammen,

ich habe als ich angefangen hab mich mit Spring zu beschäftigen die Spring Framework Bundles ganz normal als jar dem ClassPath hinzugefügt. Jetzt wollte ich diese aber richtig als Bundles mit Spring DM zusammen nutzen und einbinden. Das versuche ich grad umzustellen.
Also Spring DM alleine mit ein paar Servicen funktionierte ganz gut.
Und davor hatte ich eine kleine Anwendung die eine DB connection mit Spring/Hibernate macht(ohne App Server !!!), das hat auch ganz gut geklappt. Doch jetzt die beiden Sachen zu kombinieren scheitert kläglich. Ich weiß nicht genau wo der Fehler liegt, darum kann sein dass ich eventuell zuviel Info poste:
Also ich habe meine app.xml in mein Bundle Meta-Inf/spring gelegt damit, der der Spring extender das einliest. Das klappt. Danach habe ich die benötigten package in mein Bundle importiert.
org.springframework.beans.factory.annotation,
org.springframework.context,
org.springframework.jdbc.support,
org.springframework.orm.hibernate3,
org.springframework.transaction.annotation

Die XML, die mit dem Spring Framework funktioniert hat, doch jetzt mit Spring DM nicht mehr richtig geht!
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlnssgi="http://www.springframework.org/schema/osgi"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
Index of /schema/context http://www.springframework.org/schema/context/spring-context.xsd
Index of /schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
Index of /schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


	<context:annotation-config />

	<tx:annotation-driven transaction-manager="transactionManager" />

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

	<contextroperty-placeholder location="classpath:jdbc.properties" />    

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />


	<!--  the DataSource (parameterized for configuration via a PropertyPlaceHolderConfigurer)  -->   
    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- Hibernate  -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
		<property name="configLocation" value="hibernate.cfg.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- Hibernate DAO -->
	<bean id="kundenDAO" class="dao.impl.HibernateKundenDAOImpl" />
[/XML]

Die jdbc.properties und die hibernate.cfg.xml liegen immer noch im src Folder. Und die hibernate jar hab ich auch nicht verändert und sind immer noch dem classpath hinzugefügt.
Hier mal die Exception:

```
Feb 15, 2010 10:50:16 PM org.springframework.osgi.extender.internal.activator.ContextLoaderListener start
INFO: Starting [org.springframework.osgi.extender] bundle v.[1.2.1]
Feb 15, 2010 10:50:16 PM org.springframework.osgi.extender.internal.support.ExtenderConfiguration <init>
INFO: No custom extender configuration detected; using defaults...
Feb 15, 2010 10:50:16 PM org.springframework.scheduling.timer.TimerTaskExecutor afterPropertiesSet
INFO: Initializing Timer
Feb 15, 2010 10:50:16 PM org.springframework.osgi.extender.support.DefaultOsgiApplicationContextCreator createApplicationContext
INFO: Discovered configurations {osgibundle:/META-INF/spring/*.xml} in bundle [RCPTest (RCPTest;singleton:=true)]
Feb 15, 2010 10:50:17 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing OsgiBundleXmlApplicationContext(bundle=RCPTest, config=osgibundle:/META-INF/spring/*.xml): startup date [Mon Feb 15 22:50:17 CET 2010]; root of context hierarchy
Feb 15, 2010 10:50:17 PM org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext unpublishContextAsOsgiService
INFO: Application Context service already unpublished
Feb 15, 2010 10:50:17 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from URL [bundleentry://4213.fwk27189676/META-INF/spring/client-context.xml]
Feb 15, 2010 10:50:18 PM org.springframework.core.io.support.PropertiesLoaderSupport loadProperties
INFO: Loading properties file from OSGi resource[classpath:jdbc.properties|bnd.id=4213|bnd.sym=RCPTest]
Feb 15, 2010 10:50:19 PM org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor stageOne
INFO: No outstanding OSGi service dependencies, completing initialization for OsgiBundleXmlApplicationContext(bundle=RCPTest, config=osgibundle:/META-INF/spring/*.xml)
Feb 15, 2010 10:50:19 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@15cd9c0: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,transactionManager,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,dataSource,sessionFactory,angebotModel,kundenModel,mitarbeiterModel,terminModel,angebotController,kundenController,mitarbeiterController,terminController,kundenDAO,connection,angebotDAO,propertyDAO,terminDAO,mitarbeiterDAO,kundenService,angebotService,connectionService,propertyService,terminService,mitarbeiterService,GrantView,PropertiesView,ViewAngebotSearch,ViewKundenSearch,ViewMitarbeiterSearch,AngebotEditor,KundenEditor,KundenTerminEditor,MitarbeiterEditor,MultiKundenEditor,DBObjectFactory,property]; root of factory hierarchy
Feb 15, 2010 10:50:19 PM org.springframework.osgi.extender.internal.support.DefaultOsgiBundleApplicationContextListener onOsgiApplicationEvent
SEVERE: Application context refresh failed (OsgiBundleXmlApplicationContext(bundle=RCPTest, config=osgibundle:/META-INF/spring/*.xml))
java.lang.NoClassDefFoundError: org/hibernate/HibernateException
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	at java.lang.Class.getDeclaredConstructors(Unknown Source)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:225)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:909)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:882)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)
	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(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.hibernate.HibernateException
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	... 20 more
Exception in thread "SpringOsgiExtenderThread-2" java.lang.NoClassDefFoundError: org/hibernate/HibernateException
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	at java.lang.Class.getDeclaredConstructors(Unknown Source)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:225)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:909)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:882)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)
	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(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.hibernate.HibernateException
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	... 20 more
Feb 15, 2010 10:53:14 PM org.springframework.osgi.extender.internal.activator.ContextLoaderListener shutdown
INFO: Stopping [org.springframework.osgi.extender] bundle v.[1.2.1]
Feb 15, 2010 10:53:14 PM org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext unpublishContextAsOsgiService
INFO: Application Context service already unpublished
Feb 15, 2010 10:53:14 PM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing OsgiBundleXmlApplicationContext(bundle=RCPTest, config=osgibundle:/META-INF/spring/*.xml): startup date [Mon Feb 15 22:50:17 CET 2010]; root of context hierarchy
Feb 15, 2010 10:53:14 PM org.springframework.osgi.extender.internal.support.DefaultOsgiBundleApplicationContextListener onOsgiApplicationEvent
SEVERE: Application context close failed (OsgiBundleXmlApplicationContext(bundle=RCPTest, config=osgibundle:/META-INF/spring/*.xml))
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: OsgiBundleXmlApplicationContext(bundle=RCPTest, config=osgibundle:/META-INF/spring/*.xml): startup date [Mon Feb 15 22:50:17 CET 2010]; root of context hierarchy
	at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:320)
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:950)
	at org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext.doClose(AbstractOsgiBundleApplicationContext.java:197)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$501(AbstractDelegatedExecutionApplicationContext.java:69)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$2.run(AbstractDelegatedExecutionApplicationContext.java:214)
	at org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.normalClose(AbstractDelegatedExecutionApplicationContext.java:210)
	at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.close(DependencyWaiterApplicationContextExecutor.java:374)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.doClose(AbstractDelegatedExecutionApplicationContext.java:236)
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:917)
	at org.springframework.osgi.extender.internal.activator.ContextLoaderListener$1.run(ContextLoaderListener.java:522)
	at org.springframework.osgi.extender.internal.util.concurrent.RunnableTimedExecution$MonitoredRunnable.run(RunnableTimedExecution.java:60)
	at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:70)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)
Feb 15, 2010 10:53:14 PM org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor close
SEVERE: Could not succesfully close context OsgiBundleXmlApplicationContext(bundle=RCPTest, config=osgibundle:/META-INF/spring/*.xml): startup date [Mon Feb 15 22:50:17 CET 2010]; root of context hierarchy
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: OsgiBundleXmlApplicationContext(bundle=RCPTest, config=osgibundle:/META-INF/spring/*.xml): startup date [Mon Feb 15 22:50:17 CET 2010]; root of context hierarchy
	at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:320)
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:950)
	at org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext.doClose(AbstractOsgiBundleApplicationContext.java:197)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$501(AbstractDelegatedExecutionApplicationContext.java:69)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$2.run(AbstractDelegatedExecutionApplicationContext.java:214)
	at org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.normalClose(AbstractDelegatedExecutionApplicationContext.java:210)
	at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.close(DependencyWaiterApplicationContextExecutor.java:374)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.doClose(AbstractDelegatedExecutionApplicationContext.java:236)
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:917)
	at org.springframework.osgi.extender.internal.activator.ContextLoaderListener$1.run(ContextLoaderListener.java:522)
	at org.springframework.osgi.extender.internal.util.concurrent.RunnableTimedExecution$MonitoredRunnable.run(RunnableTimedExecution.java:60)
	at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:70)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)
Feb 15, 2010 10:53:14 PM org.springframework.scheduling.timer.TimerTaskExecutor destroy
INFO: Cancelling Timer
```

Also ich sehe dass er meine xml liest und versucht die beans zu laden. Und ich denke mal es scheitert an der DB verbindung. Was mit total schleierhaft ist, dass er die Hibernate Klassen nicht findet, weil die jars liegen im classpath. Oder muss ich diese jetzt mit Spring DM anders einbinden? Weil sobald die Sache mit der Datenbank, das mit der sessionFactory draußen lasse bekomme ich keinen Fehler mehr

Danke für jeden Ratschlag!


----------



## fkh (16. Feb 2010)

Grundsätzlich gibt es zwei Ansätze, wie du Bibliotheken in Bundles einbinden kannst.

Meine präferierte Methode wäre, die Hibernate-Bibliotheken als Bundle im OSGI-Container zu deployen und in meinen eigenen Bundles via package import einzubinden (geht auch mit require bundle, soll man aber nicht machen wenn nicht unbedingt notwendig). Das Spring Team hat da schon einige Bibliotheken vorgefertigt, damit diese "OSGI-tauglich" sind, zu finden hier SpringSource Enterprise Bundle Repository Diese einfach in deinen OSGI-Container deployen (in Equinox z. B. in den plugin-Ordner, beim dm-server kannst es aus dem Eclipse Tool im STS heraus runterladen und deployen).

Der andere Ansatz wäre, die Bibliotheken in deinem Bundle in einen Unterordner zu kopieren und im Manifest den Pfad anzugeben. Dieser Ansatz eignet sich u. U. dann, wenn du ausschließen kannst, dass andere Bundles jemals Hibernate-Bibliotheken benötigen werden. Ansonsten widerspricht das meiner Meinung nach aber dem Grundgedanken von OSGI, weshalb ich das fast nie einsetze.

Hoffe, dass hilft dir mit deiner Problematik.

Gruß
fkh


----------



## Noctarius (16. Feb 2010)

Warum nutzt du Hibernate nicht auch als OSGi Bundle?


----------



## Gast2 (16. Feb 2010)

fkh hat gesagt.:


> Grundsätzlich gibt es zwei Ansätze, wie du Bibliotheken in Bundles einbinden kannst.
> 
> Meine präferierte Methode wäre, die Hibernate-Bibliotheken als Bundle im OSGI-Container zu deployen und in meinen eigenen Bundles via package import einzubinden (geht auch mit require bundle, soll man aber nicht machen wenn nicht unbedingt notwendig). Das Spring Team hat da schon einige Bibliotheken vorgefertigt, damit diese "OSGI-tauglich" sind, zu finden hier SpringSource Enterprise Bundle Repository Diese einfach in deinen OSGI-Container deployen (in Equinox z. B. in den plugin-Ordner, beim dm-server kannst es aus dem Eclipse Tool im STS heraus runterladen und deployen).





Noctarius hat gesagt.:


> Warum nutzt du Hibernate nicht auch als OSGi Bundle?



Ja ich hab die hibernate jars runtergeladen, aber irgenwie wurden diese mir nicht als bundles angezeigt, muss ich nochmal versuchen...



fkh hat gesagt.:


> Der andere Ansatz wäre, die Bibliotheken in deinem Bundle in einen Unterordner zu kopieren und im Manifest den Pfad anzugeben. Dieser Ansatz eignet sich u. U. dann, wenn du ausschließen kannst, dass andere Bundles jemals Hibernate-Bibliotheken benötigen werden. Ansonsten widerspricht das meiner Meinung nach aber dem Grundgedanken von OSGI, weshalb ich das fast nie einsetze.
> 
> Hoffe, dass hilft dir mit deiner Problematik.
> 
> ...



Ja das habe ich ja so versucht, klappt aber nicht. Aber die andere Lösung hört sich eh besser an ...


----------



## maki (16. Feb 2010)

Hibernate in OSGi ist nciht so dolle, da sieht man erst mal wie "invasive" Hibernate wirklich ist.
*EclipseLinkEmpfehl*


----------



## Gast2 (16. Feb 2010)

maki hat gesagt.:


> Hibernate in OSGi ist nciht so dolle, da sieht man erst mal wie "invasive" Hibernate wirklich ist.
> *EclipseLinkEmpfehl*



Ja dann muss ich nochmal die Persitenz Schicht austauschen mal schauen wieviel Aufwand das ist, muss ich ja auch neu einlesen in EclipseLink noch nie was mitgemacht.


----------



## maki (16. Feb 2010)

Du wirst dich ärgern dass du es nciht gleich mit EclipseLink gemacht hast, Hibernate verwendet dynamische Proxies, jedes Bundle das Entities verwendet ist dann vom Hibernate Bundle (und dem riesiegen Rattenschwanz)  abhängig.


----------



## Noctarius (16. Feb 2010)

Wenn du durchweg JPA genutzt hast ist der Wechsel auf EclipseLink ned so umständlich. Den Rest hat maki schon gesagt, EclipseLink ist besser als Hibernate


----------



## Gast2 (16. Feb 2010)

maki hat gesagt.:


> Du wirst dich ärgern dass du es nciht gleich mit EclipseLink gemacht hast, Hibernate verwendet dynamische Proxies, jedes Bundle das Entities verwendet ist dann vom Hibernate Bundle (und dem riesiegen Rattenschwanz)  abhängig.



Okay dann werd ich das mal versuchen 



Noctarius hat gesagt.:


> Wenn du durchweg JPA genutzt hast ist der Wechsel auf EclipseLink ned so umständlich. Den Rest hat maki schon gesagt, EclipseLink ist besser als Hibernate



Ja ich glaub ich hab durchweg JPA verwendet. Mir machen mehr die Konfigurationsdateien sorgen ...
Aber da es eh nur zum Lernen ist schadet es bestimmt nicht beides zu versuchen ...

Also EclipseLink hab ich mir die Bundle mal runtergeladen und eingebunden.
Wenn ich das richtig verstanden hab und Hibernate benutzen will, dann muss ich die Bundles von Spring Repository runterladen und nicht die von Hibernate(weil die jars lassen sich irgendwie nicht einbinden)


----------



## Noctarius (16. Feb 2010)

Ja aber wie gesagt Hibernate nutzt Dynamic Proxies was bei OSGi mit den HibernateSessions schwer Probleme machen kann.

Die Persistence Config sollte eigentlich (da JPA Standard) relativ einfach zu adaptieren sein.


----------



## Gast2 (16. Feb 2010)

Noctarius hat gesagt.:


> Ja aber wie gesagt Hibernate nutzt Dynamic Proxies was bei OSGi mit den HibernateSessions schwer Probleme machen kann.
> 
> Die Persistence Config sollte eigentlich (da JPA Standard) relativ einfach zu adaptieren sein.



Okay alles klar werd ich mal versuche.
Gibts gute Plugins für die eclipde IDE, zur Unterstützung?


----------



## Noctarius (16. Feb 2010)

Für EclipseLink? Japp!

Allgemein zu JPA und EclipseLink
EclipseLink/Examples/JPA - Eclipsepedia

Zitat zu EclipseLink und Eclipse


> EclipseLink's inclusion in the Eclipse IDE for Java EE Developers combined with the extended support in WTP's Dali Java Persistence Tools project allows developers to start building JPA enabled applications quickly and easily. The Dali integration allows developers to optionally select EclipseLink as their JPA implementation and have it automatically added to their project classpath. This support along with Dali's rich validation and intelligent code assist provide a highly productive environment for developing, testing, packaging, and deploying JPA enabled applications.


----------



## Gast2 (16. Feb 2010)

Noctarius hat gesagt.:


> Für EclipseLink? Japp!
> 
> Allgemein zu JPA und EclipseLink
> EclipseLink/Examples/JPA - Eclipsepedia



Ah lad ich mir mal die WTP runter... Und schau mal dass ich es adaptiert bekomme =)

Danke!!!


----------



## Gast2 (18. Feb 2010)

Also die die Db Objekte umzustellen war kein Problem das ich die JP benutz habe...
Aber jetzt muss ich meine ganzen DAOs ändern da ich die Criteria und sessionFactory von hibernate benutzt habe ...


----------



## Noctarius (18. Feb 2010)

Joar aber das sollte nicht so schlimm sein, nimm das DaoJpaTemplate von Spring (oder war es JpaDaoTemplate?) - irgendwie sowas ^^


----------



## Gast2 (18. Feb 2010)

Muss ich eigentlich den EntityManager injecten oder EntityManagerFactory?  Irgendwie seh ich immer unterschiedlich Beispiele... 

Naja find bis jetzt find ich es schon ein großer Unterschied ich hab alles mit Criterias gemacht... Und die Criteria Api sieht ganz anders aus...


----------



## Noctarius (18. Feb 2010)

Puh müsst ich in der Firma nachsehen was ich injected hab. Aber ich glaube ich hatte mir immer direkt den EntityManager ins Template injecten lassen.


----------



## Gast2 (18. Feb 2010)

Noctarius hat gesagt.:


> Puh müsst ich in der Firma nachsehen was ich injected hab. Aber ich glaube ich hatte mir immer direkt den EntityManager ins Template injecten lassen.



Ja so hab ichs auch grad... Ich seh grad irgendwie noch keinen Vorteil vond em Template, nur dass ich nie Abhängigkeit zu Spring dann hab^^...

Und dass die Criteria API voll der Kraus ist... Ich glaub ohne Criteria bin ich besser dran...

EDIT:
Also mal ein kleines Beispiel in Hibernate war das mit den Criterias kein Problem das dynamisch zusammen zu bauen...
Wie würdest du sowas hier abfragen
Klasse kunde(id,name,wohnort)

```
public List<Kunde> getKunden(Kunde kunde)
```

so wenn die id gesetzt ist klar wird die abgefragt, wenn nicht wird geschaut ob name und/oder wohnort gesetzt und danach gefragt: In Hibernate sah das so aus. Fand ich eigentlich ganz praktisch und einfach. Wie würdest sowas mit JPA machen?

```
Criteria crit = sessionFactory.getCurrentSession().createCriteria(Kunde.class);
		if(kunde.getId() != null){
		   crit.add(Restrictions.idEq(kunde.getId()));
		}else{
			if(kunde.getName() != null && !kunde.getName().isEmpty()){
				crit.add(Restrictions.like("name", kunde.getName()));
			}
			if(kunde.getVorname() != null && !kunde.getVorname().isEmpty()){
				crit.add(Restrictions.like("vorname", kunde.getVorname()));
			}
		}

return crit.list()
```


----------



## Noctarius (18. Feb 2010)

So eine Object Query Language kommt in JPA 2.0 (Dynamic, typesafe queries in JPA 2.0)

Derzeit steht dir dafür nur eine externe Lib zur Verfügung (z.B. JaQu oder Querydsl - Querydsl - Mysema Source) oder eben JPQL (Java Persistence Query Language - Java Persistent Objects - JPA Queries - JPQL)

PS: Ganz unten auf der JaQu Seite sind noch Links zu anderen Frameworks dieser Art. Über Geschmack lässt sich ja streiten


----------



## Gast2 (18. Feb 2010)

Schau ich mir später mal an wenn die Sache mal läuft -.-...
Also ich bekomm beim Starten diese Fehlernachricht

```
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in URL [bundleentry://4311.fwk27189676/META-INF/spring/client-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundleentry://4311.fwk27189676/META-INF/spring/client-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Cannot find class [org.eclipse.persistence.jpa.PersistenceProvider]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1004)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.registerBeanPostProcessors(AbstractDelegatedExecutionApplicationContext.java:542)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.registerBeanPostProcessors(AbstractDelegatedExecutionApplicationContext.java:486)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:336)
	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(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundleentry://4311.fwk27189676/META-INF/spring/client-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Cannot find class [org.eclipse.persistence.jpa.PersistenceProvider]
```

okay dann wollte ich das package  org.eclipse.persistence.jpa impoertieren. Und dann werden mir auf einmal alle Bundles rot und unsatisfied angezeigt. 
Dann hab ich versucht die dependencies mit zu importieren aber immer noch rot ???:L

EDIT: oder muss ich den org.eclipse.persistence.jpa.osgi.PersistenceProvider verwenden?


----------



## Gast2 (19. Feb 2010)

Kann es auch sein dass er meine peristence.xml gar nicht einliest?


----------



## Noctarius (19. Feb 2010)

Mag sein, wo hast du die denn liegen?


----------



## Gast2 (19. Feb 2010)

Mhm in der META-INF neben der Manifest Datei...


----------



## Noctarius (19. Feb 2010)

Ist die persistence.xml im richtigen Bundle? Ist die persistence.xml für den Classloader sichtbar?

Ich hab in der Firma die persistence.xml hier liegen:
src/main/resources/META-INF/persistence.xml


----------



## Gast2 (19. Feb 2010)

Ja ich nehm das Meta-Inf wo eclipse anlegt so hab ich es auch in den Tutorials gesehen...
Im richtigen Bundle ist es auch, da ich grad noch keine Aufteilung hab ^^...
Wie sehe ich das ob es für den ClassLoader sichtbar ist...
In ein paar Tutorials hab ich gesehen, dass die noch einen Wert in eine HashMap reinschreiben bevor Sie den EntiyManager generieren... Aber das macht ja Spring für mich oder?
Injectest du jetzt den EntiyManager  oder die Factory?
Ich poste nachher mal meine config vielleicht passt da schon was nicht.

EclipseLink – Persistence für OSGI Teil 1  Eclipse Stuff

```
org.eclipse.persistence.jpa.osgi.PersistenceProvider p =
new org.eclipse.persistence.jpa.osgi.PersistenceProvider();
Map map = new HashMap();
map.put(PersistenceUnitProperties.CLASSLOADER, Person.class
.getClassLoader());
EntityManagerFactory fac = p.createEntityManagerFactory(“personUnit”,
map);
EntityManager manager = fac.createEntityManager();
```

Und hier ganz unten, hab ich noch gelesen dass ich meine persistence-unit ins manifest eintragen soll... wie habt ihr das gemacht?
EclipseLink/Development/OSGi Proof of Concept - Eclipsepedia


----------



## Noctarius (19. Feb 2010)

So sieht mein AppContext aus, allerdings hab ich nen extra Project für nen VendorAdapter und einiges mehr

[xml]<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlnssgix="http://www.springframework.org/schema/osgi-compendium"
	xsi:schemaLocation="
	http: //www.springframework.org/schema/beans
	http: //www.springframework.org/schema/beans/spring-beans.xsd
	http: //www.springframework.org/schema/context
	http: //www.springframework.org/schema/context/spring-context-2.5.xsd
	http: //www.springframework.org/schema/tx
	http: //www.springframework.org/schema/tx/spring-tx-2.5.xsd
	http: //www.springframework.org/schema/osgi-compendium
	http: //www.springframework.org/schema/osgi-compendium/spring-osgi-compendium-1.2-m2.xsd">

	<context:annotation-config />
	<context:component-scan base-package="com.opta.bnavi.jobservice.impl" />

	<tx:annotation-driven transaction-manager="transactionManager"
		proxy-target-class="true" />

	<osgix:cm-properties id="cmProps" persistent-id="com.opta.bnavi.jobservice" />

	<contextroperty-placeholder
		properties-ref="cmProps" />

	<!--
		Post-processor to perform exception translation on @Repository classes (from native exceptions
		such as JPA PersistenceExceptions to Spring's DataAccessException hierarchy).
	-->
	<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

	<!--
		regular spring configuration file defining the beans for this bundle. The configuration of OSGi
		definitions is kept in a separate configuration file so that this file can easily be used for
		integration testing outside of an OSGi environment
	-->

	<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
		<property name="databasePlatform" value="org.eclipse.persistence.platform.database.MySQLPlatform" />
		<property name="showSql" value="true" />
	</bean>

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${jpa.datasource.driver}" />
		<property name="url" value="${jpa.datasource.url}" />
		<property name="username" value="${jpa.datasource.user}" />
		<property name="password" value="${jpa.datasource.password}" />
	</bean>

	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
	</bean>

	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
		<property name="dataSource" ref="dataSource" />
	</bean>

	<bean id="jobDao" class="com.opta.bnavi.jobservice.impl.JobDaoImpl">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>

	<bean id="jobstatusDao" class="com.opta.bnavi.jobservice.impl.JobstatusDaoImpl">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>

	<bean id="jobExporterService" class="com.opta.bnavi.jobservice.impl.JobExportServiceImpl">
		<property name="jobstatusDao" ref="jobstatusDao" />
		<property name="exporterList" ref="exporterList" />
	</bean>

	<bean id="jobServiceBean" class="com.opta.bnavi.jobservice.impl.JobServiceImpl">
		<property name="jobExporterService" ref="jobExporterService" />
		<property name="jobDao" ref="jobDao" />
	</bean>

</beans>[/xml]


----------



## Gast2 (19. Feb 2010)

Hier mal meine XML
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlnssgi="http://www.springframework.org/schema/osgi"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
Index of /schema/context http://www.springframework.org/schema/context/spring-context.xsd
Index of /schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
Index of /schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


	<context:annotation-config />

	<contextroperty-placeholder location="classpath:jdbc.properties" />

	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

	<!-- the DataSource (parameterized for configuration via a PropertyPlaceHolderConfigurer)  -->
    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
	<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

	 <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
	     <property name="databasePlatform" value="org.eclipse.persistence.platform.database.MySQLPlatform" />
	     <property name="showSql" value="true" />
	</bean>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="dataSource" ref="dataSource" />
    </bean>
[/XML]

Persitence
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
	<persistence-unit name="default">

		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

		<class>class1</class>

		<properties>
			<!-- EclipseLink should create the database schema automatically -->
			<property name="eclipselink.ddl-generation" value="create-tables" />
			<property name="eclipselink.ddl-generation.output-mode" value="database" />
			<property name="eclipselink.logging.level" value="INFO"/>
		</properties>

	</persistence-unit>
</persistence>

[/XML]

Ausgabe

```
EVERE: Application context refresh failed (OsgiBundleXmlApplicationContext(bundle=client, config=osgibundle:/META-INF/spring/*.xml))
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in URL [bundleentry://860.fwk10039797/META-INF/spring/client-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundleentry://860.fwk10039797/META-INF/spring/client-context.xml]: Cannot resolve reference to bean 'jpaVendorAdapter' while setting bean property 'jpaVendorAdapter'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter] for bean with name 'jpaVendorAdapter' defined in URL [bundleentry://860.fwk10039797/META-INF/spring/client-context.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter not found from bundle [client]
Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter] for bean with name 'jpaVendorAdapter' defined in URL [bundleentry://860.fwk10039797/META-INF/spring/client-context.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter not found from bundle [client]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1004)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.registerBeanPostProcessors(AbstractDelegatedExecutionApplicationContext.java:542)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.registerBeanPostProcessors(AbstractDelegatedExecutionApplicationContext.java:486)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:336)
	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(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundleentry://860.fwk10039797/META-INF/spring/client-context.xml]: Cannot resolve reference to bean 'jpaVendorAdapter' while setting bean property 'jpaVendorAdapter'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter] for bean with name 'jpaVendorAdapter' defined in URL [bundleentry://860.fwk10039797/META-INF/spring/client-context.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter not found from bundle [client]
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1305)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:266)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:121)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:77)
	at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70)
	at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:99)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1422)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1389)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
	... 13 more
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter] for bean with name 'jpaVendorAdapter' defined in URL [bundleentry://860.fwk10039797/META-INF/spring/client-context.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter not found from bundle [client]
```

Sobald ich 
	
	
	
	





```
org.springframework.orm.jpa.vendor
```
importiere geht gar nichts mehr !!!Unsatisfied so wie oben beschrieben... *grrrr* welche package hast du den impoertiert???


----------



## Gast2 (20. Feb 2010)

Vielleicht liegt es auch an der Version welche EclipseLink version benutzt du?
Ja und welche packages du von spring und eclipseLink importiert hast,
weil wenn ich EclipseLink ohne Spring laufen lass klappts wunderbar, da ich das package nicht importieren muss...


----------



## Noctarius (20. Feb 2010)

SirWayne hat gesagt.:


> Vielleicht liegt es auch an der Version welche EclipseLink version benutzt du?
> Ja und welche packages du von spring und eclipseLink importiert hast,
> weil wenn ich EclipseLink ohne Spring laufen lass klappts wunderbar, da ich das package nicht importieren muss...



Derzeit noch 1.1.0


----------



## Gast2 (20. Feb 2010)

Noctarius hat gesagt.:


> Derzeit noch 1.1.0



Wollt ihr umstellen?
Naja wie gesagt ich steh grad in einer Sackgasse irgendwie egal was ich versuch wills nicht klappen...
Die Tutorials sagen dazu nichts aus...
Also EclipseLink alleine zu benutzen hat geklappt... Aber in Kombi mit Spring will es nicht klappen weil er immer die Klasse nicht findet... Und wie ich diese importierte geht gar nichts mehr...
Des witzige ist ja dass ich dass jpa.support und das jpa selber ohne Probleme importieren kann, nur das Vendor package nicht???:L???:L
Hab ihr das vendor package importiert?

EDIT:Was ich auch noch komisch finde, dass mein XML Editor diese Klasse erkennt und ich wenn ich drüber fahre zu der hinspringen kann ...


----------



## Noctarius (20. Feb 2010)

SirWayne hat gesagt.:


> Wollt ihr umstellen?



So schnell stellt in einem laufenden System normal nicht um, außer man versucht Fehler zu beheben.


----------



## Gast2 (21. Feb 2010)

Noctarius hat gesagt.:


> So schnell stellt in einem laufenden System normal nicht um, außer man versucht Fehler zu beheben.



Ja stimmt, aber hätte ja sein können dass 2.0 einen sehr großen Vorteil mitbringt ka ...
Hast du vielleicht noch irgeneine Idee der siehst du einen Fehler?


----------



## Noctarius (21. Feb 2010)

2.0 bringt JPA 2.0 mit, aber ist das denn schon komplett freigegeben jetzt? Bisher wusste ich nur von EclipseLink 1.2


----------



## Gast2 (21. Feb 2010)

Noctarius hat gesagt.:


> 2.0 bringt JPA 2.0 mit, aber ist das denn schon komplett freigegeben jetzt? Bisher wusste ich nur von EclipseLink 1.2



Ja gibts ein release... Also ich habe Spring Dm 1.2.1 mir Spring 3.0 und Eclipse Link 2.0!!!
Aber da es dann ne funktioniert hat habe ich Eclipse Link 1.2 ausprobiert, kam aber genau an das gleiche Problem. Wie gesagt hab Eclipse Link allein in einem RCP ausprobiert und mit den EntityManager selber erstellt hat geklappt(dazu musste ich NICHT org.eclipse.persitence.jpa impoertieren). Und Spring und Spring DM haben davor auch funktioniert. Nur wenn ich beides jetzt kombiniere klappt es nicht.
Bekomme immer die Fehlermeldung von oben dass er die Klasse nicht findet. Importier ich das package meckert die IDE... Also ziemlich ratlos ^^...


----------



## Noctarius (21. Feb 2010)

Dann importiere doch das Package von der Class die er nicht findet.


----------



## Gast2 (21. Feb 2010)

Noctarius hat gesagt.:


> Dann importiere doch das Package von der Class die er nicht findet.



Ja des ist ja genau mein Problem... Sobald ich das package importiere bekomme ich ein Fehler im Manifest... =(!!!Unsatisfiesd Version constraint...


----------



## Noctarius (21. Feb 2010)

Dann hast du eine falsche Version des Packages welches du importierst. Sagt der Fehler doch. Sicher, dass deine Spring Version gegen EclipseLink 2.0 gelinkt ist? (ich würde vermuten - nein).


----------



## Gast2 (21. Feb 2010)

Noctarius hat gesagt.:


> Dann hast du eine falsche Version des Packages welches du importierst. Sagt der Fehler doch. Sicher, dass deine Spring Version gegen EclipseLink 2.0 gelinkt ist? (ich würde vermuten - nein).



Ja EclipseLink 2.0 mit Spring 3.0!!! Ja aber er meckert mir meine Bundles an und nicht das package!!! Und ich importiere ja das Spring package, wie gesagt so ganz versteh ich es nicht... Sobald das package draußen ist sind die Fehler weg...

Spring Framework 3.0 goes GA | SpringSource Team Blog


----------



## mvitz (21. Feb 2010)

Bin mir nicht 100% sicher aber: Spring Framework 3.0.1 released | SpringSource Team Blog

Evtl. ist der Teil zu OSGI ganz unten für dich ja interessant?


----------



## Gast2 (22. Feb 2010)

mvitz hat gesagt.:


> Bin mir nicht 100% sicher aber: Spring Framework 3.0.1 released | SpringSource Team Blog
> 
> Evtl. ist der Teil zu OSGI ganz unten für dich ja interessant?



Danke glaub zwar nicht dass das Problem ist, aber ein Versuch ist es auf jeden Fall wert =)...


----------



## Noctarius (22. Feb 2010)

Sicher, dass es das nicht ist? Ein fehlerhaftes Manifest könnte doch auch falsche Abhängigkeiten produzieren.


----------



## Gast2 (22. Feb 2010)

Noctarius hat gesagt.:


> Sicher, dass es das nicht ist? Ein fehlerhaftes Manifest könnte doch auch falsche Abhängigkeiten produzieren.



Nö sicher bin ich mir auf jeden Fall nicht, darum werd ich es auf jeden Fall testen mal neue Version runterladen und dann hoffen ...


----------



## Gast2 (22. Feb 2010)

Also hab mir mal das neue Release runter geladen, aber LEIDER ;( gleiches Ergebnis
Hier mal meine Manifest Datei...Sobald das package drin ist bekomme ich Probleme...


----------



## Noctarius (22. Feb 2010)

Vielleicht fehlen ja noch mehr Packages?


----------



## Gast2 (22. Feb 2010)

Noctarius hat gesagt.:


> Vielleicht fehlen ja noch mehr Packages?



Darum frag ich welche du alle importiert hast!!!Wo seh ich welche packages ich alle benötige??? Ja gut ich hab auch mal versucht die Plugins direkt zu adden mit den abhänigkeiten, aber hat auch net ganz funktioniert!!!

naja die 2 package funktionieren ja auch 
[XML]
 org.springframework.orm.jpa,
 org.springframework.orm.jpa.support
[/XML]


----------



## Gast2 (22. Feb 2010)

ah ich hab mal was gefunden!!! Denk mal dass ich die alle importieren muss ^^... Mal versuchen
[XML]
org.springframework.orm.jpa.vendor;version="3.0.1.RELEASE-
 A";uses:="javax.persistence,javax.persistence.spi,oracle.toplink.esse
 ntials.sessions,org.apache.openjpa.persistence,org.eclipse.persistenc
 e.sessions,org.hibernate,org.springframework.dao,org.springframework.
 jdbc.datasource,org.springframework.orm.jpa,org.springframework.trans
 action"
[/XML]

EDIT: naja ein paar hab ich gar net, aber ich glaub auch nicht dass ich wiklich alle brauch weil hibernate verwende ich ja net... mhm...


----------



## Noctarius (22. Feb 2010)

```
<Import-Package>*, org.springframework.jdbc.datasource,
org.springframework.jdbc.datasource.lookup, com.mysql.jdbc,
org.springframework.orm.jpa.vendor,
org.springframework.instrument.classloading,
javax.xml.namespace,
org.apache.commons.dbcp, org.springframework.context.weaving,
org.springframework.transaction.aspectj,
org.springframework.transaction.interceptor,
org.springframework.dao.annotation,
org.eclipse.persistence.internal.weaving,
org.eclipse.persistence.internal.descriptors,
org.eclipse.persistence.queries,
org.eclipse.persistence.descriptors.changetracking,
org.eclipse.persistence.indirection,
org.eclipse.persistence.sessions,
org.eclipse.persistence.internal.identitymaps,
org.eclipse.persistence.expressions, javax.persistence.spi,
org.springframework.aop,
org.springframework.aop.framework,
net.sf.cglib.proxy, org.aopalliance.aop, net.sf.cglib.core,
net.sf.cglib.reflect, org.springframework.dao.support,
org.eclipse.persistence.internal.libraries.antlr.runtime,
org.apache.xbean.spring, org.apache.xbean.spring.context,org.apache.xbean.spring.util,
org.apache.activemq, org.apache.activemq.spring, org.apache.activemq.command,
com.mysql.jdbc</Import-Package>
```


----------



## Gast2 (22. Feb 2010)

So dann probier ich das mal 

Awa des hilft alles nichts ;(;(;(;(

```
javax.persistence,
 javax.persistence.spi,
 javax.xml.namespace,
 org.aopalliance.aop,
 org.apache.commons.dbcp,
 org.apache.derby.jdbc,
 org.eclipse.persistence.descriptors.changetracking,
 org.eclipse.persistence.expressions,
 org.eclipse.persistence.indirection,
 org.eclipse.persistence.internal.descriptors,
 org.eclipse.persistence.internal.identitymaps,
 org.eclipse.persistence.internal.weaving,
 org.eclipse.persistence.queries,
 org.eclipse.persistence.sessions,
 org.eclipse.springframework.util,
 org.springframework.aop,
 org.springframework.aop.framework,
 org.springframework.beans.factory,
 org.springframework.beans.factory.annotation,
 org.springframework.context.weaving,
 org.springframework.dao,
 org.springframework.dao.annotation,
 org.springframework.dao.support,
 org.springframework.instrument.classloading,
 org.springframework.jdbc.datasource,
 org.springframework.jdbc.datasource.lookup,
 org.springframework.orm.jpa,
 org.springframework.orm.jpa.support,
 org.springframework.transaction,
 org.springframework.transaction.aspectj,
 org.springframework.transaction.interceptor
```

Sobald ich irgendwas von org.eclipse.persistence reinmacht bäm alle rot =(...

EDIT:
Also wenn ich die reinmache

```
org.eclipse.persistence.descriptors.changetracking,
 org.eclipse.persistence.expressions,
 org.eclipse.persistence.indirection,
 org.eclipse.persistence.internal.descriptors,
 org.eclipse.persistence.internal.identitymaps,
 org.eclipse.persistence.queries,
 org.eclipse.persistence.sessions,
```


----------



## Noctarius (22. Feb 2010)

Dann stimmt halt irgendwas nicht mit den Bundles oder Versionen, ich bleib dabei


----------



## Gast2 (23. Feb 2010)

Noctarius hat gesagt.:


> Dann stimmt halt irgendwas nicht mit den Bundles oder Versionen, ich bleib dabei



Ich versuch mal ein OSGi Bundle anzulegen und kein Equinox ...
Mhm wie bekomm ich raus dass etwas nicht mit der Version stimmt?
Hab EclipseLink 2.0.1 und Spring 3.0.1A!!!

EDIT: Also wenn ich ein normales OSGi Bundle anlege meckert mein Manifest zumindest mal nicht rum...

EDIT EDIT: Kannst ja mal versuchen ein Equniox Bundle anzulegen und die Sachen zu importieren ob des bei dir klappt... Sobald ich Equinox verwende und was importiere meckert an den required Bundles rum


----------



## Gast2 (23. Feb 2010)

Ich glaub mit Equinox geht es nicht ich find auch nirgends ein Tutorial dazu...


----------



## Noctarius (23. Feb 2010)

Keine Ahnung wie ich mit Equinox-Bundles umgehen muss. Hab mich noch nie mir RCP auseinander gesetzt. Aber warum fragst du nicht mal im Spring oder EclipseLink Forum nach (besser Spring Forum), die müssten da doch näheres wissen.


----------



## Gast2 (23. Feb 2010)

Wenn die mal anworten würden ... Hab schon in beiden geschrieben...
Ist ja beim Anlegen nicht groß anders!!! Machst neues Plugin und da kannst ja auswählen OSGi standard oder Equinox... Dann wählst Equinox, sieht eigentlich ziemlich alles gleich aus außer dass du jetzt extension points noch hast...


----------



## Gast2 (23. Feb 2010)

Hier die Antwort


> I would recommend trying dmServer - or at least its samples which contain EclipseLink - ORMs under OSGi tend to be tricky due to lazy loading, dynamic class creation which conflict with the modularity boundaries imposed by OSGi.



Naja ich versuch es jetzt mal mit einem normalen Bundle!!! Und danach beschäftige ich mich mal mit dem Spring DM Server, so ganz durschaut warum ich den brauch hab ich noch nicht...


----------



## Noctarius (23. Feb 2010)

Naja ich hab noch nie die Eclipse Plugin Dinger benutzt für OSGi Bundle  Dafür gibt es Maven *hust*


----------



## Gast2 (23. Feb 2010)

Noctarius hat gesagt.:


> Naja ich hab noch nie die Eclipse Plugin Dinger benutzt für OSGi Bundle  Dafür gibt es Maven *hust*



Ja ich dachte wenn ich schon eclipse Plugin mache dann mach ich auch gleich welche ...
Benutzt ihr auch einen Spring DM server?????
Auf der EclipseLink Seite indem Tutorial machen die auch ein normale OSGi Bundle kein Equinox, hab darauf noch gar nie geachtet *öhm^^* ... Naja versuch ich mal ein normales OSGi Bundle zu machen, mal schauen ob ich dann eine Datenbank connection hinbekomme. 
Da die Application nur auf einem Rechner läuft hab ich bis jetzt auf einen Application Server verzichtet. Und bin mir nicht sicher ob ein Spring DM server ohne Application Server läuft. Darum hab ich gehofft dass fürs erste auch so geht...


----------



## Gast2 (23. Feb 2010)

Also so wie ich das verstehe brauch ich wenn ich den Spring DM Server verwende einen Application Server. Meine service und dao Bundles auf dem Spring DM Server deployen und die kommunizieren dann mit dem client über http oder rmi...Ist das richtig?


----------



## Noctarius (23. Feb 2010)

Spring DM Server ist ein fertiger Server. Wir benutzen ServiceMix 4, ein SpringDM ähnlicher Server der aber nicht Equinox nutzt sondern Apache Karaf.


----------



## Gast2 (23. Feb 2010)

Noctarius hat gesagt.:


> Spring DM Server ist ein fertiger Server. Wir benutzen ServiceMix 4, ein SpringDM ähnlicher Server der aber nicht Equinox nutzt sondern Apache Karaf.



Ja hab ihn grad mal gestartet und gemerkt, dass es ein fertiger Server ist. hat mich nur gewundert weil ich am Anfang irgendwas gelesen hab dass man den Server mit Tomcat verwenden kann/soll.


----------



## Noctarius (23. Feb 2010)

Ja klar kann man  Wir verwenden auch ne Kombi aus Tomcat und ServiceMix  Was kein OSGi braucht, muss auch keins haben. Ein ESB dazwischen stellt dann die Verbindung her (bzw bei und ein ActiveMQ).


----------



## Gast2 (23. Feb 2010)

Noctarius hat gesagt.:


> Ja klar kann man  Wir verwenden auch ne Kombi aus Tomcat und ServiceMix  Was kein OSGi braucht, muss auch keins haben. Ein ESB dazwischen stellt dann die Verbindung her (bzw bei und ein ActiveMQ).



Was ist der Vorteil davon?


----------



## Noctarius (23. Feb 2010)

Das man im OSGi Container keinen Web-Container laufen lassen muss.


----------



## Gast2 (24. Feb 2010)

Okay wenn ich jetzt wirklich einen Server brauche, was ich vermeiden wollte. Lasse ich die Bundle im OSGi Container laufen und über HTTPInvoker o.ä. mache ich meine Verbindung zum Client.
Mache ich die Verbindungssache dann im Web-Container?


----------



## Noctarius (24. Feb 2010)

Nein du kannst einmal einen Webcontainer (den brauchst du z.B. für JSPs) im OSGi Server laufen lassen. Da gibt es z.B. ein fertiges Jetty-Bundle aber ich glaub auch einen Tomcat basierten.

Das ist aber (aus meiner Sicht) unnötiger Ballast, sowas auf OSGi zu deployen. Entweder kann ich ein Webapp im Tomcat reloaden oder eben nicht (weil z.B. ein HA-Frontend, das nicht mal eben so verschwinden kann) davon abhängt. In letzterem Fall bringt mir aber auch OSGi dann nichts, da ich auch hier nicht eben das Bundle neuladen darf (oder nur unter festen Bedingungen).

OSGi brauche ich wirklich nur dann, wenn ich Komponenten lose koppeln kann und darauf achte, ob ein Service vielleicht mal gerade nicht erreichbar ist, weil er z.B. geupdated wird.

Zur Verbindung zwischen Tomcat und ServiceMix nutzen wir wie gesagt einen redundanten ActiveMQ Server und greifen auf beiden Seiten per SpringRemoting darauf zu. Damit hast du ein RCP ähnliches Invoker System welches auch asynchron arbeiten kann.


----------



## Gast2 (1. Mrz 2010)

Noctarius hat gesagt.:


> Nein du kannst einmal einen Webcontainer (den brauchst du z.B. für JSPs) im OSGi Server laufen lassen. Da gibt es z.B. ein fertiges Jetty-Bundle aber ich glaub auch einen Tomcat basierten.
> 
> Das ist aber (aus meiner Sicht) unnötiger Ballast, sowas auf OSGi zu deployen. Entweder kann ich ein Webapp im Tomcat reloaden oder eben nicht (weil z.B. ein HA-Frontend, das nicht mal eben so verschwinden kann) davon abhängt. In letzterem Fall bringt mir aber auch OSGi dann nichts, da ich auch hier nicht eben das Bundle neuladen darf (oder nur unter festen Bedingungen).
> 
> ...



Wenn ich also kein Webfrontend habe brauche ich keinen Webcontainer, dann reicht in meinem Fall der SpringDm Server und auf den ich meine Business Logik und DB vebrindung mache und die Services ruf ich dann über Spring Remoting auf...

Bin schon ein bischen weitergekommen...

```
Mar 1, 2010 11:17:23 PM org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
INFO: Bean 'jpaVendorAdapter' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
Mar 1, 2010 11:17:24 PM org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory
INFO: Building JPA container EntityManagerFactory for persistence unit 'hello.jpa'
[EL Config]: The access type for the persistent class [class internal.impl.KundeImpl] is set to [PROPERTY].
[EL Config]: The alias name for the entity class [class internal.impl.KundeImpl] is being defaulted to: KundeImpl.
[EL Config]: The table name for entity [class internal.impl.KundeImpl] is being defaulted to: KUNDEIMPL.
[EL Config]: The column name for element [method getId] is being defaulted to: ID.
[EL Config]: The column name for element [method getName] is being defaulted to: NAME.
Mar 1, 2010 11:17:26 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@136e10e: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,dataSource,org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,entityManagerFactory,jpaVendorAdapter,transactionManager,factory,kundenFactory]; root of factory hierarchy
Mar 1, 2010 11:17:26 PM org.springframework.osgi.extender.internal.support.DefaultOsgiBundleApplicationContextListener onOsgiApplicationEvent
SEVERE: Application context refresh failed (OsgiBundleXmlApplicationContext(bundle=DBObjectTest.impl, config=osgibundle:/META-INF/spring/*.xml))
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in URL [bundleentry://1077.fwk3874616/META-INF/spring/db-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundleentry://1077.fwk3874616/META-INF/spring/db-context.xml]: Invocation of init method failed; nested exception is java.lang.reflect.UndeclaredThrowableException
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1044)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.registerBeanPostProcessors(AbstractDelegatedExecutionApplicationContext.java:542)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.registerBeanPostProcessors(AbstractDelegatedExecutionApplicationContext.java:486)
	at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:336)
	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(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundleentry://1077.fwk3874616/META-INF/spring/db-context.xml]: Invocation of init method failed; nested exception is java.lang.reflect.UndeclaredThrowableException
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1403)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:386)
	at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:266)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:139)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:79)
	at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70)
	at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:99)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1422)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1391)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
	... 13 more
Caused by: java.lang.reflect.UndeclaredThrowableException
	at $Proxy2.addTransformer(Unknown Source)
	at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:228)
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225)
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1400)
	... 28 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager$Jpa2PersistenceUnitInfoDecorator.invoke(DefaultPersistenceUnitManager.java:433)
	... 34 more
Caused by: java.lang.IllegalStateException: Cannot apply class transformer without LoadTimeWeaver specified
	at org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.addTransformer(SpringPersistenceUnitInfo.java:109)
	... 39 more
Mar 1, 2010 11:17:42 PM org.springframework.osgi.extender.internal.activator.ContextLoaderListener shutdown
INFO: Stopping [org.springframework.osgi.extender] bundle v.[1.2.1]
Mar 1, 2010 11:17:42 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in
```

Sagt die die Fehlermeldung was?

EDIT:
Vielleicht nochmal die akutelle xml
[XML]
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

	<!-- the DataSource (parameterized for configuration via a PropertyPlaceHolderConfigurer)  -->
    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/>
        <property name="url" value="jdbc:derbyp;create=true"/>
        <!--<property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>-->
    </bean>

	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
	<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />



    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
    </bean>

	<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
	     <property name="databasePlatform" value="org.eclipse.persistence.platform.database.DerbyPlatform" />
	     <property name="showSql" value="true" />
	</bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="dataSource" ref="dataSource" />
    </bean>
[/XML]


----------



## Noctarius (2. Mrz 2010)

Damit hab ich auch lange lange gekämpft. Das Problem ist, dass JPA Klassen normalweise beim Classload instrumentiert (also um die JPA nötigen Funktionen zum Laden und Speichern der Entities erweitert) werden, nennt sich Bytecode-Enhancement.

Dies funktioniert aber nur wenn entweder ein passender Java-Agent (Spring-Agent) in der Kommandozeile angegeben wurde oder ein passender Classloader dazwischen klebt (mit letzterem habe ich das Bytecode-Enhancement in einem Projekt von mir implementiert).

Mir waren aber für ein HA System auf OSGi Basis beide Wege nicht wirklich gewollt und so habe ich auf Compile-Time-Enhancement umgestellt. Dafür gibt es Ant-Tasks als auch Maven Goals. Dabei wird direkt nach dem Kompilieren der Klasse der benötigte Bytecode untergeschoben.

Das hat Vor- als auch Nachteile:
Vorteil:
- kein LoadTimeWeaver
Nachteil:
- Abhängigkeiten von einem bestimmten Provider (z.B. EclipseLink) da diese Enhancements direkt auf Funktionalitäten des entsprechenden Providers zurückgreifen und diese daher Klassen importieren.

Alternative ist eben LoadTimeWeaving, was aber eben nicht so simpel einzurichten ist. Aber das kann beim SpringDM Server schon anders aussehen, da dieses Ding ja schon direkt von SpringSource kommt. Such da einfach mal im Forum nach LoadTimeWeaver und was die empfehlen. Möglicherweise steht auch schon in der Doku vom SpringDM Server etwas dazu.


----------



## Gast2 (2. Mrz 2010)

Mhm okay alles klar muss ich mal danach suchen wie man das einrichtet.
Wie gesagt bisher hab ich noch keinen SpringDM Server  ...


----------



## Gast2 (3. Mrz 2010)

Werd mir am WE mal den Spring DM Server genauer anschauen.
1. Kann man den Server automatisch hochfahren wenn man den Rechner anschält?
2. Warum brauch ich keinen webcontainer wenn ich den Spring HTTPInvoker nutzen will konfigurie ich doch alles in die web.xml oder kann ich die auch auf dem OSGi Container deployen?

EDIT: hier noch was zum LoadTimeWeaver gefunden
Martin Lippert: Dependency Injection for Extensions, Third Edition
Martin Lippert: Load-Time Weaving for Spring-DM


----------



## Noctarius (3. Mrz 2010)

Dein HTTPInvoker habe ich noch nie verwendet. Keine Ahnung ob du da keinen Servlet-Container benötigst. Kann sein, dass der SpringDM das automatisch passend zusammen baut.

Alternativ zum SpringDM Server kannst du dir auch den ServiceMix oder FuSE ansehen. SpringDM nutzt als Unterbau für OSGi den Equinox und kann dadurch unter anderem Fragments, was der Apache Karaf (unter ServiceMix) noch nicht kann. Der FuSE ist die große Version vom ServiceMix und nutzt glaub ich auch den Karaf.

Ansonsten gibt es auch noch viele viele andere OSGi Server 

Und klar kannst du den automatisch starten, entweder per Shellscript (Init-Prozess) unter Linux oder über einen Service-Wrapper in Windows.


----------



## Gast2 (3. Mrz 2010)

Hehe "meiner" ist wohl zuweit gegriffen ... Ja ich wollte halt kein RMI verwenden, darum HTTP!

Gut dann schau ich jetzt mal ob ich das zum Laufen bring


----------



## quiddix (9. Mrz 2010)

Ich habe meine eigene Applikation nun soweit, dass die DI mit Spring DM funktioniert (spring 3.0 und spring dm 2.0).

Nun wollte ich Eclipselink als JPA Implementierung von Spring verwenden. Dazu habe ich mir schon einige Tabellen in einer Oracle Datenbank geschrieben, für die ich nun Mappings (ich bevorzuge xml mappings) schreiben muss.

Zuvor muss ich jedoch Eclipselink mit Spring zum laufen bekommen und wollte dich deshalb nach Informationsmaterialien bzw. Tutorials fragen, da ich im Internet zum Thema Spring DM und Eclipselink nur wenig Materialien finde, bzw. aus den vorhandenen Materialien nicht schlau werde.

Danke


----------



## Gast2 (9. Mrz 2010)

So wie ich das alles bis jetzt verstanden hab, brauchst du einen OSGi Container(z.b. Spring DM Server) darauf deployst du deine Bundles. Und machst dir ein Bundle für Eclipse Link. Hier ein Spring Beispiel

Using EclipseLink on the SpringSource Application Platform | SpringSource Team Blog
Hier noch die EclipseLink Example Seite
Category:EclipseLink/Example/JPA - Eclipsepedia

Leider hab ich es bis jetzt selber noch nicht ausprobiert.


----------



## Noctarius (9. Mrz 2010)

Joar so in etwa, nur das EclipseLink schon ein OSGi Bundle ist.


----------



## Gast2 (9. Mrz 2010)

Noctarius hat gesagt.:


> Joar so in etwa, nur das EclipseLink schon ein OSGi Bundle ist.



Ja des schon klar, ich meinte auch sein eigenes Bundle mit der persitence.xml, DAOs, Entity usw.


----------



## quiddix (10. Mrz 2010)

Hab noch nen schönen Link zum Thema Spring dm server gefunden, falls er dich auch interessiert.

dpunkt.verlag | E-Books


----------



## quiddix (10. Mrz 2010)

Hast du eigentlich mittlerweile erfahren warum man genau Spring DM Server für einen normale Spring Dm + RCP+ Eclipselink Anwendung benötigt?

Ich habe im Ebook nachgelesen, dass dass es beim LazyLoading ohne Spring DM Server zu probleme kommen kann. Aber prinzipiell sollte ein Einsatz ohne Spring DM Server doch auch möglich sein?

Noch eine andere Frage, welches Ecliselink hast du geladen (Normal oder OSGI Bundles) und welche .jar Dateien hast du dann in deinen Classpath aufgenommen?


----------



## Gast2 (10. Mrz 2010)

Ich weiß auch dem grund wegen dem lazy loading und eben der Grund den Noctarius oben genannt hat!!!
Ich hab ich auch noch was gefunden


> ORMs under OSGi tend to be tricky due to lazy loading, dynamic class creation which conflict with the modularity boundaries imposed by OSGi.



Eigentlich ist es ja auch richtig die Business Logik und DB Anbindung auf einem Server zu haben.

Zu deinem 2ten Punkt ich hab gar keine .jar im classpath... Ich binde nur die benötigten package ein und ich hab die Bundles runtergeladen.
Was  für einen Sinn sollte es machen die jars im classpath aufzunehmen?


----------



## quiddix (11. Mrz 2010)

Wenn ich eine externe Bibliothek (.jar Datei) verwenden will ( in meinem Fall eclipselink.jar, javax.persistance.jar und ojdbc14.jar(oracle db)), dann muss ich diese Dateien in meinen Classpath einbinden, um auf die Klassen dieser Jars zugreifen zu können (so habe ich das bis jetzt zumindest verstnaden).

Ansonsten kann ich die Klassen bzw. Annotations die ich für Eclipselink brauche nicht vewenden.

Eventuell ist es, wenn man die osgi-Bundles von Eclipselink verwendet, so, dass man die Bundles importiert und dann dependencies zu den Bundles festlegt?


----------



## Noctarius (11. Mrz 2010)

Nein in OSGi wird *NIEMALS* am Classpath rumgespielt.
In OSGi werden im Manifest Daten hinterlegt welche Packages dein Bundle im- bzw exportiert. Die zu importierenden Packages müssen von anderen Bundles irgendwie zur Verfügung gestellt werden. Bei EclipseLink musst du z.B. die EclipseLink-JARs (welche selber Bundles sind) mit in den OSGi-Container deployen. Diese exportieren dann die passenden Packages (und damit Klassen) und du kannst diese wieder nutzen.

Bevor du mit EclipseLink in OSGi (oder halt SpringDM) anfängst, solltest du dir mal einen kurzen Überblick über das OSGi Classloader- und Deploymentprinzip holen.

http://www.jfokus.se/jfokus09/slides/salong4/OSGiClassloading.pdf
OSGi ? Wikipedia
Erste Schritte mit OSGi
OSGi Alliance | About / OSGi Technology
OSGi in a nutshell
OSGi Overview by Richard Hall, 8/20/08 12:35PM PST pelegri on USTREAM. The Web
OSGi - Definition

usw usw usw  - ohne das Grundkonzept von OSGi verstanden zu haben wirst du nicht sehr weit kommen


----------

