如何停止EJBException的堆栈跟踪(在每个抛出的Exception中)

时间:2012-01-10 17:25:31

标签: java java-ee glassfish persistence jersey

一个简单的

throw new WebApplicationException(400);

或任何其他

throw new ...

javax.ejb.EJBException引发,Caused by:是您刚刚抛出的异常。监视日志时,这很痛苦,因为并非每个异常都会打印堆栈跟踪。但EJBException就是这样做的。 >:(

请理解 - EJBException根本不会影响应用程序,只会打印出每个引发异常的不需要的堆栈跟踪。

EJBException javadoc说:

  

抛出EJBException以报告调用的业务方法   或者因为意外而无法完成回调方法   错误(例如,实例无法打开数据库连接)。

必须有办法让EJBException保持安静......

(更新)示例:

@Stateless
@Path("roads")
public class RoadsREST {

    @PersistenceContext(unitName = "rd")

    @GET
    @Produces("application/json")
    public List<NationalRoads> retrieve() {

        CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
        Root subs = cq.from(NationalRoads.class);

        List<NationalRoads> roads = em.createQuery(cq).getResultList();

        if (roads.isEmpty()) {
            throw new WebApplicationException(404);
        }

        return roads;
    }

}

2 个答案:

答案 0 :(得分:5)

最简单的解决方案是创建WebApplicationException的子类并使用@ApplicationException注释它,如下所示:

@ApplicationException
public class RESTException extends WebApplicationException {
    private static final long serialVersionUID = 1L;
    public RESTException(Status status, String msg) {
        super(Response.status(status).entity(msg).type(MediaType.TEXT_PLAIN).build());
    }
}

这应该可以阻止异常出现在您的日志文件中

答案 1 :(得分:0)

您可以通过编辑域的config目录中的logging.properties或asadmin set-log-levels来设置日志级别。在admin gui中还有一个屏幕,但使用它有时会完全破坏日志记录