JBOSS에 배포한 EJB3.0에서 runtime 예외가 발생하면 작업중이던 트랜잭션을 롤백 처리하고javax.ejb.EJBTransactionRolledbackException예외를 던진다. 구글에 보니 아래와 같은 형식으로 잡아 처리를 하는 소스를보았고, 저게 Fault Barrier Pattern을 이용한 것이라 되어있다.
EJBException을 캐치해도 되지만 Fault Barrier Pattern 형태를 약간 이용해서 다른 예외로
클라이언트에게 던졌다.
*하지만 이렇게 인터셉터를 걸어둘경우에 롤백처리가 되는지 확인을 하지 않았다.
FaultBarrierInterceptor.class
import java.util.Arrays; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; import org.jboss.logging.Logger; public class FaultBarrierInterceptor { @AroundInvoke public Object intercept(final InvocationContext invocationContext) throws Exception { try { return invocationContext.proceed(); } catch (final RuntimeException e) { final Logger logger = Logger.getLogger(invocationContext .getMethod().getDeclaringClass()); logger.error("A fault occured during service invocation:" + "\n-METHOD: " + invocationContext.getMethod() + "\n-PARAMS: " + Arrays.toString(invocationContext.getParameters()), e); throw new TechnicalException(); } } }TechnicalException.class
import javax.ejb.EJBException; public class TechnicalException extends EJBException { }비지니스 부분
@Local @Interceptors( { FaultBarrierInterceptor.class }) public interface AlbumDAO {
…
'프로그래밍' 카테고리의 다른 글
j2ee (0) | 2010.09.13 |
---|---|
플래그 레지스터 (2) | 2010.09.10 |
log4j (0) | 2010.08.13 |
경고: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:????????' did not find a matching property. (0) | 2010.07.19 |
The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path (0) | 2010.07.19 |