Hallo zusammen,
ich möchte unter der eclipse IDE eine Anwendung mit folgendem Aufbau erstellen:
- eclipse RCP als Frontend --> equinox als OSGi Container
- eclipselink als JPA implementation (Version 2.0.1)
- Spring DM (Version 2.0.0.M1) für DI und zur Nutzung der ganzen Spring Hilfimplementationen (z.Bsp. JpaDao) (Version 3.0.2)
Dazu habe ich eine targetplatform mit den notwendigen bundles zusammengestellt und einen launcher konfiguriert.
Um den diversen import-export problemen vorzubeugen, habe ich zunächst nur 1 bundle für den Nicht-UI-Teil. In diesem sind die Domain-Klassen mit ihren JPA-Annotations, Service- und Dao-Implementationen enthalten. Weiterhin gibt es eine persistence.xml fürs eclipselink und eine context.xml für spring.
Bei der Verwendung der insert-Methode des JpaDaos für eine Entity erhalte ich folgende Fehlermeldung:
Das log gibt vorher aber aus, dass das mapping von eclipselink verarbeitet worden ist. Ich gehe daher davon aus, dass der Fehler nicht in der persistence.xml liegt.
persistence.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="LIMS" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>de.reschif.lims.common.domain.DefaultDomainObject</class>
<class>de.reschif.lims.common.domain.User</class>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="database" />
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.logging.timestamp" value="false" />
<property name="eclipselink.logging.session" value="false" />
<property name="eclipselink.logging.thread" value="false" />
</properties>
</persistence-unit>
</persistence>[/XML]
context.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<!-- post-processors for all standard config annotations -->
<context:annotation-config />
<context:load-time-weaver
weaver-class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver" />
<!-- OSGi Service-Imports -->
<osgi:reference id="dataSource" interface="javax.sql.DataSource" />
<!-- local Spring -->
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform"
value="org.eclipse.persistence.platform.database.HSQLPlatform" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver" />
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="userDao" class="de.reschif.lims.server.persistence.UserDaoImpl"
autowire="byName" />
<bean id="userService" class="de.reschif.lims.server.service.UserServiceImpl">
<property name="userDao" ref="userDao" />
</bean>
[/XML]
Über einen Tipp, was ich denn hier falsch mache würde ich mich sehr freuen.
Schönen Gruß,
Lars
ich möchte unter der eclipse IDE eine Anwendung mit folgendem Aufbau erstellen:
- eclipse RCP als Frontend --> equinox als OSGi Container
- eclipselink als JPA implementation (Version 2.0.1)
- Spring DM (Version 2.0.0.M1) für DI und zur Nutzung der ganzen Spring Hilfimplementationen (z.Bsp. JpaDao) (Version 3.0.2)
Dazu habe ich eine targetplatform mit den notwendigen bundles zusammengestellt und einen launcher konfiguriert.
Um den diversen import-export problemen vorzubeugen, habe ich zunächst nur 1 bundle für den Nicht-UI-Teil. In diesem sind die Domain-Klassen mit ihren JPA-Annotations, Service- und Dao-Implementationen enthalten. Weiterhin gibt es eine persistence.xml fürs eclipselink und eine context.xml für spring.
Bei der Verwendung der insert-Methode des JpaDaos für eine Entity erhalte ich folgende Fehlermeldung:
org.springframework.dao.InvalidDataAccessApiUsageException: Object: de.reschif.lims.common.domain.User@9de832 is not a known entity type.; nested exception is java.lang.IllegalArgumentException: Object: de.reschif.lims.common.domain.User@9de832 is not a known entity type.
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1350)
... 15 more
Das log gibt vorher aber aus, dass das mapping von eclipselink verarbeitet worden ist. Ich gehe daher davon aus, dass der Fehler nicht in der persistence.xml liegt.
[EL Config]: The access type for the persistent class [class de.reschif.lims.common.domain.DefaultDomainObject] is set to [FIELD].
[EL Config]: The access type for the persistent class [class de.reschif.lims.common.domain.User] is set to [FIELD].
[EL Config]: The alias name for the entity class [class de.reschif.lims.common.domain.DefaultDomainObject] is being defaulted to: DefaultDomainObject.
[EL Config]: The table name for entity [class de.reschif.lims.common.domain.DefaultDomainObject] is being defaulted to: DEFAULTDOMAINOBJECT.
[EL Config]: The discriminator column name for the root inheritance class [class de.reschif.lims.common.domain.DefaultDomainObject] is being defaulted to: DTYPE.
[EL Config]: The column name for element [field id] is being defaulted to: ID.
[EL Config]: The alias name for the entity class [class de.reschif.lims.common.domain.User] is being defaulted to: User.
[EL Config]: The primary key column name for the inheritance class [class de.reschif.lims.common.domain.User] is being defaulted to: ID.
[EL Config]: The foreign key column name for the inheritance class [class de.reschif.lims.common.domain.User] is being defaulted to: ID.
[EL Config]: The column name for element [field login] is being defaulted to: LOGIN.
persistence.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="LIMS" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>de.reschif.lims.common.domain.DefaultDomainObject</class>
<class>de.reschif.lims.common.domain.User</class>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="database" />
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.logging.timestamp" value="false" />
<property name="eclipselink.logging.session" value="false" />
<property name="eclipselink.logging.thread" value="false" />
</properties>
</persistence-unit>
</persistence>[/XML]
context.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<!-- post-processors for all standard config annotations -->
<context:annotation-config />
<context:load-time-weaver
weaver-class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver" />
<!-- OSGi Service-Imports -->
<osgi:reference id="dataSource" interface="javax.sql.DataSource" />
<!-- local Spring -->
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform"
value="org.eclipse.persistence.platform.database.HSQLPlatform" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver" />
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="userDao" class="de.reschif.lims.server.persistence.UserDaoImpl"
autowire="byName" />
<bean id="userService" class="de.reschif.lims.server.service.UserServiceImpl">
<property name="userDao" ref="userDao" />
</bean>
[/XML]
Über einen Tipp, was ich denn hier falsch mache würde ich mich sehr freuen.
Schönen Gruß,
Lars