- PR -

【PosgreSQL】JBossにてデータソースからコネクションを取得できない

1
投稿者投稿内容
maki
会議室デビュー日: 2008/02/26
投稿数: 2
投稿日時: 2008-02-26 23:59
掲題の通り、ある一定時間後PosgreSQLのテーブルにSQL問い合わせたところ、
最初の一回目は必ずコネクションが取得できなくエラーとなってしまいます。
二回目以降はインスタンスができているのかうまくいきます。。。
ネットで色々調べてみたのですが、原因がわからずここに書き込みました。
何かわかりましたらご教授願えればと思います。

環境は以下の通りです。
APサーバ:JBoss4.02
DBサーバ:PostgreSQL8.2
JDK:jdk1.5

ソース
private Connection con = null;
private PreparedStatement pstm = null;
private ResultSet rs = null;

public Object getInfo(Object key) throws SQLException, SystemErrorException {
UserInfo info = (UserInfo) key;
String id = info.getId();
String password = info.getPassword();

// SQLの組み立て
String sql = "SELECT NAME FROM USER_INFO_TBL WHERE ID = ? AND PASSWORD = ?";

try {
InitialContext context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:/PostgresDS");
con = dataSource.getConnection();
pstm = con.prepareStatement(sql);
pstm.setString(1, id);
pstm.setString(2, password);
rs = pstm.executeQuery();
if (rs.next()){
info.setName(rs.getString("NAME"));
}

} catch(SQLException sqle) {
sqle.printStackTrace();
throw new SQLException();
} catch(Exception e) {
e.printStackTrace();
throw new SystemErrorException();
} finally{
if(rs != null) {
rs.close();
}
if(pstm != null) {
pstm.close();
}
if(con != null) {
con.close();
}
}
return info;
}

以下、ログです。
2008-02-26 20:40:49,468 DEBUG [org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory] Using properties: {user=xxxxx, password=--hidden--}
2008-02-26 20:40:49,750 WARN [org.jboss.resource.connectionmanager.JBossManagedConnectionPool] Throwable while attempting to get a new connection: null
org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.postgresql.util.PSQLException: The connection attempt failed.
Exception: java.net.SocketException: Connection reset
Stack Trace:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:135)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:104)
at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:255)
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:253)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:94)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
at org.postgresql.jdbc2.Jdbc2Connection.<init>(Jdbc2Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:382)
at org.postgresql.Driver.connect(Driver.java:260)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:151)
at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:508)
at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:207)
at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:534)
at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:395)
at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:297)
at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:447)
at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:874)
at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:103)
at jp.co.ditgroup.bs.integration.postgresdb.UserInfoDAO.getInfo(UserInfoDAO.java:60)
at jp.co.ditgroup.bs.action.LoginAction.execute(LoginAction.java:81)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:170)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:307)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:385)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:748)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:678)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:871)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
End of Stack Trace

以上、よろしくお願い致します。
kuma
大ベテラン
会議室デビュー日: 2004/02/25
投稿数: 110
投稿日時: 2008-02-27 09:15
引用:

makiさんの書き込み (2008-02-26 23:59) より:
掲題の通り、ある一定時間後PosgreSQLのテーブルにSQL問い合わせたところ、
最初の一回目は必ずコネクションが取得できなくエラーとなってしまいます。
二回目以降はインスタンスができているのかうまくいきます。。。
ネットで色々調べてみたのですが、原因がわからずここに書き込みました。
何かわかりましたらご教授願えればと思います。


JBOSSはつかったことがないのですが
症状からはpoolの設定に問題がありそうですね。
2回目以降はつながるということなので設定XMLを
5.2.3. JBossManagedConnectionPool MBean

に従って見直してみてください。
maki
会議室デビュー日: 2008/02/26
投稿数: 2
投稿日時: 2008-02-28 00:11
kumaさん、早速のご回答ありがとうございました!!
提示いただいたURLを基にJbossの設定を変えたところうまくいきました!
やはりConnectionPoolingのところの設定がだめだったみたいです。
大変助かりました。本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)