makekeok 发表于 2005-11-19 10:36

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天啦!

passthru 发表于 2005-11-19 10:56

我2004年刚做完一个中央国债登记结算公司的一个全国性交易的项目,我任项目经理。后台AS400,前置机RS600(Websphere 5.0),前端Java+explorer。有个team专门负责Websphere开发,包括Websphere开发环境的设置。因为是个人信息保密问题,我不能把他们的电话告诉你。我可以让他门在方便的时候,到这个论坛来解答你的问题,或者你可以直接打电话给IBM技术支持中心。打电话给IBM,是解决问题最佳途径。

makekeok 发表于 2005-11-19 11:01

谢谢,我现在做的是深圳社保局的项目,也是做项目经理,但是下面的人都不懂这个技术,所以问题就有我来解决啦!我的电话是13424313241,邮箱是makekeok@163.com

atu0830 发表于 2005-11-28 19:41

datasource的配置是什么? TOOLBOX是不需要用户名和密码的

大肥肥 发表于 2005-11-29 14:28

我以前测试写的一段代码,是可以连接上的,我也用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>

wildfish 发表于 2005-11-30 00:24

大肥肥,你应该做一个连接工厂来做这个好像比较好。
在C#中可以用静态构造函数来获取配置文件的信息
然后用一个静态的方法返回连接~~,这样代码的重用性会高很多~~

大肥肥 发表于 2005-11-30 10:14

wildfish, 很感谢你的指点,谢谢!
说到连接数据库,其实我的这种连接方法在J2EE中不推荐使用,我的这种DriverMarager方法的主要问题是:
它是一个同步的类,这意味着在一个给定的时间内,只有一个线程可以运行,应该尽量使用多线程的DataSource技术。至于DataSource技术,不同的服务器,比如BEA WEBLOGIC,和IBM WEBSPHERE配置有点不同,但是基本都是通过控制台配置,然后绑定到JDNI树上,供应用使用,详细可以查询具体的手册。
我上面给的只是当时写这测试用的代码,见笑。
很高兴能和你探讨,有机会多交流~~

wildfish 发表于 2005-12-02 14:05

~~,我对java的代码只是能看得程度,基本上不会写,我从事的是.net的开发。只是我们比较追求代码的重用。架构上的重用。
页: [1]
查看完整版本: wsad5.0连接as/400的db2数据库出错,请各位高手帮忙,急!