我有一个包含Glassfish 3.1.2.2,MySQL数据库和Swing客户端应用程序的3层应用程序。是否有可能处理数据库服务器崩溃?
我试图在应用程序运行期间停止MySQL服务。然后,每当我尝试通过我的Facade会话bean之一访问数据库时,我都会获得javax.ejb.EJBAccessException异常。
我想通知用户该数据库当前已关闭。此外,我想将我的应用程序设置为“睡眠模式”,直到数据库启动并再次运行。
有什么好方法(可能很简单)来处理这种情况?
谢谢您的帮助!
A)确保将Glassfish连接池配置为自动恢复/重新连接
在Glassfish JDBC连接池配置中,设置以下值:
is-connection-validation-required, validate-atmost-once-period-in-seconds, connection-creation-retry-attempts, connection-validation-method, connection-creation-retry-interval-in-seconds, ping
Glassfish配置jdbc-connection- pool属性 Glassfish Admin-create-jdbc-connection- pool子命令
脚步:
http://localhost:4848
B)实施应用程序错误处理/数据库监视和警报
创建一个简单的JMX类发送通知,并在发生致命错误时调用其方法,该JMX MBean类发送通知。您可以使用JMX监视器控制台来观察服务器的状态- 其中一些控制台发送电子邮件警报(例如JManage和RHQ),并且存在用于从HTTP / AJax或其他语言进行访问的桥(例如Jolokia可以使用javascript / perl / java API访问JMX通知)。
使用Google Calendar API发送错误消息,以支持工作人员的Google日历(以后1或2分钟)。然后将Google日历配置为发送电子邮件/短信通知- 将直接向错误警报提供支持,以近实时支持人员。这受到Google使用限制的限制(每天礼节性限制为10,000个查询,因此请确保您的应用程序不是超级错误,并使用逻辑来限制每小时/每天/每周发送的消息数)
理想:监控数据库(可能还有应用服务器)并警告支持人员停机
在所有情况下,设置都不会立即发生-最好将其作为一个单独的小型项目实施并正确执行-最好让支持人员参与其中。
如果这些“超出范围”,则创建自己的简单监视器:
* 一个EJB计时器,用于对您的数据库运行计划的简单测试查询-如果失败,则发送警报(通过JMX / Google日历/ Java Mail / SMS网关API)。或使用Quartz开源调度程序完成相同的工作