我有一个JSF应用程序,其中为Hibernate实现了DAO层(也使用Spring进行事务管理)。
我遇到的问题偶尔是数据库崩溃,当发生这种情况时,我希望JSF应用程序重定向到“丢失到数据库的连接”页面。
有两种方法可以解决这个问题:
(1)一个阶段监听器,它在每个请求上测试数据库连接,如果数据库不存在则重定向; (除了这意味着每个Web应用程序请求都有额外的数据库查询)
(2)让每个DAO中的每个方法抛出某种“NoDBConnectionExcepiton”并在后台bean中捕获该异常并重定向(除了这意味着编写了大量的异常处理代码)
有没有人有任何想法?建议和建议表示赞赏!
罗布
答案 0 :(得分:2)
每个DAO中的每个方法都会抛出某种“NoDBConnectionExcepiton”
我会这样做。您可以将它作为已经抛出的某个异常的子类,这样您就不需要更改throws
或catch
子句。例如,SQLException
的子类可能是?
并在支持bean中捕获该异常并在那里重定向(除了这意味着编写了大量异常处理代码)
不一定。您可以在web.xml
中为特定异常定义自定义错误页面,以便容器自行处理它。
<error-page>
<exception-type>com.example.NoDBConnectionException</exception-type>
<location>/errors/dbconnection.html</location>
</error-page>
答案 1 :(得分:1)
当出现问题时,Hibernate已经抛出未经检查的HibernateException。如果您的应用程序(合理地)没有错误,您可以将所有HibernateExceptions解释为数据库已关闭的指示并将其视为此类。它是RuntimeException的一个好处:你选择在你的应用程序的哪一层处理它们。