Java 如何处理数据库崩溃(Glassfish/MySQL)?

Java 如何处理数据库崩溃(Glassfish/MySQL)?,java,mysql,exception,glassfish,Java,Mysql,Exception,Glassfish,我有一个包含Glassfish 3.1.2.2、MySQL数据库和Swing客户端应用程序的三层应用程序。是否有可能处理数据库服务器崩溃 我试图在应用程序运行期间停止MySQL服务。然后,每当我试图通过facade会话bean访问数据库时,我都会得到javax.ejb.EJBAccessException异常 我想通知用户数据库当前已关闭。此外,我希望将我的应用程序设置为“睡眠模式”,直到数据库启动并再次运行 处理这种情况的好方法(可能很简单)是什么 提前谢谢你的帮助 在它自己的连接池上将监视数

我有一个包含Glassfish 3.1.2.2、MySQL数据库和Swing客户端应用程序的三层应用程序。是否有可能处理数据库服务器崩溃

我试图在应用程序运行期间停止MySQL服务。然后,每当我试图通过facade会话bean访问数据库时,我都会得到javax.ejb.EJBAccessException异常

我想通知用户数据库当前已关闭。此外,我希望将我的应用程序设置为“睡眠模式”,直到数据库启动并再次运行

处理这种情况的好方法(可能很简单)是什么


提前谢谢你的帮助

在它自己的连接池上将监视数据库的状态。您可以创建一个拦截器,并在db下降时拾取。容器将尝试重新连接,但您不一定知道何时成功。一旦检测到错误,就需要在某处设置信号量。然后,您必须启动一个计时器来定期检查数据库的状态,并在信号量返回时重置它。最后,您必须编写应用程序以尊重信号量

这是一个高层次的建议。祝你好运

或者,您可以使用JMX钩住所有事件。。。但是我不确定。

A)确保配置Glassfish连接池以实现自动恢复/重新连接

在Glassfish JDBC连接池配置中,设置以下值:

  • 属性:
    是否需要连接验证,以秒为单位验证atmost一次,连接创建重试尝试,连接验证方法,连接创建重试间隔(以秒为单位),ping

步骤:

  • 假设Glassfish正在运行(例如,通过打开服务器并右键单击Glassfish,在“Netbeans服务”选项卡中启动服务器),那么您应该让域管理服务器运行
  • 在web浏览器中打开管理控制台:
    http://localhost:4848
    (或使用安装过程中指定的任何端口
  • 在左边的CommonTasks菜单下,打开Resources->JDBC并单击JDBC连接池
  • 单击您的连接池名称(或通过单击“新建”按钮创建一个新的连接池名称)
  • 选择“高级”选项卡并输入:
  • 在几秒钟内最多验证一次:(例如60)
  • 创建重试尝试:(例如3次)
  • 重试间隔:(例如10)秒
  • 连接验证:(勾选)必填项
  • 验证方法:(如自动提交)
  • 其他需要的高级属性
  • 选择“常规”选项卡并输入:
  • 平(勾选)
  • 其他需要的一般属性
  • B)实施应用程序错误处理/DB监控和警报

  • 必需:捕获“基础架构级别”致命用户错误并提醒支持人员

    创建一个简单的JMX类来发送通知并调用其方法 当发生致命错误时。您可以使用JMX监视器控制台来观察服务器的状态-其中一些控制台发送电子邮件警报(例如JManage和RHQ),并且有从HTTP/AJax或其他语言访问的网桥(例如,可以使用javascript/perl/java API访问JMX通知)

    用于将错误消息发送到支持人员的谷歌日历(未来1或2分钟)。然后将谷歌日历配置为发送电子邮件/短信通知-将以近乎实时的方式直接向支持人员发出错误警报。这受到谷歌使用限制(每天10000条查询的礼节性限制,因此请确保你的应用程序没有超级错误,并使用逻辑限制一小时/天/周内发送的邮件数量)

  • 需要:监视数据库(可能是应用程序服务器)并提醒支持人员停机

    • Zabbix开源内置了mySQL监控和警报功能-是轻量级的,但需要设置和配置
    • Hyperic开源具有用于mySQL监控和内置警报的扩展插件-重量很重,安装和配置可能很复杂
    • Nagois开放源码是*nix操作系统的默认版本-重量很重,安装和配置可能很复杂
    在所有情况下,安装都不会立即发生-最好作为一个单独的小型项目实施并正确执行-最好让支持人员参与其中

    如果这些“超出范围”,则创建您自己的简单监视器:

    • 一个EJB计时器,用于对DB运行计划的简单测试查询——如果失败,则发送警报(通过JMX/Google Calendar/Java Mail/SMS网关API)。或者使用Quartz开源调度器执行相同的任务

  • 好的建议:有趣,你的评论让我发笑;-)我把标题从“闹翻”改为“撞车”……谢谢你的建议,普雷斯顿。这听起来很复杂,但我会尝试使用JMX:-)嗨,格伦,非常感谢你详尽的回答:-)我会尝试一下你的建议。