30

Glassfish 3.1.2.2(ビルド5)、JPA、EclipseLink、MySQLを使用しています

Glassfish管理パネルを介してMySQLプールを作成しました。GF管理パネルからMySQLへのpingは問題ありません。

私はpersistence.xmlでアプリを作成しました:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="myUnit">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/myDBName"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="myPass"/>
        <property name="javax.persistence.ddl-generation" value="drop-and-create-tables"/>
    </properties>
</persistence-unit>

デプロイしようとしましたが、エラーが発生しました:

Invalid resource : jdbc/__default__pm

[#|2012-11-16T02:20:59.480+0400|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=43;_ThreadName=Thread-2;|Invalid resource : jdbc/__default__pm
java.lang.RuntimeException: Invalid resource : jdbc/__default__pm

GFログのスタックトレースは巨大です。によって開始

at com.sun.enterprise.connectors.ConnectorRuntime.lookupDataSourceInDAS(ConnectorRuntime.java:540)
at com.sun.enterprise.connectors.ConnectorRuntime.lookupPMResource(ConnectorRuntime.java:469)
at org.glassfish.persistence.common.PersistenceHelper.lookupPMResource(PersistenceHelper.java:63)
at org.glassfish.persistence.jpa.ProviderContainerContractInfoBase.lookupDataSource(ProviderContainerContractInfoBase.java:71)
....

誰かが何が起こったのか、何をすべきかについての考えを持っていますか?

4

8 に答える 8

27

MySQL 接続プールのみを作成した場合は、JDBC リソースも作成する必要があります。これは、接続プールの作成に使用したものの上にあるコンテキスト メニューから作成できます。

Glassfish jdbc リソースの設定例

私の Glassfish、私の JDBC リソースでは、jdbc/__default は接続プール mysql_lemon を使用しています。

于 2012-11-16T01:19:16.333 に答える
6

__nontx と __pm はプールの拡張機能です。ドキュメント: https://docs.oracle.com/cd/E19798-01/821-1752/beamr/index.html (別の場所http://docs.oracle.com/cd/E26576_01/doc.312/e24930/ jdbc.htm#GSDVG00185およびhttp://docs.oracle.com/cd/E26576_01/doc.312/e24930/transaction-service.htm#GSDVG00512 )

最初の__pm

https://docs.oracle.com/cd/E19798-01/821-1752/gavro/index.htmlから

コンポーネント以外の呼び出し元を許可する

サーブレット フィルタ、ライフサイクル モジュール、サード パーティの永続マネージャなど、Java-EE 以外のコンポーネントがこの JDBC 接続プールを使用できるようにすることができます。返された接続は、トランザクション マネージャーから取得したトランザクション コンテキストに自動的に登録されます。標準の Java EE コンポーネントもこのようなプールを使用できます。非コンポーネントの呼び出し元によって取得された接続は、コンテナーによるトランザクションの終了時に自動的に閉じられません。呼び出し元が明示的に閉じる必要があります。

次の方法で、非コンポーネントの呼び出し元を有効にできます。

Administration Console の [接続プールの詳細属性の編集] ページで、[非コンポーネントの呼び出し元を許可] チェックボックスをオンにします。デフォルトは false です。詳細については、管理コンソールの [ヘルプ] ボタンをクリックしてください。

asadmin create-jdbc-connection-pool コマンドに ----allownoncomponentcallers オプションを指定します。詳細は、『Oracle GlassFish Server 3.0.1 リファレンス・マニュアル』を参照してください。

asadmin setコマンドにallow-non-component-callersオプションを指定してください。例えば:

asadmin set domain1.resources.jdbc-connection-pool.DerbyPool.allow-non-component-callers=true

詳細は、『Oracle GlassFish Server 3.0.1 リファレンス・マニュアル』を参照してください。

__pm サフィックスを持つ JDBC リソースを作成します。

および__nontx

https://docs.oracle.com/cd/E19798-01/821-1752/beamu/index.htmlから

非トランザクション接続の使用

非トランザクション データベース接続は、次のいずれかの方法で指定できます。

Administration Console の [新しい JDBC 接続プール] ページまたは [接続プールの編集] ページで、[非トランザクション接続] ボックスをオンにします。デフォルトはオフです。詳細については、管理コンソールの [ヘルプ] ボタンをクリックしてください。

asadmin create-jdbc-connection-pool コマンドに ----nontransactionalconnections オプションを指定します。詳細は、『Oracle GlassFish Server 3.0.1 リファレンス・マニュアル』を参照してください。

asadmin setコマンドにnon-transactional-connectionsオプションを指定してください。例えば:

asadmin set domain1.resources.jdbc-connection-pool.DerbyPool.non-transactional-connections=true

詳細は、『Oracle GlassFish Server 3.0.1 リファレンス・マニュアル』を参照してください。

getNonTxConnection メソッドを提供する GlassFish サーバーの DataSource 実装を使用します。このメソッドは、どのトランザクションのスコープにも含まれていない JDBC 接続を取得します。2 つのバリエーションがあります。

public java.sql.Connection getNonTxConnection() が java.sql.SQLException をスローする

public java.sql.Connection getNonTxConnection(String user, String password) が java.sql.SQLException をスローする

__nontx で終わる JNDI 名のリソースを作成します。これにより、このリソースを使用してルックアップされたすべての接続が強制的に非トランザクションになります。

于 2015-08-20T11:32:48.823 に答える
4

(私の同じポストですが、今は適切なアカウントがあります):

セットアップで永続性を構成する場合は、persistence.xmlでJDBCプールのJNDI名のみを設定します。オプションで、ターゲットデータベース名を設定できます。

<persistence-unit name="foo" transaction-type="JTA">
    <jta-data-source>jdbc/mysql</jta-data-source>
    <!--optional-->
    <property name="eclipselink.target-database" value="MySQL4"/>
</persistence-unit>

また、「drop-and-create-table」を「create-tables」に変更して、データが失われないようにすることをお勧めします。これにより、EclipseLinkのプロパティが次のように提供されます。

<property name="eclipselink.ddl-generation" value="create-tables"/>

そしてまた便利

<property name="eclipselink.ddl-generation.output-mode" value="both"/>

スキーマとSQLスクリプトを作成します。

詳細については、http://wiki.eclipse.org/EclipseLink/Examples/JPA/DDL またはhttp://docs.oracle.com/cd/E19798-01/821-1752/gbwmj/index.htmlをご覧ください。

于 2012-11-15T23:17:54.123 に答える
3

私も同じ問題を抱えていました。

解決策(まだこの問題を抱えている人向け):

  1. Glassfish 4.1.1 で NetBeans IDE 8.1 を使用している場合は、Glassfish 4.1 に変更することをお勧めします。

  2. NetBeans の左側のパネルに移動します。

をクリックしてservices > server > glassfishから (Glassfish サーバーで) 右クリックし、[ドメイン管理コンソールの表示] を選択すると、Web ページが表示されます。

左に移動して、 と を選択resources > JDBCしますJDBC connection pool

をクリックして新しい接続プールを追加し、newプールの名前を入力します。

次に、javax.sql.ConnectionPoolDataSourcedatadriver(私の場合は MySQL) を選択し、[次へ] をクリックします。

その後、データベースに必要なすべての情報を入力する必要があります。

  1. に戻りResources > JDBCます。今回はJDBC Resources、新しい JDBC リソースを作成します (私は という名前を付けましたjdbc/test)。作成済みの接続プールとリンクすることを忘れないでください。

  2. NetBeans でejbプロジェクトに移動し、persistence.xmlファイルを変更します。datasourceをデータベース リソース (私の場合は) に変更し、jdbc/testすべて保存します。

それはうまくいくはずです。

于 2016-04-15T23:20:11.853 に答える
1

netbeans インストールウィザードによって作成されたサーバーでアプリを実行/展開すると、同じ問題が発生しました。

解決するために、公式サイトから最新のglassfishバージョンをダウンロードし、Netbeans>「サービスのタブ」>「サーバー」>「サーバーの追加...」に移動しました。

プロジェクト構成を変更して、新しい Glassfish サーバー インスタンスを使用することを忘れないでください。

于 2014-04-08T19:03:23.053 に答える