2010-09-29 160 views
0

我刚刚实现了JPA实体的唯一约束的异常处理。它正在按照我的要求工作,但在触发时会将处理的异常转储到容器日志文件。如何停止处理异常记录?

  • JPA实体由SLSB(服务外观)管理。 ServiceFaçade由另一个SLSB调用,该SLSB提供基于JAX-RS的远程处理功能。
  • 在ServiceFaçade中,EntityManager操作包装在try-catch-block中,检测违反唯一约束的原因。然后它抛出一个自定义检查ApplicationException
  • REST Bean捕获ApplicationException并引发自定义未检查BadRequestException
  • ExceptionMapperBadRequestException输出到远程客户端。

这一切都很好。我不明白的部分是:(处理)的异常记录到日志中容器的日志文件(完整的长堆栈跟踪):

[#|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! 

是这应该如何?我认为自从我处理例外情况后,他们不会被转储到日志中?

回答

3

由于您启用了异常记录,因此会记录异常。

当您的日志级别为WARNING或更高时,例外会默认记录日志。如果将日志级别设置为SEVERE或OFF,那么它们将不会被记录。

即 “eclipselink.logging.level” =“严重”

您还可以设置“eclipselink.logging.exceptions” =“假”属性仅禁用异常记录。

请参阅: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging

0

这是执行异常日志记录的数据库层。你抓到他们的时间,他们已经写入日志。