我刚刚为JPA实体的唯一约束实现了异常处理。它按我所希望的方式工作,但是触发时会将处理过的异常转储到容器日志文件中。
-
JPA实体由SLSB(服务部门)管理。服务Façade是从另一个SLSB调用的,它提供基于JAX-RS的远程处理功能。
-
在服务外观中,EntityManager操作被包装在try-catch块中,用于检测唯一约束冲突的原因。然后它抛出一个自定义的
ApplicationException
.
-
剩下的豆子吃了
并抛出一个自定义
BadRequestException
-
安
ExceptionMapper
输出
BadRequestException异常
到远程客户端。
这一切都很顺利。我不理解的部分是:(已处理的)异常记录在容器的日志文件中(包含一个长stacktrace):
[#|2010-09-29T18:49:39.185+0200|WARNING|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit|_ThreadID=30;_ThreadName=Thread-1;|
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry....
....
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry....
从抛出BadRequestException开始:
[#|2010-09-29T18:49:39.336+0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=30;_ThreadName=Thread-1;|A system exception occurred during an invocation on EJB ShopperResource method public javax.ws.rs.core.Response mvs.gateway.ShopperResource.create(javax.xml.bind.JAXBElement)
javax.ejb.EJBException
at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5119)
....
Caused by: mvs.api.exception.BadRequestException: mvs.api.exception.MvsCause: Field 'MSISDN' must be unique!
应该是这样吗?我想既然我处理了异常,它们就不会被转储到日志中了?