DatabaseMetaData and HTTP connections
wcydaip Feb 27, 2007 5:14 PMHi,
I began working with the con.getMetaData() object today and soon after began getting the following:
org.jboss.deployment.DeploymentException: Too many open files; - nested throwable: (java.io.IOException: Too many open files) at org.jboss.web.AbstractWebContainer.init(AbstractWebContainer.java:352) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:127) at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176) at $Proxy31.init(Unknown Source) at org.jboss.deployment.MainDeployer.init(MainDeployer.java:843) at org.jboss.deployment.MainDeployer.init(MainDeployer.java:863) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:780) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:753) at sun.reflect.GeneratedMethodAccessor54.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:127) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176) at $Proxy9.deploy(Unknown Source) at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:319) at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:489) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:192) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:203) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:182) Caused by: java.io.IOException: Too many open files at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:106) at org.jboss.web.AbstractWebContainer.init(AbstractWebContainer.java:301) ... 37 more
Anyone know the cause?
Here's the code which causes the problem:
public DbTable getTable(String ds, String tbl) throws SQLException, NamingException, LookupException{
DbTable table = null;
Connection con = null;
ResultSet rs = null;
DatabaseMetaData meta = null;
String[] types = {"TABLE"};
try {
con = AppHelper.getConnection(ds);
meta = con.getMetaData();
rs = meta.getTables(con.getCatalog(), null, "%"+tbl+"%", types);
if(!rs.next()) {
throw new LookupException("Unable to find specified table:"+tbl);
}
String name;
int count = 3;
do {
name = rs.getString(count);
if(name.equals(tbl)) {
table = new DbTable(name);
readTableColumns(meta, table);
break;
}
}while(rs.next());
}finally {
AppHelper.closeResultSet(rs);
AppHelper.releaseConnection(con);
}
return table;
}
private void readTableColumns(DatabaseMetaData meta, DbTable table) throws SQLException {
logger.info("entering readTableColumns");
ResultSet columns = meta.getColumns(null, "%", table.getTableName(), "%");
while (columns.next()) {
String columnName = columns.getString("COLUMN_NAME");
String datatype = columns.getString("TYPE_NAME");
int datasize = columns.getInt("COLUMN_SIZE");
int digits = columns.getInt("DECIMAL_DIGITS");
int nullable = columns.getInt("NULLABLE");
boolean isNull = (nullable == 1);
DbColumn newColumn = new DbColumn(columnName, datatype, datasize, digits, isNull);
table.addColumn(newColumn);
}
logger.info("leaving readTableColumns");
}