我有一个要求,我需要检查数据库连接是否已关闭,然后我发送电子邮件。以下是代码:
public static void main(String[] args) {
try {
Connection connection = DriverManager.getConnection("url", "username", "password");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM Table");
}
catch(SQLException e) {
if(e.getMessage().contains(new String("ORA-12543"))) {
// send email
}
}
}
我使用此网站确定Oracle数据库何时关闭:http://www.dbmotive.com/ora-12543-tnsdestination-host-unreachable/
现在,我想在Glassfish中设置JDBC资源和JDBC连接池,并从那里使用连接。我从未使用过Glassfish。我似乎无法找到我要找的东西。有一次,我在Glassfish中设置了资源和连接池我想知道如果根据上面的代码数据库是关闭的,这段代码是否仍然有用或者会有任何变化。我想知道数据库何时关闭,然后发送电子邮件。
请注意上面的代码是示例,但在我的主代码中存在此代码。
答案 0 :(得分:0)
恕我直言,一旦使用通过JNDI数据源检索的连接,您将需要使用以下代码。 (找到here :) 我还提供了有关如何检索下面的JNDI数据源的详细信息。
■3113:"通讯渠道上的文件结尾"
■3114:"未连接到ORACLE"
■1033:"正在进行ORACLE初始化或关闭"
■1034:" ORACLE不可用"
■1089:"正在进行即时关机 - 不允许任何操作"
■1090:"正在关机 - 不允许连接"
■17002:" I / O异常"
=========================== 用于从数据源检索连接的代码
InitialContext ic = new InitialContext();
com.sun.appserv.DataSource ds = (com.sun.appserv.DataSOurce) ic.lookup("jdbc/PointBase");
Connection con = ds.getConnection();
Connection drivercon = ds.getConnection(con);
Glassfish数据源javadoc为here
如果您不想部署应用程序,但使用远程glassfish服务器的数据源,请获取initialcontext
,如下所示
Properties props=new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");
props.put(Context.PROVIDER_URL,"iiop://URL_OF_APP_SERVER:PORT");
Context ctx=new InitialContext(props);
DataSource datasource = (DataSource)ctx.lookup("jndi/mydatasource");
答案 1 :(得分:0)
使用问题中的信息,您希望在Glassfish实例中创建一个jdbc资源,即Datasource。您还可以为它创建一个连接池。请按照此link了解如何操作。你必须改变你的代码有点像查找使用JNDI
DataSource ds = (DataSource) new InitialContext().lookup("jdbc/YOUR_DATASOURCE_NAME");
Connection con = ds.getConnection();
而不是使用DriverManager与数据库配置和凭据进行连接,因为所有这些信息都将在Glassfish服务器中配置为数据源。基于JNDI的数据源用于解耦开发人员和部署人员的工作。开发人员无需了解数据库服务器的配置。简单地知道数据源名称将满足开发的需要。除此之外,管理多个应用程序以使用单个数据源连接到同一数据库,而不必单独部署每个应用程序中的数据源配置。我建议您查看有关处理案例的错误代码的oracle documentation(查看正确的版本)。