Java oracle关闭连接时如何抛出错误?

Java oracle关闭连接时如何抛出错误?,java,sql,oracle,entity-framework,hibernate,Java,Sql,Oracle,Entity Framework,Hibernate,在我的java hibernate应用程序中,我收到以下错误消息,尽管该消息显示后应用程序仍继续运行: o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 17008, SQLState: 99999 o.h.e.jdbc.spi.SqlExceptionHelper - Closed Connection 如果发生这种情况,我希望应用程序停止 我已经实现了以下功能,但如果发生“关闭连接”,则不会停止应用程序: 当前代码: try {

在我的java hibernate应用程序中,我收到以下错误消息,尽管该消息显示后应用程序仍继续运行:

o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 17008, SQLState: 99999
o.h.e.jdbc.spi.SqlExceptionHelper - Closed Connection
如果发生这种情况,我希望应用程序停止

我已经实现了以下功能,但如果发生“关闭连接”,则不会停止应用程序:

当前代码:

  try {
               personName = findPersonNameById(id); //hibernate query method
            } catch (Exception e) {
                throw new ClosedConnectionException("Closed connection error");
            }
public class ClosedConnectionException extends RuntimeException {
public ClosedConnectionException(String message) {
    super(message);
}
}
自定义异常类:

  try {
               personName = findPersonNameById(id); //hibernate query method
            } catch (Exception e) {
                throw new ClosedConnectionException("Closed connection error");
            }
public class ClosedConnectionException extends RuntimeException {
public ClosedConnectionException(String message) {
    super(message);
}
}
作为参考,这里是我的persistence.xmlC3PO值,这里可能有什么原因导致连接关闭吗

 <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
            <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
            <property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider"/>
            <property name="hibernate.c3p0.max_size" value="1"/>
            <property name="hibernate.c3p0.min_size" value="1"/>
            <property name="hibernate.c3p0.acquire_increment" value="2"/>
            <property name="hibernate.c3p0.idle_test_period" value="300"/>
            <property name="hibernate.c3p0.max_statements" value="15"/>
            <property name="hibernate.c3p0.timeout" value="0"/>
            <property name="hibernate.c3p0.unreturnedConnectionTimeout" value="30000"/>
            <property name="hibernate.c3p0.dataSourceName" value="My connection"/>
            <property name="hibernate.jdbc.fetch_size" value="50"/>
            <property name="hibernate.default_batch_fetch_size" value="10"/>
        </properties>

您应该检查连接状态,然后相应地调用或执行查询。有一个
isClosed()
方法可以告诉您连接是否处于关闭状态,您可能也可以使用相同的方法。下面的内容可能假设您的连接对象名为
conn

if(!conn.isClosed())
    personName = findPersonNameById(id);

另外,请参阅另一篇帖子

您是否捕获调用代码中的
ClosedConnectionException
? -如果答案是肯定的,那么如何处理异常? -如果答案是否定的,那么您的代码将一直运行,直到在别处被捕获为止,因为这是一个运行时异常。
-遇到与数据库的封闭连接有点奇怪。以我的经验,这是一个罕见的例外。可能存在严重的隐藏问题。

是的,它被捕获在不同的块中,但我的问题是,它不会导致应用程序停止,因为它应该停止。当它被捕获在不同的块中时,在该
catch{}
块中采取了什么操作?应用程序是以编程方式停止的,还是让它继续运行?如果您可以共享
catch{}
块,问题可能会变得很明显。谢谢,有没有办法从JPAPersistenceManager获取此连接对象?我显示的代码在服务层中,我无法查看连接以进行检查?