0

早い段階で、JPAを使用してアプリケーション用のORMを開発しました。peristenc.xmlで、Hibernateプロバイダーを定義し、Non-JTA-DataSourceを使用しました。JPAはHibernateプロバイダーなしで実行できます。??? 次に、persistence.xmlで休止状態のコードを省略します。次に、デプロイしました。コンソールで、次の情報を取得しています。

 18:19:56,028 INFO  [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (MSC service thread 1-6) HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
    18:19:56,032 INFO  [org.hibernate.dialect.Dialect] (MSC service thread 1-6) HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
    18:19:56,033 INFO  [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (MSC service thread 1-6) HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactor

しかし、休止状態については、アプリのどこにも言及していません。

****persistence.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="StudentManagementSystem" transaction-type="RESOURCE_LOCAL">
        <non-jta-data-source>java:jboss/datasources/studentDS</non-jta-data-source>
        <class>com.dms.entity.student.StudentDetail</class>
        <class>com.dms.entity.student.MarkDetail</class>
        <class>com.dms.entity.student.PRDSemesterDetail</class>
        <class>com.dms.entity.admin.LoginDetail</class>
    </persistence-unit>
</persistence>

*非JTA-データソース*

<datasource jndi-name="java:jboss/datasources/studentDS" pool-name="studentDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:mysql://localhost:3306/exercise</connection-url>
                    <driver>com.mysql</driver>
                    <security>
                        <user-name>student</user-name>
                        <password>student</password>
                    </security>
                </datasource>
<driver name="com.mysql" module="com.mysql">
                        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlDataSource</xa-datasource-class>
                    </driver>
4

2 に答える 2

2

アプリケーションをJBossで実行しており、HibernateはJBossのデフォルトの永続性プロバイダーです。仕様に記載されているように、persistence.xmlでは永続性プロバイダーはオプションです。この場合、コンテナー(JBoss)はデフォルトのプロバイダーを使用します。

于 2012-09-25T15:02:58.143 に答える
1

はい、できます。これをpersistence.xmlに入れて、使用するJPAプロバイダーを指定できます。

<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
  <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  ...
</persistence-unit>

この例では、プロバイダーとしてeclipse-linkを使用しています。これを機能させるには、クラスパスにプロバイダー固有のjarが必要です(eclipse-link、openJPA、hibernate、iBatisなど)。

表示されるメッセージは、サーバーにすでに休止状態の実装がバンドルされているためです。これがデフォルトとして採用されていますが、適切なプロバイダーを設定するだけで、必要な実装を使用できるはずです。

ただし、JPAは実装ではなく、永続性の定義にすぎないため、プロバイダーなしでJPAを実行することはできません。

于 2012-09-25T19:54:21.253 に答える