Я хотел бы создать обработчик исключений для конкретного случая, который происходит, когда клиентское приложение EJB теряет соединение с сервером приложений. Код, который мы создаем, способен обработать клиентское приложение удобным для пользователя способом, чтобы попытаться повторно подключиться к тому же серверу или другому серверу в среде аварийного переключения. Под «потерей связи» я имею в виду все, что требует повторного подключения. Причиной может быть проблема сети, блокировка сервера, отключение сервиса и т. Д.
Вот идея того, что мы ищем (код клиента):
private void doSomething() throws RecoverableException {
//(...)
BusinessRemoteEJB ejb=ctx.lookup("BusinessRemoteEJB");
try {
List<product> list=ejb.getProducts();
//(...)
} catch (EJBException e){
Exception e = e.getCausedByException();
//Here is what I'm looking for: some excpetion that indicates a connection problem
if(e !=null && e instanceof EJBConnectionException){
//This will be catched in a proper place to try to reconnect
throw new RecoverableException(e);
} else {
//If it is any other excpetion, just let it work up the stack
throw e;
}
Конечно EJBConnectionException не существует. Есть что-нибудь подобное?
Мы используем OpenEJB 1.4 (совместим с EJB 3.x). Однако мы хотим использовать обработчик исключений, который можно использовать на разных серверах приложений, если это возможно.
Другое дело, что некоторые серверы приложений предоставляют какие-то механизмы переключения при сбое, но наши требования немного специфичны, и мы можем реализовать их непосредственно в клиентском коде.