Bitronix + Spring + Hibernate + Persistenz
Ich versuche zu erstellen Transaktions-manager und verwenden Sie es mit Hibernate Oracle.
Meine persistence.xml Datei:
<persistence-unit name="org.drools.persistence.jpa"
transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/testDS1</jta-data-source>
<class>org.drools.persistence.session.SessionInfo</class>
<class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
<class>org.drools.persistence.processinstance.WorkItemInfo</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.connection.autocommit" value="false" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.jndi.class" value="bitronix.tm.jndi.BitronixInitialContextFactory"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.BTMTransactionManagerLookup" />
</properties>
</persistence-unit>
In applicationContext.xml von Frühjahr habe ich Hinzugefügt:
<bean id="dataSource" class="bitronix.tm.resource.jdbc.PoolingDataSource" init-method="init" destroy-method="close">
<property name="className" value="oracle.jdbc.xa.client.OracleXADataSource" />
<property name="uniqueName" value="jdbc/testDS1" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="5" />
<property name="driverProperties">
<props>
<prop key="URL">myURL</prop>
<prop key="user">username</prop>
<prop key="password">password</prop>
</props>
</property>
</bean>
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="bitronixTransactionManager"/>
<property name="userTransaction" ref="bitronixTransactionManager"/>
</bean>
<bean id="bitronixTransactionManager" factory-method="getTransactionManager"
class="bitronix.tm.TransactionManagerServices" depends-on="dataSource,txManager"
destroy-method="shutdown"/>
Allerdings, wenn ich ausführen:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
Bekomme ich eine exception:
Caused by: org.hibernate.HibernateException: Could not find datasource: jdbc/testDS1
Ausnahme ist auf ds = (DataSource ) NamingHelper.getInitialContext(props).lookup(jndiName);
Ruhezustand infra-Datei.
- Was das problem sein könnte?
- Wie funktioniert der Hibernate-Persistenz-weiß beziehen sich auf das Frühjahr
txManager
bean?
InformationsquelleAutor Dejell | 2011-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Persistenz-provider, hat seine jndi-lookups auf. Datenquellen definiert, die im Frühjahr Anwendungskontext sind nicht verpflichtet, jndi. Also, Persistenz-provider lookup-Versuch für die Datenquelle schlägt fehl, da es keine Datenquelle gebunden jndi.
Möchten Sie vielleicht zu prüfen,http://forum.springsource.org/showthread.php?t=13984.
Können Sie versuchen, die Definition Ihrer Datenquellen im server-Kontext und Suche Sie in der spring-Anwendung, die von Ihren jndi-Namen?
InformationsquelleAutor mcyalcin
Sieht aus wie Ihre datasource noch nicht erstellt wurden, wenn die Persistenz.createEntityManagerFactory() aufgerufen wird. Da Ihr bitronixTransactionManager bean ist von der dataSource abhängig ist, sollten Sie sehen, einige INFO-log-erzählen Sie BTM hat begonnen, das soll bedeuten, dass die Datenquelle erstellt wurde zu.
Ein weiterer potenzieller Grund dafür könnte sein, dass Hibernate nicht-lookup die Datenquelle, in der rechten den JNDI-Kontext. Sie ermöglichen könnte, bitronix.tm.jndi-DEBUG-Protokolle zu behaupten, dass seine JNDI-provider wird immer genannt.
Wieder: ein Weiterer potenzieller Grund dafür könnte sein, dass Hibernate nicht-lookup die Datenquelle, in der rechten den JNDI-Kontext. Sie ermöglichen könnte, bitronix.tm.jndi-DEBUG-Protokolle zu behaupten, dass seine JNDI-provider wird immer genannt.
InformationsquelleAutor Ludovic Orban
Sind Sie in der Lage zu konsumieren, wird diese Datenquelle in eine eigenständige java-Anwendung, indem Sie
jdbc/testDS1
? In regelmäßigen Tomcat-DataSources, müssten Sie zu bitten, fürjava:comp/env/jdbc/testDS1
, nicht nurjdbc/testDS1
.Nicht. Sie sagen, dies zu Überwintern:
So, Hibernate verwenden der lookup-Klasse, gut, "lookup" der Transaktions-manager 🙂
InformationsquelleAutor jpkrohling
Sind Sie zur Bereitstellung dieses als eine war-oder EAR? Haben Sie deklarieren Sie die Datenquelle in Ihrem web.xml und stellen Sie es auf den app-server?
UPDATE: Da haben Sie erklärt, die Datenquelle in den KRIEG, stellen Sie sicher, Sie haben einrichten die JNDI-Datenquelle in Tomcat.
Ihre Fehler, sagt: "Caused by: org.hibernate.HibernateException: Konnte nicht finden, Datenquelle: jdbc/testDS1". Das ist ein JNDI-lookup-name.
Also wo steht "ich will nicht" passen in diese?
Frühjahr muss eine Java Naming und Directory service zum Auffinden der Daten-Quelle, die mit diesem Namen verknüpft; das ist es, was Tomcat bietet. Wenn Sie nicht Tomcat, wo schlagen Sie vor, dass der Frühling es bekommen? Der naming service ist ein Teil der Java-EE-app-server.
Müssen Sie entweder legen Sie die JNDI-Datenquelle und connection pool des Tomcat-ODER verzichten Sie auf die Vorteile, die es bietet, und erzählen Frühjahr zu verwenden DriverManagerDataSource statt:
http://static.springsource.org/spring/docs/2.5.x/reference/jdbc.html
Warum muss ich die JNDI-Daten mit tomcat, wenn ich arbeite, mit Feder?
Naja, eigentlich ist das für mich funktioniert. was nicht funktioniert ist :DataSource ds = (DataSource) ic.lookup("java:comp/UserTransaction"); das funktioniert, wenn ich es konfiguriert mit tomcat. Auch ich benutze nicht die Quelle direkt
so in Ihre Antwort Sie werden tatsächlich zu sagen, dass ich tomcat konfigurieren und Frühjahr zusammen, um zu bekommen "java:comp/UserTransaction" jndi?
Ich fürchte, dass der Frühling die Dokumentation sagt etwas anderes <p><b>Für typische JTA-Transaktionen (ERFORDERLICH, UNTERSTÜTZT, verpflichtet, NIE), eine Ebene JtaTransactionManager definition ist alles, was Sie brauchen, komplett portabel auf allen J2EE-Servern.Dies entspricht der Funktionalität der JTA-UserTransaction, für die J2EE spezifiziert eine standard-JNDI-name ("java:comp/UserTransaction"). Es gibt keine Notwendigkeit zu konfigurieren, dass ein server-spezifische TransactionManager-lookup für diese 79 * Art der JTA-Nutzung. Lesen Sie mehr: kickjava.com/src/org/springframework/transaction/jta/...
InformationsquelleAutor duffymo
Ich glaube, ich habe ein ähnliches Szenario ausgeführt. Meine persistence.xml ist wie folgt:
Und die spring-Anwendung bean xml-Datei ist wie:
Hoffe, das hilft!
InformationsquelleAutor Lucas de Oliveira
Ich denke, entweder ist die persistence.xml wurde nicht configered richtig oder Sie haben nicht gestartet, bis die Feder container.
hier poste ich meine persistence.xml code
und mein Test-code:
transaction manager config ist die gleiche wie du gepostet hast.
das es funktionieren kann.
InformationsquelleAutor Scarlett