1

私はこの問題に数日から取り組んできましたが、解決策はありません。ここに質問を投稿することで、正しい方向に進むことができれば幸いです。私は多くのフォーラムを閲覧し、すべてが私が従ったのと同じ手順を述べました(以下に述べられています)、それでもデータソースへのアクセスで同じ実行時例外が発生します。

Exception - 
org.hibernate.exception.SQLGrammarException: Could not open connection
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
Caused by: java.sql.SQLNonTransientException: [jcc][t4][10205][11234][4.11.88] Null userid is not supported. ERRORCODE=-4461, SQLSTATE=42815 DSRA0010E: SQL-Status = 42815, Fehlercode = -4'461
at com.ibm.db2.jcc.am.gd.a(gd.java:676)

環境-Hibernate、JPA 2.0、DB2、Websphere 8.0、RAD、Java EE6Deploymnet。

  1. Websphere JDBC/Sampleにデータソースを作成しました。データソースのDBクレデンシャルを使用してJ2C認証を作成しました。コンテナ管理認証を介してデータソースに認証を割り当てました。

  2. Web.xmlエントリ

    resource-ref
    res-ref-name Sample
    res-type javax.sql.DataSource
    res-auth Container
    res-sharing-scope Shareable
    resource-ref
    
  3. Ibm-web-bnd.xmlエントリー

    resource-ref name="jdbc/Sample" binding-name="java:comp/env/jdbc/Sample" 
    
  4. Persistence.xml

    persistence-unit name="samplePool" transaction-type="JTA"
    provider org.hibernate.ejb.HibernatePersistence
    jta-data-source jdbc/Sample
    properties
    property name="hibernate.transaction.manager_lookup_class"         value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
    property name="hibernate.dialect" value="org.hibernate.dialect.DB2390Dialect"
    properties
    persistence-unit
    persistence
    
  5. Dao内のコード

     eMgrFactory = Persistence.createEntityManagerFactory("samplePool");
     entityMgr = eMgrFactory.createEntityManager();
     entityMgr.createNativeQuery();
    

管理コンソールを介してデータソースを作成した後、接続を正常にテストできることに注意してください。また、コードを介してアクセスできるコンポーネント管理認証Iamを指定する場合にも注意してください。コンテナ管理認証を介してアクセスする方法をアドバイスします。

4

2 に答える 2

0

今日、私は自分の質問に対する解決策を見つけることができました。問題全体が構成の問題であることが判明しました。解決できて良かったです。以下は私が行った変更です

  1. persistence.xml ファイル - ここから DataSource を直接参照することはもうありません。このようにweb.xmlで(java:comp/env/jdbc/ds)を検索します
xml バージョン="1.0" エンコーディング="UTF-8"
持続性 xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation= "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    persistence-unit name="dataPool" transaction-type="JTA"
        プロバイダー org.hibernate.ejb.HibernatePersistence プロバイダー
        jta-data-source java:comp/env/jdbc/ds jta-data-source

        共有キャッシュ モード ALL 共有キャッシュ モード

        プロパティ
        プロパティ名="hibernate.dialect" 値="org.hibernate.dialect.DB2390Dialect"
        プロパティ名="hibernate.default_schema" 値="A11"
        プロパティ名="hibernate.transaction.manager_lookup_class" 値="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"  
        プロパティ名="hibernate.transaction.jta.platform" 値="org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform"
        プロパティ名="hibernate.temp.use_jdbc_metadata_defaults" 値="false"
        プロパティ

    持続性ユニット
持続性

  1. Web.xml で DataSource を検索します
 
    リソース参照
        res-ref-name jdbc/ds res-ref-name
        ルックアップ名 ACTUAL DATASOURCE ルックアップ名
        res-type javax.sql.DataSource res-type
        res-auth コンテナー res-auth
        res-sharing-scope 共有可能な res-sharing-scope
    リソース参照

他の人のために解決策を投稿します。

于 2012-09-03T08:27:39.903 に答える
0

デプロイ後、データソースをアプリケーションにマップする必要があります。

マップ リソース リファレンス ドキュメント

于 2012-08-17T20:56:30.473 に答える