我正在尝试调试 Glassfish(EJB 应用程序)下的 Derby 死锁问题。我想在各个点查看锁表,所以我编写了以下代码。问题是在我调用它的每个地方,锁表总是以空的形式返回。我错过了什么?
private void dumpLockTable()
{
try ( Connection connection = dataSource.getConnection() )
{
PreparedStatement ps = connection.prepareStatement( "SELECT * FROM SYSCS_DIAG.LOCK_TABLE" );
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
StringBuilder sb = new StringBuilder();
sb.append( "Lock Table\n" );
while( rs.next() )
{
for ( int col = 1; col <= columns; col++ )
{
sb.append( rs.getString( col ) );
sb.append( "\t|" );
}
sb.append( "\n" );
}
logger.info( sb.toString() );
}
catch ( SQLException sqle )
{
logger.throwing( LOG_CLASS_NAME, "dumpLockTable", sqle );
}
}
这是 Glassfish 3.1.2.1 下的 Derby 10.8。我正在通过以下方式获取数据源:
@Resource(mappedName="jdbc/myderbyjndi")
private DataSource dataSource;
所有其他 Derby 活动都是通过实体 bean 和实体管理器进行的。