Access DataSource导致传递Exception Null UserID并且无法创建Connection

时间:2012-08-17 20:30:53

标签: hibernate jpa nullpointerexception datasource websphere-7

我几天来一直在研究这个问题,没有解决方案。我希望在这里发布我的问题会指引我朝着正确的方向前进。我浏览了很多论坛,并且说明了我遵循的相同步骤(如下所述),但在访问Datasource时仍然遇到相同的运行时异常。

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 EE 6 Deploymnet。

  1. 在Websphere JDBC / Sample上创建了一个数据源。使用DataSource上的DB凭据创建J2C身份验证。通过Container Managed authenitcation将身份验证分配给DataSource。

  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();
    
  6. 请注意,通过管理控制台创建数据源后,Iam能够成功测试连接。另请注意,如果我指定组件管理身份验证Iam能够通过代码访问。建议我如何通过Container Managed身份验证进行访问。

2 个答案:

答案 0 :(得分:0)

部署后,您必须将数据源映射到您的应用程序。

Map resource references documentation

答案 1 :(得分:0)

今天我能够为我的问题找到解决方案。整个问题原来是一个配置问题。很好,我能够解决。 以下是我所做的更改

  1. persistence.xml文件 - 我不再从这里做DataSource直接查找。我在web.xml上查找(java:comp / env / jdbc / ds),如下所示
  2. 
    xml version="1.0" encoding="UTF-8"
    persistence 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"
            provider org.hibernate.ejb.HibernatePersistence provider
            jta-data-source java:comp/env/jdbc/ds jta-data-source
    
            shared-cache-mode ALL shared-cache-mode
    
            properties
            property name="hibernate.dialect" value="org.hibernate.dialect.DB2390Dialect"
            property name="hibernate.default_schema" value="A11"
            property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"  
            property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform"
            property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"
            properties
    
        persistence-unit
    persistence
    
    
    1. 在Web.xml中,我查找DataSource
    2.  
          resource-ref
              res-ref-name jdbc/ds res-ref-name
              lookup-name ACTUAL DATASOURCE lookup-name
              res-type javax.sql.DataSource res-type
              res-auth Container res-auth
              res-sharing-scope Shareable res-sharing-scope
          resource-ref
      

      我为其他人发布了解决方案。