我们是三位开发人员,他们都在使用Netbeans和Java。一个开发人员可以很好地访问远程DB2服务器(使用相同的代码)。其他两个(包括我)不能。
这是context.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/app_web">
<Resource name="jdbc/admin"
auth="Container"
type="javax.sql.DataSource"
maxActive="500"
initialSize="10"
maxIdle="50"
maxWait="10000"
username="theusername"
password="xxxxxxxxx"
driverClassName="com.ibm.as400.access.AS400JDBCDriver"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
url="jdbc:as400://192.168.1.1;prompt=false;naming=system;prompt=false;naming=system;libraries=*libl;date format=iso;time format=iso"
/>
以下是我们得到的例外情况:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (The application requester cannot establish the connection. (Permission denied: connect))
Caused by: java.sql.SQLException: The application requester cannot establish the connection. (Permission denied: connect)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:528)
WARNING: Failed to register in JMX: javax.naming.NamingException: Cannot create PoolableConnectionFactory (The application requester cannot establish the connection. (Permission denied: connect))
WARNING: Unexpected exception resolving reference
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (The application requester cannot establish the connection. (Permission denied: connect))
Caused by: java.sql.SQLException: The application requester cannot establish the connection. (Permission denied: connect)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:528)
WARNING: Failed to register in JMX: javax.naming.NamingException: Cannot create PoolableConnectionFactory (The application requester cannot establish the connection. (Permission denied: connect))
我已经将jt400.jar
文件放在C:Program FilesApache Software Foundationapache-tomcat-6.0.35lib
文件夹中,将其放在...webWEB-INFlib
文件夹中,等等。似乎什么都不起作用。
我找到了一个解决方案。显然,我不得不打开防火墙上的449端口。我以前看过那里,但由于这是一台公司机器,我没有发现有另一个配置的防火墙(F-Secure)正在阻止它。
日志中的消息Permission denied: connect
让我认为这是一个Java策略问题。很可能其他开发人员配置了一个更宽松的Java策略。
请参阅http://docs.oracle.com/javase/6/docs/technotes/guides/security/PolicyFiles.html
你们两个都使用同一个用户(username="theusername")进行连接吗?也许有一个与IBM i(又名AS/400)上的用户相关联的策略不允许多个连接
我不确定DB2,但在MySQL等一些数据库中,你可以限制哪些IP(客户端)可以连接到数据库,你确定这不是问题吗?可能是在数据库本身上设置的安全策略,只允许一些IP(包括您合作伙伴的)连接。