Glassfish 3.1.2.2(ビルド5)、JPA、EclipseLink、MySQLを使用します
Glassfish管理パネルを使用してMySQLプールを作成しました。 GF adminパネルは大丈夫です。
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
Stacktrace in 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)
....
誰が何が起こったのか、何をすべきかを知っていますか?
MySQL接続プールのみを作成した場合は、JDBCリソースも作成する必要があります。これは、接続プールの作成に使用したものの上にあるコンテキストメニューから作成できます。
私のGlassfishでは、JDBCリソースjdbc/__ defaultは接続プールmysql_lemonを使用しています。
__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
from 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
from https://docs.Oracle.com/cd/E19798-01/821-1752/beamu/index.html
非トランザクション接続の使用
以下のいずれかの方法で、非トランザクションデータベース接続を指定できます。
Administration Consoleの[新しいJDBC接続プール]または[接続プールの編集]ページの[非トランザクション接続]ボックスをオンにします。デフォルトはオフです。詳細については、Administration Consoleの[ヘルプ]ボタンをクリックしてください。
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 ServerのDataSource実装を使用します。このメソッドは、トランザクションのスコープ内にないJDBC接続を取得します。 2つのバリアントがあります。
public Java.sql.Connection getNonTxConnection()throws Java.sql.SQLException
public Java.sql.Connection getNonTxConnection(String user、String password)throws Java.sql.SQLException
末尾が__nontxのJNDI名でリソースを作成します。これにより、このリソースを使用してルックアップされたすべての接続が強制的に非トランザクションになります。
(私の同じ投稿ですが、今は適切なアカウントを持っています):
セットアップで永続性を設定する場合、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
同じ問題がありました。
解決策(この問題が解決しない場合):
services > server > glassfish
]をクリックしてから(Glassfishサーバーで)右クリックして[ドメイン管理コンソールの表示]を選択すると、Webページが表示されます。左側に移動して、resources > JDBC
およびJDBC接続プールを選択します。 new
をクリックして新しい接続プールを追加し、プールの名前を入力します。次に、javax.sql.ConnectionPoolDataSource
とdatadriver
(私の場合はMySQL)を選択して、[次へ]をクリックします。その後、データベースに必要なすべての情報を入力する必要があります。Resources > JDBC
に戻ります。今回、JDBCリソースは新しいJDBCリソースを作成します(私にとっては、jdbc/test
と名付けました)。作成済みの接続プールとリンクすることを忘れないでください。ejb
プロジェクトに移動し、persistence.xml
ファイルを変更します。 datasource
をデータベースリソース(私の場合はjdbc/test
)に変更し、すべて保存します。うまくいくはずです(y)。
Netbeans instalattionウィザードで作成されたサーバーでアプリを実行/デプロイするときに同じ問題が発生しました。
解決するために、公式サイトから最新のglassfishバージョンをダウンロードして、次の場所に移動しました:Netbeans> "Service's Tab"> "Servers"> "Add Server ..."。
新しいglassfishサーバーインスタンスを使用するようにプロジェクト構成を変更することを忘れないでください。
これは 彼らが修正したと言っているNetBeansのバグ が原因である可能性がありますが、そうではなかったようです。解決策として、glassfish-resources.xml
を完全に削除し(persistence.xml
を何らかの回避策で選択できなかったため)、代わりに@DataSourceDefinition
アノテーションを使用しました。
私の設定では、DataSourceBean.Java
に個別の@DataSourceDefinition
ファイルを使用しています。
@Singleton
@Startup
@DataSourceDefinition(name="Java:global/jdbc/myDataSource",
className="com.Microsoft.sqlserver.jdbc.SQLServerDataSource",
url="jdbc:sqlserver://127.0.0.1:1433;databaseName=myDB",
user="myuser",
password="mypassword"
)
public class DataSourceBean {
}
persistence.xml
は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="myUnit" transaction-type="JTA">
<jta-data-source>Java:global/jdbc/myDataSource</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>
この問題が発生しました。管理コンソールでjdbc接続プールとjdbcリソースを設定しました。しかし、persistence.xmlでデータソースを設定しませんでした。
<persistence-unit name="OnlinePrintService-warPU" transaction-type="JTA">
<jta-data-source>jdbc/your-name</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>