5

OpenJPA の場合、persistence.xml でユーザー名とパスワードを指定せずに jta_datasource で JNDI 接続を指定するにはどうすればよいですか? jndi の persistence.xml ファイルにユーザー名とパスワードが指定されていないと、エラーが発生します。

4

3 に答える 3

1

jta-data-sourcepersistence.xmlの要素を使用してみてください。

<jta-data-source>java:comp/env/jdbc/FooBarDataSourceJNDI</jta-data-source>
于 2012-11-19T18:48:21.353 に答える
1

素晴らしい質問です。これは、OpenJPA のドキュメントでは十分にカバーされていません。必要なことは、「openjpa.ConnectionFactoryName」プロパティーに特別な「java:comp/env/...」構文を使用して、OpenJPA に JNDI から接続パラメーターを取得するように要求することです。たとえば、persistence.xml は次のようになります。

<?xml version="1.0"?>
<persistence>
  <persistence-unit name="openjpa">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>tutorial.Animal</class>
    <class>tutorial.Dog</class>
    <class>tutorial.Rabbit</class>
    <class>tutorial.Snake</class>
    <properties>
      <property name="openjpa.ConnectionFactoryName" value="java:comp/env/jdbc/myjndi"/>
      <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
    </properties>
  </persistence-unit>
</persistence>

これにより、コンテナーから「myjndi」という名前の jndi リソースが要求されます。Tomcat を使用している場合、context.xml は次のようになります。

<?xml version='1.0' encoding='UTF-8'?>
<Context>
    <Resource name="jdbc/myjndi"
        auth="Container"
        scope="Shareable"
        type="javax.sql.DataSource"
        maxActive="100"
        maxIdle="30"
        maxWait="10000"
        removeAbandoned="true"
        username="username"
        password="password"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/DBNAME?characterEncoding=UTF-8"
        />
</Context>

データベースの必要に応じて、上記の JNDI パラメータを変更します。

于 2012-11-18T23:22:56.210 に答える
0

コードによる構成は私にとってはうまくいきました:

Map<String, String> conf = new HashMap<>();
conf.put("javax.persistence.jtaDataSource", "java:comp/env/jdbc/myjndi");
return getEntityManagerFactory().createEntityManager(conf);

私はpersistence.xmlまだ適切な場所に配置していないと思います。

于 2017-02-02T22:10:42.660 に答える