Spring und JPA

G

Gast2

Gast
Hallo zusammen,

ich versuche gerade ein mit Spring DM und Eclipse Link zu arbeiten. Doch mein EntityManager ist immer null.

Meine xml config is:
[XML]
<context:annotation-config />
<context:load-time-weaver weaver-class="org.eclipse.equinox.weaving.springweaver.EquinoxAspectsLoadTimeWeaver"/>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<context:component-scan base-package="db" annotation-config="true" />

<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:derby:kunde;create=true" />
</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"/>
</bean>

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


Meine DAO:
Java:
public class DAO {

	@PersistenceContext
	private EntityManager entityManager;

Der Consolen log lautet:
Java:
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@92668c: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,loadTimeWeaver,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,transactionManager,tableview,dao]; root of factory hierarchy
14.09.2010 10:51:31 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory
INFO: Building JPA container EntityManagerFactory for persistence unit 'kunde'
[El-Config]...
transformer added; Standard ClassFileTransformer wrapping JPA transformer: org.eclipse.persistence.internal.jpa.weaving.PersistenceWeaver@40d611
14.09.2010 10:51:31 org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext publishContextAsOsgiServiceIfNecessary

Ich hab die ganzen El-Config wo er die Tabellen generiert mal draußen gelassen. Die EntityManagerFactory wird ja generiert und ich dachte mit der PersistenceContext Annotation wird die Factory den EntityManager injecten. Klappt leider nicht hat jemand eine Idee oder sieht ein Fehler in der config?
 
G

Gast2

Gast
Hab mal versucht den loadTimeWeaver direkt anzugeben und oben wegzulassen
[XML]
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="loadTimeWeaver">
<bean class="org.eclipse.equinox.weaving.springweaver.EquinoxAspectsLoadTimeWeaver"/>
</property>
<property name="dataSource" ref="dataSource"/>
</bean>
[/XML]

jetzt hab ich war ein entitymanager aber auf einmal wird der driver nicht mehr gefunden aber ich das derby bundle hinzugefügt und die Tabelle wird auch angelegt beim starten:
Java:
14.09.2010 13:47:21 org.springframework.osgi.extender.internal.activator.ContextLoaderListener start
INFO: Starting [org.springframework.osgi.extender] bundle v.[1.2.1]
14.09.2010 13:47:21 org.springframework.osgi.extender.internal.support.ExtenderConfiguration <init>
INFO: No custom extender configuration detected; using defaults...
14.09.2010 13:47:21 org.springframework.scheduling.timer.TimerTaskExecutor afterPropertiesSet
INFO: Initializing Timer
14.09.2010 13:47:21 org.springframework.osgi.extender.support.DefaultOsgiApplicationContextCreator createApplicationContext
INFO: Discovered configurations {osgibundle:/META-INF/spring/*.xml} in bundle [RCP (Eclipse.Link.RCP; singleton:=true)]
14.09.2010 13:47:21 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing OsgiBundleXmlApplicationContext(bundle=Eclipse.Link.RCP, config=osgibundle:/META-INF/spring/*.xml): startup date [Tue Sep 14 13:47:21 CEST 2010]; root of context hierarchy
14.09.2010 13:47:21 org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext unpublishContextAsOsgiService
INFO: Application Context service already unpublished
14.09.2010 13:47:21 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from URL [bundleentry://97.fwk25724761/META-INF/spring/spring-db.xml]
14.09.2010 13:47:22 org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor stageOne
INFO: No outstanding OSGi service dependencies, completing initialization for OsgiBundleXmlApplicationContext(bundle=Eclipse.Link.RCP, config=osgibundle:/META-INF/spring/*.xml)
14.09.2010 13:47:22 org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
INFO: Bean 'org.eclipse.equinox.weaving.springweaver.EquinoxAspectsLoadTimeWeaver#9300cc' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
14.09.2010 13:47:22 org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
INFO: Bean 'dataSource' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
14.09.2010 13:47:22 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory
INFO: Building JPA container EntityManagerFactory for persistence unit 'kunde'
[EL Config]: 2010-09-14 13:47:22.898--The access type for the persistent class [class db.Kunde] is set to [PROPERTY].
[EL Config]: 2010-09-14 13:47:22.929--The alias name for the entity class [class db.Kunde] is being defaulted to: Kunde.
[EL Config]: 2010-09-14 13:47:22.929--The table name for entity [class db.Kunde] is being defaulted to: KUNDE.
[EL Config]: 2010-09-14 13:47:22.929--The column name for element [method getId] is being defaulted to: ID.
[EL Config]: 2010-09-14 13:47:22.945--The column name for element [method getVerheiratet] is being defaulted to: VERHEIRATET.
[EL Config]: 2010-09-14 13:47:22.945--The column name for element [method getName] is being defaulted to: NAME.
[EL Config]: 2010-09-14 13:47:22.945--The column name for element [method getGrußwort] is being defaulted to: GRUSSWORT.
transformer added; Standard ClassFileTransformer wrapping JPA transformer: org.eclipse.persistence.internal.jpa.weaving.PersistenceWeaver@18c6cbc
14.09.2010 13:47:22 org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
INFO: Bean 'entityManagerFactory' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
14.09.2010 13:47:22 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@182c132: 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,transactionManager,tableview,dao]; root of factory hierarchy
14.09.2010 13:47:23 org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext publishContextAsOsgiServiceIfNecessary
INFO: Publishing application context as OSGi service with properties {org.springframework.context.service.name=Eclipse.Link.RCP, Bundle-SymbolicName=Eclipse.Link.RCP, Bundle-Version=1.0.0.qualifier}
14.09.2010 13:47:23 org.springframework.osgi.extender.internal.support.DefaultOsgiBundleApplicationContextListener onOsgiApplicationEvent
INFO: Application context successfully refreshed (OsgiBundleXmlApplicationContext(bundle=Eclipse.Link.RCP, config=osgibundle:/META-INF/spring/*.xml))
[EL Info]: 2010-09-14 13:47:26.632--EclipseLink, version: Eclipse Persistence Services - 2.0.1.v20100213-r6600
[EL Severe]: 2010-09-14 13:47:26.632--Local Exception Stack: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
Error Code: 0
	at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:309)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94)
	at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:369)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:423)
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:485)
	at $Proxy6.createEntityManager(Unknown Source)
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:234)
	at $Proxy9.merge(Unknown Source)
	at db.DAO.createKunde(DAO.java:17)
	at db.TableView$1.widgetDefaultSelected(TableView.java:42)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:119)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at eclipse.link.rcp.Application.start(Application.java:20)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1146)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:882)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:126)
	... 45 more
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1138)
	... 47 more

!SESSION 2010-09-14 13:47:20.820 -----------------------------------------------
eclipse.buildId=unknown
 
G

Gelöschtes Mitglied 5909

Gast
1. du hast die init methode der DataSource vergessen
2. hast du den treiber als import package drinnen?
3. Load Time Weaving und OSGi verträgt sich nicht gut.
-> entweder nimmst du static weaving (beim bauen)
-> oder du verzichtest auf weaving (Lazy Loading und Spezialsachen gehn nicht) und lässt den ganz weg

Und das fehlt auch noch:

[xml]
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
[/xml]
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
1. du hast die init methode der DataSource vergessen
2. hast du den treiber als import package drinnen?
3. Load Time Weaving und OSGi verträgt sich nicht gut.
-> entweder nimmst du static weaving (beim bauen)
-> oder du verzichtest auf weaving (Lazy Loading und Spezialsachen gehn nicht) und lässt den ganz weg

Und das fehlt auch noch:

[xml]
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
[/xml]

zu 1 was muss in der initmethode drin stehen?
zu 2 hab ich sogar als required bundle drin
zu 3 darum hab ich ja dass hier verwendet Martin Lippert: Load-Time Weaving for Spring-DM

und die bean hab ich doch auch drin...
 
G

Gast2

Gast
Muss ich die embedded derby irgendwie manuell hochfahren?
Oder sogar das das client derby bundle benutzen?
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Also hab jetzt nochmal die derby konfiguriert
Step 1: Install Software
Die Sample.java läuft bei mir einwandfrei...

und hab mal die jar anstatt das osgi bundle verwendet gleiches ergebnis:
Das witzige ist wenn ich beim starten den driver lade bekomme ich keine exception ...
Java:
	public void start(BundleContext context) throws Exception {
		try {
			Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		super.start(context);
		plugin = this;
	}

Java:
15.09.2010 13:46:39 org.springframework.osgi.extender.internal.activator.ContextLoaderListener start
INFO: Starting [org.springframework.osgi.extender] bundle v.[1.2.1]
15.09.2010 13:46:39 org.springframework.osgi.extender.internal.support.ExtenderConfiguration <init>
INFO: No custom extender configuration detected; using defaults...
15.09.2010 13:46:39 org.springframework.scheduling.timer.TimerTaskExecutor afterPropertiesSet
INFO: Initializing Timer
15.09.2010 13:46:40 org.springframework.osgi.extender.support.DefaultOsgiApplicationContextCreator createApplicationContext
INFO: Discovered configurations {osgibundle:/META-INF/spring/*.xml} in bundle [RCP (Eclipse.Link.RCP; singleton:=true)]
15.09.2010 13:46:40 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing OsgiBundleXmlApplicationContext(bundle=Eclipse.Link.RCP, config=osgibundle:/META-INF/spring/*.xml): startup date [Wed Sep 15 13:46:40 CEST 2010]; root of context hierarchy
15.09.2010 13:46:40 org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext unpublishContextAsOsgiService
INFO: Application Context service already unpublished
15.09.2010 13:46:40 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from URL [bundleentry://114.fwk25724761/META-INF/spring/spring-db.xml]
15.09.2010 13:46:40 org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor stageOne
INFO: No outstanding OSGi service dependencies, completing initialization for OsgiBundleXmlApplicationContext(bundle=Eclipse.Link.RCP, config=osgibundle:/META-INF/spring/*.xml)
15.09.2010 13:46:40 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@33c3e6: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,loadTimeWeaver,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,transactionManager,tableview,dao]; root of factory hierarchy
15.09.2010 13:46:41 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory
INFO: Building JPA container EntityManagerFactory for persistence unit 'kunde'
[EL Config]: 2010-09-15 13:46:41.6--The access type for the persistent class [class db.Kunde] is set to [PROPERTY].
[EL Config]: 2010-09-15 13:46:41.631--The alias name for the entity class [class db.Kunde] is being defaulted to: Kunde.
[EL Config]: 2010-09-15 13:46:41.631--The table name for entity [class db.Kunde] is being defaulted to: KUNDE.
[EL Config]: 2010-09-15 13:46:41.631--The column name for element [method getId] is being defaulted to: ID.
[EL Config]: 2010-09-15 13:46:41.631--The column name for element [method getVerheiratet] is being defaulted to: VERHEIRATET.
[EL Config]: 2010-09-15 13:46:41.631--The column name for element [method getName] is being defaulted to: NAME.
[EL Config]: 2010-09-15 13:46:41.631--The column name for element [method getGrußwort] is being defaulted to: GRUSSWORT.
transformer added; Standard ClassFileTransformer wrapping JPA transformer: org.eclipse.persistence.internal.jpa.weaving.PersistenceWeaver@13d4c49
15.09.2010 13:46:41 org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext publishContextAsOsgiServiceIfNecessary
INFO: Publishing application context as OSGi service with properties {org.springframework.context.service.name=Eclipse.Link.RCP, Bundle-SymbolicName=Eclipse.Link.RCP, Bundle-Version=1.0.0.qualifier}
15.09.2010 13:46:41 org.springframework.osgi.extender.internal.support.DefaultOsgiBundleApplicationContextListener onOsgiApplicationEvent
INFO: Application context successfully refreshed (OsgiBundleXmlApplicationContext(bundle=Eclipse.Link.RCP, config=osgibundle:/META-INF/spring/*.xml))
[EL Info]: 2010-09-15 13:46:43.709--EclipseLink, version: Eclipse Persistence Services - 2.0.1.v20100213-r6600
[EL Severe]: 2010-09-15 13:46:43.709--Local Exception Stack: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
Error Code: 0
	at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:309)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94)
	at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:369)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
	at org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:400)
	at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:321)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:354)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:103)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
	at db.DAO$$EnhancerByCGLIB$$1d24161.createKunde(<generated>)
	at db.TableView$1.widgetDefaultSelected(TableView.java:42)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:119)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at eclipse.link.rcp.Application.start(Application.java:20)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1146)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:882)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:126)
	... 43 more
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1138)
	... 45 more

!SESSION 2010-09-15 13:46:38.881 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.6.0_16
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DE
Framework arguments:  -product Eclipse.Link.RCP.starter
Command-line arguments:  -product Eclipse.Link.RCP.starter -data C:\Dokumente und Einstellungen\melzer.DIG-INT\workspace/../runtime-startet.product -dev file:C:/Dokumente und Einstellungen/melzer.DIG-INT/workspace/.metadata/.plugins/org.eclipse.pde.core/startet.product/dev.properties -os win32 -ws win32 -arch x86 -consoleLog

!ENTRY org.eclipse.ui 4 0 2010-09-15 13:46:43.709
!MESSAGE Unhandled event loop exception
!STACK 0
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
Error Code: 0
	at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:382)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:354)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:103)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
	at db.DAO$$EnhancerByCGLIB$$1d24161.createKunde(<generated>)
	at db.TableView$1.widgetDefaultSelected(TableView.java:42)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:119)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at eclipse.link.rcp.Application.start(Application.java:20)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
Error Code: 0
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:397)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
	at org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:400)
	at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:321)
	... 33 more
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
Error Code: 0
	at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:309)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94)
	at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:369)
	... 38 more
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1146)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:882)
	at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:126)
	... 43 more
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1138)
	... 45 more
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 5909

Gast
Hast dus mittlerweile geschafft? Ansonsten mach ich dir morgen mal ein lauffähiges Beispiel.

Hatte gestern leider Verbindungsprobleme und konnte nicht ins Internet.
 
G

Gelöschtes Mitglied 5909

Gast
Ich hab dir mal ein einfaches Beispiel mit einem PersonDao gemacht.

Allerdings habe ich nicht derby sondern h2 genommen, was aber denke ich keinen unterschied macht.

Als JPA Implementierung habe ich EclipseLink 2.1 genommen, da sich das besser mit OSGi verträgt als Hibernate.

Weaving habe ich ausgeschaltet, da wie von mir bereits erwähnt LoadTimeWeaving

a) langsam ist
b) mit OSGi sehr tricky ist (ich habe es auch mit den ganzen Blog einträgen des fähigen Martin Lippert und Co nicht hinbekommen)

Wenn du Weaving verwenden willst, dann verwende static-weaving

Das hängt von deinem Build-Prozess ab (ANT/Maven)

Using EclipseLink JPA Extensions (ELUG) - Eclipsepedia

Für das kleine Beispiel habe ich weder ant noch maven verwendet, da ich heut noch was anderes zu tun habe :)

Ein paar hints noch:

1. Warum habe ich nicht direkt das EntityBean verwendet?

Weil man sich sonst den ganzen Business Logik Code mit javax.persistence dependencies zumüllt

2. Ich habe in dem DAO DynamicImport-Package: * verwendet.

Mach das bitte nicht in richtigen Code, das ist sehr dreckig. Ich war nur zu faul mir die "versteckten" dependencies zu importen.
Deshalb steht das in diesem Beispiel dinn.

Im Anhang sind einmal die eigenen plugins als binary und sourcen. Außerdem ist auf dem screenshot noch die verwendete target-platform zu sehen. Es kann sein, dass da zu viele Plugins drinnen sind -> keine zeit/bock die jetzt alle einzeln rauszusuchen.

Ich werde dir per PM noch einen Link mit dem kompletten workspace und ein executable binary schicken.

Wenn du noch Fragen hast bezüglich OSGi, Spring DM und co, dann kannst du dich gerne an mich wenden. Ich denke mittlerweile kenn ich mich ganz gut damit aus und kenn auch den ein oder anderen Stolperstein.

Wobei ich dir (noch) nicht helfen kann ist der build-prozess.

Wenn ich zeit habe und es jemand braucht kann ich auch noch n billiges web-bundle bauen mit tomcat in osgi.
(D.h. Das OSGi Framework startet Tomcat in process)

Ich hoff ich hab nix vergessen und konnte dir helfen. Falls du Fragen hast, immer her damit. (Kann aber sein dass ich dir heute nicht mehr Antworten kann).
 
G

Gast2

Gast
Danke für die ausführliche Antwort und die Mühe. Werd ich mir die nächsten Tage mal anschauen und wenns net klappt frag ich nochmal :p...
 
G

Gast2

Gast
Okay ich hätte noch ne Frage zum weaving, wenn ich das auschalte welche Nachteile/Vorteile ergeben sich dann?

EDIT: Klasse wenn das weaving draußen ist tuuuuuuut es einwandfrei =) ...
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 5909

Gast
Na dann bin ich ja froh, dass ich dir helfen konnte :)

Weaving is a technique of manipulating the byte-code of compiled Java classes. The EclipseLink JPA persistence provider uses weaving to enhance JPA entities for such things as lazy loading, change tracking, fetch groups, and internal optimizations.

Weaving can be performed either dynamically at runtime, when Entities are loaded, or statically at compile time by post-processing the Entity .class files.

Alles außer lazy loading nutzt man im normalfall eh nicht würd ich sagen. Und von den "internal optimazations" hab ich nix mitkriegt, zumindest was die Geschwindigkeit betrifft.

Im übrigen nutzt dir lazy loading wenig, wenn du DTOs verwendest. Und wenn du keine DTOs verwendest hast du den ganzen javax.persistence kram in deiner Business logik.
 
Zuletzt bearbeitet von einem Moderator:

Noctarius

Top Contributor
Alles außer lazy loading nutzt man im normalfall eh nicht würd ich sagen. Und von den "internal optimazations" hab ich nix mitkriegt, zumindest was die Geschwindigkeit betrifft.

Sehe ich ganz ähnlich. Allerdings werden alle weiteren Änderungen an den Klassen auch beim StaticWeaving vorgenommen und das Meiste ist eher für die interne Funktionalität gedacht, z.B. ChangeTracking, damit nur Daten zum Datenbankserver übermittelt werden, die sich echt geändert haben.
 
G

Gast2

Gast
Ja StaticWeaving habe ich noch nicht versucht, da es mit für so ein kleines Übungsprojekt zu stressig war einen extra build prozess zu machen, da der RCP ja einen mitbringt. Und das Weaving von Martin Lippert hat wie gesagt nicht geklappt. Darum lass ich es erstmal draußen ;)
 
G

Gast2

Gast
Wuäh jetzt hab ich meine EclipseLink Version auf 2.1.1 geupgradet und bekomm ich folgendes Problem:
Java:
SCHWERWIEGEND: Application context refresh failed (OsgiBundleXmlApplicationContext(bundle=mdk.verwaltung.dao, 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://91.fwk31401995/META-INF/spring/context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [bundleentry://91.fwk31401995/META-INF/spring/context.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [default] failed.
Internal Exception: Exception [EclipseLink-7305] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.ValidationException
Exception Description: An exception was thrown while processing the mapping file from URL: [bundleresource://91.fwk31401995:1/META-INF/orm.xml],
error using JPA 1.0 orm.xsd was [Exception [EclipseLink-25008] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: A descriptor with default root element entity-mappings was not found in the project],
error using eclipselink-orm.xsd was [Exception [EclipseLink-25008] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: A descriptor with default root element entity-mappings was not found in the project],
error using JPA 2.0 orm.xsd is in cause.
Internal Exception: Exception [EclipseLink-25008] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: A descriptor with default root element entity-mappings was not found in the project
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1045)
	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://91.fwk31401995/META-INF/spring/context.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [default] failed.

Schon mal gehört?
 
G

Gelöschtes Mitglied 5909

Gast
Exception Description: Predeployment of PersistenceUnit [default] failed.

Heißt deine PU default? Wenn nein, dann hat er die persistence.xml wohl nicht gefunden.
Die persistence.xml muss in dem gleichen bundle sein, in dem du die EntityManagerFactory für die PU der persistence.xml erzeugst.

Exception Description: A descriptor with default root element entity-mappings was not found in the project],
error using JPA 2.0 orm.xsd is in cause.

Könnte aber auch heißten, dass er eine orm.xml sucht und sie nicht findet. Probier mal eine orm.xml abzulegen (gleiches verzeichniss wie persistence.xml), aber ohne Inhalt:

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

Wenn das immernoch nicht funktioniert, poste mal deine Verzeichnisstruktur
 
G

Gast2

Gast
jop meine PU heißt default und ich hab auch eine orm.xml wie gesagt mit EclipseLink 2.01 hats funktioniert. Grad auf EclipseLink 2.1.1 gewechselt aber kann auch sein dass Teneo ne korrupte orm.xml erzeugt hat. Ich lad mal 3.6 mit Teneo runter da sah die orm.xml besser aus vielleichts liegts auch daran. Kann mit der Fehlermeldung net viel anfangen.
 
G

Gast2

Gast
Kann man einen TransactionManager auch als OSGi-Service bereit stellen?

a)
[XML]
<osgi:service id="transactionManagerService" ref="transactionManager" interface="org.springframework.transaction.support.ResourceTransactionManager"/>
[/XML]
b)
[XML]
<osgi:reference id="transactionManager" interface="org.springframework.transaction.support.ResourceTransactionManager"/>
[/XML]
damit ich in meinem service bundle transaktione anlegen kann
Java:
public class ServiceImpl implements Service{

@Autowired
private DAO dao;
	@Transactional(propagation = Propagation.REQUIRED)
	@Override
	public void delete(Long id) {
		dao.deleteByID(id);
	}
 
Zuletzt bearbeitet von einem Moderator:

Noctarius

Top Contributor
Theoretisch würde ich jetzt sagen: Ja kann er aber praktisch bin ich mir gerade nicht ganz sicher wegen eventuellen Classloading-Issues durch die unterschiedlichen Bundle-Classloader. Es wird vermutlich von der Implementierung abhängen - ergo ausprobieren :D
 
G

Gelöschtes Mitglied 5909

Gast
Ich hab ein ähnliches problem:

Unten hab ich x dao bundles (alle mit einener PU/EMF und TXM), die haben alle required. dann hab ich ein oder zwei oder vielleicht auch drei service schichten die die daos nutzen und auf oberster ebene möchte ich requires_new machen.

wenn du ne lösung findest sag bescheid, ich werd ich den nächsten paar tagen nicht dazu kommen :)
 
G

Gast2

Gast
Ja bei mir hat es einfach wie oben funktioniert. Einfach als OSGi Service deklariert und bei den anderen reference gemacht! Kann ich dir morgen mal hier posten.

Aber was noch nicht ganz funkioniert, ist den getCriteriaBuilder holen bekomm ich immer ne NPE weiß nicht ob es einen Zusammenhang gibt. Ich sende es morgen einfach mal.
 
G

Gast2

Gast
Klappt bei mir aber auch nicht wenn ich nur ein TransaktionManager habe, darum denk ich das Problem liegt woanders.

Java:
	public <T extends DBObject> List<T> findAll(Class<T> entityClass){
		CriteriaBuilder builder = entityManager.getCriteriaBuilder();
		CriteriaQuery<T> criteriaQuery = builder.createQuery(entityClass);
		return entityManager.createQuery(criteriaQuery).getResultList();
	}

Java:
java.lang.NullPointerException
	at java.lang.Class.searchMethods(Unknown Source)
	at java.lang.Class.getDeclaredMethod(Unknown Source)
	at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getDeclaredMethod(PrivilegedAccessHelper.java:236)
	at org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.getTypeClassFromAttributeOrMethodLevelAccessor(ManagedTypeImpl.java:1378)
	at org.eclipse.persistence.internal.jpa.metamodel.SingularAttributeImpl.<init>(SingularAttributeImpl.java:96)
	at org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.initialize(ManagedTypeImpl.java:1308)
	at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.initialize(MetamodelImpl.java:400)
	at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.<init>(MetamodelImpl.java:101)
	at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.<init>(MetamodelImpl.java:120)
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.getMetamodel(EntityManagerSetupImpl.java:1996)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getMetamodel(EntityManagerFactoryImpl.java:495)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getCriteriaBuilder(EntityManagerFactoryImpl.java:478)
	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.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:423)
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:485)
	at $Proxy9.getCriteriaBuilder(Unknown Source)
	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.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:176)
	at $Proxy12.getCriteriaBuilder(Unknown Source)
	at emf.dao.internal.BaseDaoEclispeLink.findAll(BaseDaoEclispeLink.java:68)
	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.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
	at $Proxy13.findAll(Unknown Source)
	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.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
	at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:58)
	at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:62)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:56)
	at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:39)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
	at $Proxy15.findAll(Unknown Source)
	at handler.View$1.widgetSelected(View.java:55)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at emfrcp.Application.start(Application.java:20)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)


Wenn ich hingegen ne "normale" Abfrage mache klappt es. Wie gesagt die NPE kommt bei entityManager.getCriteriaBuilder()? Muss ich noch irgendwas setzen um den zu benutzen?
Java:
entityManager.createQuery("Select v from Verwaltung v")
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Hallo hier ist mal mein Beispiel, wo es eigentlich funktioniert und ich keine Probleme habe.

Im emf_test_feature habe ich alle notwendigen Bundles die benötigt werden und die product Datei zum starten.

Zu Erklärung vielleicht kurz die einzelnen Bundles:
1.emf-rcp: Ist ein kleiner RCP, wenn man auf den Button test drückt wird ein Service ausgeführt. Die nebula widgets hab ich drin, weil ich das Databinding testen wollte.
2.emf-test: Ist das EMF Model. Mit Teneo habe ich die orm.xml generieren lassen.
3. emf-dao: Ist ein DAO drin und stellt den TransaktionManager als OSGi- Service zu Verfügung.
4. emf.service: Ist der Service drin, der eine neue Transaktion aufmacht. Referenziert den Transaktionmanager von emf-dao.
 
G

Gelöschtes Mitglied 5909

Gast
Ich hab das gestern mal im Geschäft ausprobiert, das Problem ist nur dass ich viele bundles habe die alle einen eigen PU / EMF /TXM haben. Das geht dann aber nicht mehr. Habe beide TXMs veröffentlicht und in meinem Service Context Referenziert.

Geht aber aus mehreren Gründen so nicht:

- jeder EMF kann eine eigene (physikalische) Connection halten.
- Spring kann die Transaktionen über mehrere TXMs hinweg nicht joinen

1. Versuch:
- Ein globaler TXM
-> Problem TXM braucht EMF -> habe viele EMFs -> geht nicht


Lösung wird warscheinlich sein, alle DAOs in ein Bundle rein zu stecken (die Implementierung) sodass man dann nur einen TXM und eine EMF hat. Den TXM kann ich dann als Service veröffentlichen und in meinen High level Services referenzieren.

Wenn man es richtig macht hat man mit OSGi echt sehr sehr viele bundles am ende... und ich bin jetzt schon bei ca 150 (incl spring dm) und das nur beim Server :)
 
G

Gast2

Gast
Man muss halt das richtige Maß finden und nicht zu granular machen sonst wirds unübersichtlich.
Spricht ja auch nichts dagegen nur ein DAO bundle zu machen finde ich besser wie mehrere...

Kannst du den CriteriaBuilder benutzen oder bekommst du auch ne NPE?
 
G

Gelöschtes Mitglied 5909

Gast
Ich hab den ehrlich gesagt noch nicht benutzt, da mir die API irgendwie zu umständlich ist.
Kanns aber mal ausprobieren. (Hab die kommende Woche aber Urlaub)
 
G

Gast2

Gast
Ja wäre nett wenn du es mal probierst...
Ja ich find ihn gut um dynmaische standard abfragen zu machen...
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 5909

Gast
Was genau meinst du mit dynamischen standardabfragen? du kannst dir z.b. den entitynamen mit der annotation auslesen
 
G

Gast2

Gast
Ja sowas hier: Aber leider bekomm ich wie gesagt immer ne NPE be entityManager.getCriteriaBuilder()
Java:
	@Transactional(propagation = Propagation.MANDATORY, readOnly = true)
	public <T extends DBObject> List<T> like(Class<T> entityClass, Map<String, Object> criterias){
		CriteriaBuilder builder = entityManager.getCriteriaBuilder();
		CriteriaQuery<T> criteriaQuery = builder.createQuery(entityClass);
		Root<T> root = criteriaQuery.from(entityClass);
		List<Predicate> restrictions = new ArrayList<Predicate>();
		for(Map.Entry<String, Object> entry : criterias.entrySet()){
			if(entry.getValue() instanceof String){
				Path<String> path = root.get(entry.getKey());
				restrictions.add(builder.like(path, String.valueOf(entry.getValue())));	
			}else{
				restrictions.add(builder.equal(root.get(entry.getKey()), entry.getValue()));
			}
		}
		criteriaQuery.where((Predicate[]) restrictions.toArray());
		return entityManager.createQuery(criteriaQuery).getResultList();
	}
 

Noctarius

Top Contributor
Genau das HibernateDaoSupport kannst du auch nutzen, wenn du pures Hibernate nutzen magst. Ansonsten gibt es auch ein JpaDaoSupport dafür (mein ich). Damit werden dir alle Dinge automatisch injiziert.
 
G

Gast2

Gast
Genau das HibernateDaoSupport kannst du auch nutzen, wenn du pures Hibernate nutzen magst. Ansonsten gibt es auch ein JpaDaoSupport dafür (mein ich). Damit werden dir alle Dinge automatisch injiziert.

Okay muss ich mal testen... Nee ich benutz EclipseLink darum wohl kein HibernateDaoSupport ;)...
Wunder mich trotzdem noch ein bischen, dass das andere nicht geht...
 
G

Gast2

Gast
Immer noch gleiches Problem: "Normale" Abfragen gehen aber beim CriteriaBuilder holen bekomm ich ne NPE...
Java:
	@Transactional(propagation = Propagation.MANDATORY, readOnly = true)
	public <T extends DBObject> List<T> findAll(Class<T> entityClass){
		CriteriaBuilder builder = getJpaTemplate().getEntityManager().getCriteriaBuilder();
		CriteriaQuery<T> criteriaQuery = builder.createQuery(entityClass);
		return getJpaTemplate().getEntityManager().createQuery(criteriaQuery).getResultList();
	}
 
G

Gast2

Gast
Ich hab nochmal ein paar Seiten im Netz gefunden und auch paar Einträge in andere Foren gesehen.
Wenn man EMF benutzt sollte man speichern und laden über Resourcen machen
z.B. Kunde ist ein EMF Model

Java:
	public void createKunde(Kunde kunde) {
		String query = EclipseLinkURIUtil.createContentsEqualQuery(kunde.eClass(), VerwaltungPackage.eINSTANCE.getDBObject_Id(),kunde.getId());
		URI libraryURI = EclipseLinkURIUtil.createEclipseLinkURI("verwaltung",query);

		// save library model instance in database
		ResourceSet resourceSet1 = new ResourceSetImpl();
		resourceSet1.getLoadOptions().put(
				PersistenceUnitProperties.CLASSLOADER,
				this.getClass().getClassLoader());
		Resource libraryResource1 = resourceSet1.createResource(libraryURI);

		libraryResource1.getContents().add(kunde);
		try {
			libraryResource1.save(Collections.EMPTY_MAP);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println(kunde.eResource());
	}
Wie das mit Transaktionen funktioniert weiß ich noch nicht ob ich da die von Spring verwenden kann. Aber auf jeden Fall brauchen die Resourcen folgende Einträge in der persitence.xml
[XML]
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:sample;create=true" />
<property name="javax.persistence.jdbc.user" value="" />
<property name="javax.persistence.jdbc.password" value="" />
[/XML]

Das sind genau die gleichen wie in meiner spring.xml
[XML]
<bean id="dataSource" init-method="createDataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="url" value="jdbc:derby:sample;create=true" />
<property name="username" value="" />
<property name="password" value="" />
</bean>
[/XML]

Das beist doch jetzt das doppelt zu machen, hat damit schon jemand Erfahrungen gemacht? Weil ich habs jetzt raus gemacht und meine entityManagerFactory sieht nun so aus
Java:
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitName" value="verwaltung"></property>
		<property name="jpaDialect">
			<bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect"></bean>
		</property>
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"></bean>	
		</property>
	</bean>
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Ich hab nun herausgefunden, dass die Resourcen intern org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl verwenden, d.h. wenn ich wie oben meine EntityManagerFactory erstelle, hab ich 2 verschiedene EntityManagerFactory darum benutzt der TransaktionManager auch die falsche EntityManagerFactory...
Ich wollte nun den org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl injecten aber da der 2 Konstruktoren, die verschiedene objekte übergeben haben wollen, habe ich einen Wrapper gemacht. Kann ich den überhaupt benutzen???
Java:
package emf.dao.internal;

import java.util.Map;
import java.util.Properties;

import javax.persistence.Cache;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnitUtil;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.metamodel.Metamodel;

import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.eclipse.persistence.jpa.PersistenceProvider;

public class EclipseLinkEntityManager implements EntityManagerFactory{

	private EntityManagerFactory entityManagerFactory;
	private String persistenceUnitName;
	
	public void init(){
		entityManagerFactory = new PersistenceProvider().createEntityManagerFactory(persistenceUnitName, getTestPersistenceUnitProperties());
	}
	
	public Properties getTestPersistenceUnitProperties(){
		Properties properties = new Properties();
		ClassLoader classLoader = this.getClass().getClassLoader();
		properties.put(PersistenceUnitProperties.CLASSLOADER, classLoader);
		return properties;
		
	}

	@Override
	public EntityManager createEntityManager() {
		return entityManagerFactory.createEntityManager();
	}

	@Override
	public EntityManager createEntityManager(Map map) {
		return entityManagerFactory.createEntityManager(map);
	}

	@Override
	public CriteriaBuilder getCriteriaBuilder() {
		return entityManagerFactory.getCriteriaBuilder();
	}

	@Override
	public Metamodel getMetamodel() {
		return entityManagerFactory.getMetamodel();
	}

	@Override
	public boolean isOpen() {
		return entityManagerFactory.isOpen();
	}

	@Override
	public void close() {
		entityManagerFactory.close();
		
	}

	@Override
	public Map<String, Object> getProperties() {
		return entityManagerFactory.getProperties();
	}

	@Override
	public Cache getCache() {
		return entityManagerFactory.getCache();
	}

	@Override
	public PersistenceUnitUtil getPersistenceUnitUtil() {
		return entityManagerFactory.getPersistenceUnitUtil();
	}

	public void setPersistenceUnitName(String persistenceUnitName) {
		this.persistenceUnitName = persistenceUnitName;
	}

	public String getPersistenceUnitName() {
		return persistenceUnitName;
	}

	
}

[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:eek:sgi="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 class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>-->
<!-- <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />-->

<bean id="entityManagerFactory" class="emf.dao.internal.EclipseLinkEntityManager" init-method="init">
<property name="persistenceUnitName" value="default"></property>
<!--<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect"></bean>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"></bean>
</property>-->
</bean>

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

<bean id="baseDao" class="emf.dao.internal.BaseDaoEclispeLink"/>

</beans>
[/XML]

So wird die @PersistenceContext immer ignoriert:
Java:
	@PersistenceContext
	private EntityManager entityManager;

Wenn ich das bean rein mache bekomme ich eine Fehlermeldung
[XML]
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
[/XML]
Java:
Caused by: java.lang.NoClassDefFoundError: javax.persistence.criteria.CriteriaQuery

Wo liegt mein Denkfehler? Oder ist das allgemein ne dumme Idee?
 

Noctarius

Top Contributor
Benutz eine FactoryBean Implementierung. So wird das in Spring gemacht. Alternativ nehm Constructor-Injection (auch das kann Spring ;))
 
G

Gast2

Gast
Ja ich glaub wir reden aneinander vorbei ^^...

Aber des was ich vor hatte klappt eh nicht, da wie ich gesehen hab die Klasse jedes mal einen neuen EntityManager erzeugt. Also entweder ich erb von der Klasse und überschreib die Methode und lass den EntityManager von Spring injezieren oder benutz die Resource API von EMF gar nicht. Ich wollte die nur benutzen um das TrackingModification zu benutzen, aber das wird nicht unterstützt wie ich gerade sehe.

Java:
public class EclipseLinkResourceImpl extends ResourceImpl implements EclipseLinkResource 
	protected void openDatabase(Map<?, ?> options) {
		Assert.isNotNull(options);

		try {
			// entity manager factory for given persistence unit name already
			// existing?
			EntityManagerFactoryInstance entityManagerFactoryInstance;
			if (!persistenceUnitNameToEntityManagerFactoryInstanceMap.containsKey(persistenceUnitName)) {
				// create and register new entity manager factory for given persistence
				// unit name according to sessions configuration file
				Assert.isTrue(options.containsKey(PersistenceUnitProperties.CLASSLOADER), NLS.bind(
						Messages.assert_classloaderMustHavePersistenceUnit$0OnClasspath, persistenceUnitName));
				EntityManagerFactory entityManagerFactory = new PersistenceProvider().createEntityManagerFactory(
						persistenceUnitName, options);
				Assert.isTrue(entityManagerFactory != null, NLS.bind(
						Messages.assert_unableToCreateEntityManangerFactoryforPersistenceUnit$0, persistenceUnitName));
				entityManagerFactoryInstance = new EntityManagerFactoryInstance(entityManagerFactory);
				persistenceUnitNameToEntityManagerFactoryInstanceMap.put(persistenceUnitName,
						entityManagerFactoryInstance);
			} else {
				// retrieve existing entity manager factory for given persistence unit
				// name
				entityManagerFactoryInstance = persistenceUnitNameToEntityManagerFactoryInstanceMap
						.get(persistenceUnitName);
			}

			// increase EclipseLink resource instance counter for underlying entity
			// manager factory
			int count = entityManagerFactoryInstance.getResourceInstanceCount();
			count++;
			entityManagerFactoryInstance.setResourceInstanceCount(count);

			// create entity manager and begin transaction
			EntityManagerFactory entityManagerFactory = entityManagerFactoryInstance.getEntityManagerFactory();
			entityManager = entityManagerFactory.createEntityManager();
			entityManager.getTransaction().begin();
		} catch (RuntimeException exception) {
			closeDatabase();
			throw new WrappedException(exception);
		}
	}

	@Override
	public final boolean isTrackingModification() {
		return false;
	}

	@Override
	public final void setTrackingModification(boolean isTrackingModification) {
		// do nothing
	}

	@Override
	public boolean isModified() {
		return false;
	}

	@Override
	public void setModified(boolean isModified) {
		// do nothing
	}
 
G

Gast2

Gast
Echt und wie kann ich es nutzen?

Ich habe ein Objekt und würde gern in meinem RCP - Editor im isDirty anzeigen lassen,wenn sich was geändert hat, damit man speichern kann.
 

Noctarius

Top Contributor
EclipseLink macht das intern um nur Felder in der Datenbank zu ändern die auch wirklich geändert wurden. Das siehst du, wenn du dir die SQL-Statements anzeigen lässt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Ist es möglich in Spring Entity generische Listen verwenden Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Eure Erfahrungen mit Primefaces und Spring - wer managed die Beans Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data und Rest Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Amazon-SP-Api Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Aktualisiere Spring Controller Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Wann Spring Batch nutzen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
P Spring Hessian Remote Beispiel Frameworks - Spring, Play, Blade, Vaadin & Co 20
8u3631984 Spring 2.7.8 Info Enpoint nicht zuerreichen Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
Zrebna Spring - Thymeleaf: Wieso wird gem. Fallunterscheidung entsprechende View nicht geladen? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Spring UsernameNotFoundException(msg); auf der View msg ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring UsernameNotFoundException(Message) auf der View Message ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Security: Wie kommt 'UserDetails' an Username und Passwort ran? Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Spring Security: Wie den User dynamisch authentifizieren? Frameworks - Spring, Play, Blade, Vaadin & Co 8
R Spring Security: Authentication & Permissions Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
T Spring Resourcen Ordner ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring JPA und Repository Frameworks - Spring, Play, Blade, Vaadin & Co 12
D Mapstruct Dependency Injection funktioniert nicht mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 15
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Security: Run-as replacement Einsatzbereich? Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Integration - Logging Frameworks - Spring, Play, Blade, Vaadin & Co 7
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Anfänger benötigt Hilfe Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Date keine neue Tabelle fuer Attribut Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Spring Security Config File anpassen Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Spring Cloud : Resttemplate mit Loadballancer Frameworks - Spring, Play, Blade, Vaadin & Co 11
Dimax Spring resource not found Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Spring MongoDB unique index Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring WebFlux Cors konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Schöne View mit anchor scrolling in Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
Dimax Spring JPA Multiple Keys Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Security mit oauth2 in lokaler Konfiguration principal mocken Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Exception Body Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Was ist das Framework "Spring"? Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Unit/Integrations Testing Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Spring Unit Test: UnsatisfiedDependencyException: Error creating bean with name Frameworks - Spring, Play, Blade, Vaadin & Co 2
H Resource Liste Lazy Autowired Spring Context Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Java Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Security Login with Credentials Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
krgewb Spring und GWT - & wird zu & amp; Frameworks - Spring, Play, Blade, Vaadin & Co 2
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand JPA/Spring Repository Like Suche leeres Ergebnis Frameworks - Spring, Play, Blade, Vaadin & Co 0
Z Hibernate & Postgres in Spring Boot (Syntaxprobleme) Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
M Spring Initializer - Webservices Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Hateoas Frameworks - Spring, Play, Blade, Vaadin & Co 1
ma095 Spring und Postgresql Errors Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring+Vaadin App startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Request externe API SSL Error Frameworks - Spring, Play, Blade, Vaadin & Co 7
OnDemand Spring Repo speichert, aber es kommt in der DB nicht an Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Im Spring ,Mysql-Funktion aufrufen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Security/Boot/Vaadin Cookie Problem bei iFrame Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot: Feld ignorieren Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Spring + Thymleaf : Checkbox Object mappen Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Buch zum Spring Framework bzw. Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Jasypt Spring Boot HIbernate wie komme ich an den Key? Frameworks - Spring, Play, Blade, Vaadin & Co 4
8u3631984 Spring Boot im Docker Container - Logback wird nicht verwendet Frameworks - Spring, Play, Blade, Vaadin & Co 13
sascha-sphw Spring - Authentication object was not found Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Welches Spring Frontend Framework verwendet ihr und wie bzw wo ? Frameworks - Spring, Play, Blade, Vaadin & Co 7
8u3631984 Spring security - 403 bei Role Access Regel Frameworks - Spring, Play, Blade, Vaadin & Co 6

Ähnliche Java Themen

Neue Themen


Oben