wsad5.0连接as/400的db2数据库出错,请各位高手帮忙,急!
我在window server2000下安装wsad5.0,配置数据源,(as/400是局域网中的另一台机器)1、选的是:DB2 UDB for iSeries (Toolbox XA)
实现类名:com.ibm.as400.access.AS400JDBCXADataSource
用的驱动是jt400.jar
配置好数据源后连接报错:
61e4f531 FreePool E J2CA0046E: 为资源 jdbc/ds1 创建 ManagedConnection 期间,方法 createManagedConnctionWithMCWrapper 捕捉到异常,并抛出 ResourceAllocationException。原始异常:com.ibm.ws.exception.WsException: DSRA8100E: Unable to get a XAConnection from the DataSource.
at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:244)
at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:171)
at com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil.java:191)
at com.ibm.ws.rsadapter.DSConfigurationHelper.getPooledConnection(DSConfigurationHelper.java:694)
at com.ibm.ws.rsadapter.spi.WSRdbDataSource.getPooledConnection(WSRdbDataSource.java:440)
at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:566)
at com.ibm.ejs.j2c.poolmanager.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:1244)
at com.ibm.ejs.j2c.poolmanager.FreePool.createOrWaitForConnection(FreePool.java:1030)
at com.ibm.ejs.j2c.poolmanager.PoolManager.reserve(PoolManager.java:1590)
at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:658)
at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:446)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:215)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:190)
at org.apache.jsp._CREATtABLE._jspService(_CREATtABLE.java:85)
at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:357)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:675)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:773)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:948)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:530)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:176)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:79)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:201)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:610)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:431)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
---- Begin backtrace for nested exception
java.sql.SQLException: The application requester cannot establish the connection.(Connection refused: connect
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:344)
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:1879)
at com.ibm.as400.access.AS400JDBCDataSource.getConnection(AS400JDBCDataSource.java:343)
at com.ibm.as400.access.AS400JDBCDataSource.getConnection(AS400JDBCDataSource.java:313)
at com.ibm.as400.access.AS400JDBCXADataSource.getXAConnection(AS400JDBCXADataSource.java:133)
at com.ibm.ws.rsadapter.DSConfigurationHelper$1.run(DSConfigurationHelper.java:676)
at java.security.AccessController.doPrivileged(Native Method)
at com.ibm.ws.rsadapter.DSConfigurationHelper.getPooledConnection(DSConfigurationHelper.java:671)
at com.ibm.ws.rsadapter.spi.WSRdbDataSource.getPooledConnection(WSRdbDataSource.java:440)
at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:566)
at com.ibm.ejs.j2c.poolmanager.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:1244)
at com.ibm.ejs.j2c.poolmanager.FreePool.createOrWaitForConnection(FreePool.java:1030)
at com.ibm.ejs.j2c.poolmanager.PoolManager.reserve(PoolManager.java:1590)
at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:658).......................................................
61e4f531 ConnectionMan E J2CA0020E: 连接池管理器无法分配一个受管连接:javax.resource.spi.ResourceAllocationException: DSRA8100E: Unable to get a XAConnection from the DataSource.
at com.ibm.ejs.j2c.poolmanager.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:1282)
at com.ibm.ejs.j2c.poolmanager.FreePool.createOrWaitForConnection(FreePool.java:1030)
at com.ibm.ejs.j2c.poolmanager.PoolManager.reserve(PoolManager.java:1590)
at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:658)
at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:446)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:215)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:190)
at org.apache.jsp._CREATtABLE._jspService(_CREATtABLE.java:85)
at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:357)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:675)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:773)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
请各位大侠帮忙解决,我已经郁闷1天啦! 我2004年刚做完一个中央国债登记结算公司的一个全国性交易的项目,我任项目经理。后台AS400,前置机RS600(Websphere 5.0),前端Java+explorer。有个team专门负责Websphere开发,包括Websphere开发环境的设置。因为是个人信息保密问题,我不能把他们的电话告诉你。我可以让他门在方便的时候,到这个论坛来解答你的问题,或者你可以直接打电话给IBM技术支持中心。打电话给IBM,是解决问题最佳途径。 谢谢,我现在做的是深圳社保局的项目,也是做项目经理,但是下面的人都不懂这个技术,所以问题就有我来解决啦!我的电话是13424313241,邮箱是makekeok@163.com datasource的配置是什么? TOOLBOX是不需要用户名和密码的 我以前测试写的一段代码,是可以连接上的,我也用WSAD5.0, AS400是V5R3. 当时好像是同时连接sql server和db2.
核心代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DbInput
{
Connection src=null;
Connection dest=null;
Connection connformax=null;
ConnPara srcPara;
ConnPara destPara;
public DbInput(){}
public void dbInit()
{
DbXmlParser xmlparser=new DbXmlParser("dbs.xml");
srcPara=xmlparser.getSource();
destPara=xmlparser.getDest();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Class.forName("com.ibm.as400.access.AS400JDBCDriver");//2004-8-28 DB2/AS400
src = DriverManager.getConnection( srcPara.getUrl(), srcPara.getUsername(),srcPara.getPassword());
dest =DriverManager.getConnection( destPara.getUrl(), destPara.getUsername(),destPara.getPassword());
connformax= DriverManager.getConnection( destPara.getUrl(), destPara.getUsername(),destPara.getPassword());
}
//捕获加载驱动程序异常
catch ( ClassNotFoundException cnfex ) {
System.err.println( "装载 JDBC/ODBC 驱动程序失败。" );
cnfex.printStackTrace();
System.exit( 1 );// terminate program
} catch ( SQLException ex )
{
System.err.println( "连接失败" );
ex.printStackTrace();
System.exit( 1 );// terminate program
}
}
}
我的XML文件配置如下:
<?xml version="1.0" encoding="GBK"?>
<dbcopy>
<source>
<class>com.microsoft.jdbc.sqlserver.SQLServerDriver</class>
<url>jdbc:microsoft:sqlserver://SqlServerName:port;DatabaseName=dataname;SelectMethod=cursor</url>
<user>username</user>
<password>password</password>
</source>
<dest>
<class>com.ibm.as400.access.AS400JDBCConnectionPoolDataSource</class>
<url>jdbc:as400://as400name;naming=system</url>
<user>User name</user>
<password>password</password>
</dest>
</dbcopy> 大肥肥,你应该做一个连接工厂来做这个好像比较好。
在C#中可以用静态构造函数来获取配置文件的信息
然后用一个静态的方法返回连接~~,这样代码的重用性会高很多~~ wildfish, 很感谢你的指点,谢谢!
说到连接数据库,其实我的这种连接方法在J2EE中不推荐使用,我的这种DriverMarager方法的主要问题是:
它是一个同步的类,这意味着在一个给定的时间内,只有一个线程可以运行,应该尽量使用多线程的DataSource技术。至于DataSource技术,不同的服务器,比如BEA WEBLOGIC,和IBM WEBSPHERE配置有点不同,但是基本都是通过控制台配置,然后绑定到JDNI树上,供应用使用,详细可以查询具体的手册。
我上面给的只是当时写这测试用的代码,见笑。
很高兴能和你探讨,有机会多交流~~ ~~,我对java的代码只是能看得程度,基本上不会写,我从事的是.net的开发。只是我们比较追求代码的重用。架构上的重用。
页:
[1]