我几天来一直在研究这个问题,没有解决方案。我希望在这里发布我的问题会指引我朝着正确的方向前进。我浏览了很多论坛,并且说明了我遵循的相同步骤(如下所述),但在访问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。
在Websphere JDBC / Sample上创建了一个数据源。使用DataSource上的DB凭据创建J2C身份验证。通过Container Managed authenitcation将身份验证分配给DataSource。
Web.xml条目
resource-ref
res-ref-name Sample
res-type javax.sql.DataSource
res-auth Container
res-sharing-scope Shareable
resource-ref
Ibm-web-bnd.xml条目
resource-ref name="jdbc/Sample" binding-name="java:comp/env/jdbc/Sample"
的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
Dao中的代码
eMgrFactory = Persistence.createEntityManagerFactory("samplePool");
entityMgr = eMgrFactory.createEntityManager();
entityMgr.createNativeQuery();
请注意,通过管理控制台创建数据源后,Iam能够成功测试连接。另请注意,如果我指定组件管理身份验证Iam能够通过代码访问。建议我如何通过Container Managed身份验证进行访问。
答案 0 :(得分:0)
部署后,您必须将数据源映射到您的应用程序。
答案 1 :(得分:0)
今天我能够为我的问题找到解决方案。整个问题原来是一个配置问题。很好,我能够解决。 以下是我所做的更改
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
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
我为其他人发布了解决方案。