如何停止处理异常被记录?

时间:2010-09-29 17:14:06

标签: exception jpa glassfish eclipselink

我刚刚为JPA实体的唯一约束实现了异常处理。它正如我所希望的那样工作,但是当触发时将处理的异常转储到容器日志文件。

  • JPA实体由SLSB(ServiceFaçade)管理。 ServiceFaçade是从另一个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!

这是怎么回事?我想,因为我处理异常,它们不会被转储到日志中吗?

2 个答案:

答案 0 :(得分:3)

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

当您的日志级别为WARNING或更高时,默认情况下会记录异常。如果将日志级别设置为SEVERE或OFF,则不会记录它们。

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

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

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

答案 1 :(得分:0)

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