我正在使用Eclipse和TomEE 1.7.1。
如果我对(Open)JPA的异常记录有问题: 错误不会记录到控制台或记录文件。
例如:
entityManager.createQuery("THIS IS NOT SQL");
如果我在我的WebApp中运行它,它就不会向控制台显示任何内容。 但是:如果我设置一个断点并手动执行它(通过Inspect Cntrl + Shift + I),则在控制台中显示异常。
WTF正在进行?
编辑:
我做了一个只有三个文件的测试项目,将其复制到Tomee-Webapps-Folder直接启动了Tomee。相同的结果:在控制台中看不到任何内容,也没有生成日志文件。
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="hprex">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mytest"/>
<property name="javax.persistence.jdbc.user" value="user"/>
<property name="javax.persistence.jdbc.password" value="test"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<!-- <property name="openjpa.Log" value="DefaultLevel=TRACE, Runtime=TRACE, Tool=INFO, SQL=TRACE"/> -->
<!-- <property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true"/> -->
</properties>
</persistence-unit>
</persistence>
test.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</h:head>
<h:body>
<h:form>
<h:commandButton action="#{loginBean.login}"/>
</h:form>
</h:body>
</html>
LoginBean.java
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@ManagedBean
@SessionScoped
public class LoginBean {
@PersistenceContext(unitName="mytest")
private EntityManager em;
public String login() {
Query query = em.createQuery("This is not SQL");
query.getResultList();
return "test";
}
}
答案 0 :(得分:0)
我不相信这条路会导致JPA提供商记录任何内容。当OpenJPA无法创建该查询时,它会将异常抛回您的应用程序。
答案 1 :(得分:0)
你的设置/配置是什么?默认情况下会记录异常。您可以检查:catalina.out,catalina * .log和localhost * .log取决于您对默认位置的配置(如果您使用log4j,slf4j ...那就在您身边以确保记录)。