JPA Jboss 7 - Spring - Benutzung von Jboss TransactionManager

Diskutiere Jboss 7 - Spring - Benutzung von Jboss TransactionManager im Data Tier Forum; Hi! Benutze folgende relevante Technologien: Jboss 7.1.1 (Applikation läuft dann in einem Cluster), Hibernate 3.6.9, Spring 3.0.1. Aktuell...

  1. y0dA
    y0dA Neues Mitglied
    Hi!
    Benutze folgende relevante Technologien: Jboss 7.1.1 (Applikation läuft dann in einem Cluster), Hibernate 3.6.9, Spring 3.0.1.

    Aktuell verhält es sich so dass ich eine Datasource am JBoss definiert habe und selbige mittels JNDI in der applicationContext.xml anspreche sowie einen TransactionManager definiere

    applicationContext.xml:
    Code (Java):

            <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="${database.jndi.path}" />
            </bean>

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

        <bean id="entityManagerFactory"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="persistenceUnitName" value="myDb" />
            <property name="dataSource" ref="dataSource" />
            <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml" />
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                    <property name="databasePlatform" value="org.hibernate.dialect.SQLServerDialect" />
                    <property name="showSql" value="false" />
                    <property name="generateDdl" value="false" />
                </bean>
            </property>
        </bean>
     
    persistence.xml:
    Code (Java):

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"      
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             version="2.0"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
             http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    >
      <persistence-unit name="xxx" transaction-type="RESOURCE_LOCAL">
      <!-- a lot of <class>com.MyClass</class> -->
       <properties>
            <property name="jboss.as.jpa.managed" value="false"/>
            <property name="hibernate.dialect"
            value="org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect"/>
        </properties>
    </persistence-unit>
     
    Soweit so gut bzw. funktioniert das Ganze. Jetzt würde ich aber noch gerne den TransactionsManager vom JBoss benutzen und das bekomme ich einfach nicht hin. Was muss ich hierbei alles berücksichtigen?

    Meine Gedanken dazu:
    -) Die Bean 'entityManagerFactory' aus der applicationContext.xml entfernen/löschen.
    -) In der applicationContext.xml folgendes hinzufügen: <tx:jta-transaction-manager/>.
    -) In der persistence.xml von 'RESOURCE_LOCAL' auf 'JTA' (ist default) umstellen. (Es ist ja wohl unerläßlich auf JTA umzustellen oder?).
    -) Muss ich dann auch im JBoss die Datasource als XA Datasource definieren (aktuell nicht der Fall obwohl der Driver es könnte)?
    -) In der persistence.xml das property jboss.as.jpa.managed" auf true (ist default) setzen?
    -) Muss ich dann nicht auf noch den TransactionManager am JBoss definieren und/oder in der applicationContext.xml irgendwie (JNDI?) setzen?

    Bitte um Unterstützung komme hier nicht weiter :(
     
    Zuletzt bearbeitet: 9. Jan. 2013
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. JimPanse
    JimPanse Neues Mitglied
  4. y0dA
    y0dA Neues Mitglied
    Ok nach diverses Hinweisen hab ich nun die applicationContext.xml sowie die persistence.xml angepasst:

    Code (Java):

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
        <persistence-unit name="my_unit" transaction-type="JTA">

            <properties>
                <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/my_unit" />

                <property name="hibernate.dialect"
                    value="org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect" />
            </properties>
        </persistence-unit>
    </persistence>
     
    applicationContext.xml:

    Code (Java):

            <jee:jndi-lookup id="my_unit" jndi-name="java:jboss/my_unit" />
       
       
        <tx:jta-transaction-manager/>


        <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="${database.jndi.path}" />
        </bean>
     
    Dann bekomme ich beim deployen folgende Fehlermeldung:
    Code (Text):

    aused by: javax.persistence.PersistenceException: [PersistenceUnit: my_unit] Unable to build EntityManagerFactory
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
        at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
        ... 3 more
    Caused by: org.hibernate.HibernateException: Dialect class not found: org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect
        at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:76)
        at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:64)
        at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:176)
        at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:71)
        at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2270)
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2266)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1735)
        at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
        ... 9 more
    Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect]
        at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:141)
        at org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:73)
        ... 20 more
    Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect
        at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$1.findClass(ClassLoaderServiceImpl.java:99)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306) [rt.jar:1.6.0_32]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247) [rt.jar:1.6.0_32]
        at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:138)
        ... 21 more
     
    Im .war sind folgende Hibernate Jars enthalten:
    hibernate-commons-annotations-3.2.0.Final.jar
    hibernate-core-3.6.9.Final.jar
    hibernate-entitymanager-3.6.9.Final.jar
    hibernate-jpa-2.0-api-1.0.1.Final.jar
    hibernate-spatial-1.1.1.jar
    hibernate-spatial-sqlserver-1.1.1.jar
    hibernate-validator-4.2.0.Final.jar
     
    Zuletzt bearbeitet: 10. Jan. 2013
  5. JimPanse
    JimPanse Neues Mitglied
  6. y0dA
    y0dA Neues Mitglied
    Hmm.. Entschuldige mein Unwissen aber wofür ist dieses Modul bzw. was sollte das an dem Error ändern? Du meinst das aktuell die jars die im .war liegen nicht beim Erstellen der Factory "herangezogen"/gefunden werden und ich sie deshalb als Module am JBoss ablegen sollte? Hier kommt ja echt eins zum anderen.. Oder gehts darum dass der JBoss eigentlich Hibernate 4 "voraussetzt" bzw. selbige JArs "besitzt"?

    Zu Testzwecken habe ich den dialect mal auf 'org.hibernate.dialect.SQLServerDialect' geändert und nun bekomme ich folgende Fehlermeldung:

    Code (Text):

    Caused by: javax.persistence.PersistenceException: [PersistenceUnit: myUnit] Unable to build EntityManagerFactory
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
        at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
        ... 3 more
    Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:187)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:150)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
        at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:234)
        at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:91)
        at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:71)
        at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2270)
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2266)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1735)
        at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
        ... 9 more
    Caused by: org.hibernate.HibernateException: Could not instantiate connection provider [org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider]
        at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:190)
        at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:112)
        at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:54)
        at org.hibernate.service.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:69)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:177)
        ... 22 more
    Caused by: java.lang.ClassCastException: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider cannot be cast to org.hibernate.service.jdbc.connections.spi.ConnectionProvider
        at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:187)
        ... 26 more
     
    Ziemliches Drama das Ganze..
     
    Zuletzt bearbeitet: 10. Jan. 2013
  7. JimPanse
    JimPanse Neues Mitglied
  8. y0dA
    y0dA Neues Mitglied
    Kann die oben schon erwähnte ClassCastException
    Code (Java):
    Caused by: java.lang.ClassCastException: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider cannot be cast to org.hibernate.service.jdbc.connections.spi.ConnectionProvider
        at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:187)
        ... 26 more
    daher rühren dass sich nun meine hibernate 3 jars mit den hibernate 4 jars am jboss "beissen"?
     
  9. JimPanse
    JimPanse Neues Mitglied
    Ohne es getestet zu haben aber wenn ich die Doku richtig verstanden habe wird der JBoss die jar's in dem war ignorieren und die Default Hibernate Implementierung verwenden.
     
  10. y0dA
    y0dA Neues Mitglied
    Gut das erklärt dann zumindest warum der Spatial Dialekt nicht gefunden werden kann, am besten ich mach mal das Module und teste oder migriere auf Hibernate 4..

    Aber würde das nicht auf bedeuten dass der Jboss aktuell auch schon die Hibernate Jars vom .war ignoriert hat? Warum gabs dann bisher keine Probleme?
     
    Zuletzt bearbeitet: 10. Jan. 2013
Die Seite wird geladen...

Jboss 7 - Spring - Benutzung von Jboss TransactionManager - Ähnliche Themen

Maven / Spring + JBoss - HelloWorld
Maven / Spring + JBoss - HelloWorld im Forum Allgemeines EE
JBoss Seam 2.2 und Integration meiner Spring-Beans
JBoss Seam 2.2 und Integration meiner Spring-Beans im Forum Application Tier
Spring - Leichtgewichtiger als JBoss?
Spring - Leichtgewichtiger als JBoss? im Forum Application Tier
JBoss Seam - Spring
JBoss Seam - Spring im Forum Application Tier
JBoss Lizenz
JBoss Lizenz im Forum IDEs und Tools
Thema: Jboss 7 - Spring - Benutzung von Jboss TransactionManager