enter image description here我有一个在JBOSS AS 6.1中工作的EAR项目(JSF / RICH FACES,JPA 2.0),我必须迁移到JBOSS EAP 7.0。在部署时,我在创建持久性单元期间会出现以下错误。
**"[PersistenceUnit: changecdb] Unable to build Hibernate SessionFactory
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: changecdb] Unable to build Hibernate SessionFactory
Caused by: org.hibernate.HibernateException: Errors in named queries: getSubReports, getAllReports"}}}} "**
日志显示以下错误:
**"ERROR [org.hibernate.internal.SessionFactoryImpl] (ServerService Thread Pool -- 101) HHH000177: Error in named query: getSubReports: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate class [javax.faces.model.SelectItem] [select new javax.faces.model.SelectItem(r.id,r.name) from com.centurylink.changecejb.entity.Report r where r.id<>? order by r.name asc]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74)
"**
以下是包含命名查询的源文件:
package com.centurylink.changecejb.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.NamedQueries;
@SequenceGenerator(name="reportSequence",sequenceName="rep_seq")
@Entity
@NamedQueries({@NamedQuery(name="getAllCustomReports",query="select new com.centurylink.changecejb.bean.SelectBean(r.id,r.name) from Report r order by r.name asc")
,@NamedQuery(name="getCustomReportForAId",query="from Report r where r.id=? ")
,@NamedQuery(name="getSubReports",query="select new javax.faces.model.SelectItem(r.id,r.name) from Report r where r.id<>? order by r.name asc"),
@NamedQuery(name="getAllReports",query="select new javax.faces.model.SelectItem(r.id,r.name) from Report r order by r.name asc"),
@NamedQuery(name="updateCustomReport",query="update Report r set r.name=:name where r.id=:id")
,@NamedQuery(name="deleteCustomReport",query="delete Report report where report.id=:id")})
@Table(name="report_table")
public class Report {
private String filename;
private String name;
@Id
@GeneratedValue(generator="reportSequence",strategy=GenerationType.SEQUENCE)
private int id;
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
我没有包含JSF api和impl,我确实尝试将这些包含在我的lib文件夹中但仍然得到相同的错误。 请帮忙
更新:
以下是我的图书馆清单:
common-annotations.jar
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-logging.jar
cssparser-0.9.5.jar
guava-10.0.1.jar
guava-gwt-10.0.1.jar
jsonplugin-0.32.jar
jstl.jar
poi-3.6-20091214.jar
richfaces-components-api-4.2.0.Final.jar
richfaces-components-ui-4.2.0.Final.jar
richfaces-core-api-4.2.0.Final.jar
richfaces-core-impl-4.2.0.Final.jar
sac-1.3.jar
standard.jar
下面是我的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="changecdb" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/changec</jta-data-source>
<class>com.centurylink.changecejb.entity.Report</class>
</persistence-unit>
</persistence>
我想知道是否由于EAP 7.0具有Hibernate 5.0而AS6.1具有Hibernate 3.6和/或JSF 2.2 vs JSF 1.2
更新: 在接受Gabriel的回答后,我搜索了EAP 7库,发现已经提供了一半的库。我从我的LIB删除了已经由EAP 7提供的库,但我仍然得到同样的错误。 出于某种原因,HIBERNATE 5.0并不适合加载该类 的 javax.faces.model.SelectItem
我验证该类存在于jaxax / faces模块下的一个EAP 7.0库中 jboss-jsf-api_2.2_spec-2.2.12.redhat-1.jar
以下是我当前的lib文件夹内容:
commons-digester.jar
commons-logging.jar
cssparser-0.9.5.jar
jsonplugin-0.32.jar
poi-3.6-20091214.jar
richfaces-components-api-4.2.0.Final.jar
richfaces-components-ui-4.2.0.Final.jar
richfaces-core-api-4.2.0.Final.jar
richfaces-core-impl-4.2.0.Final.jar
sac-1.3.jar
作为一种解决方法,我正在考虑提供自己的JSF(1.2)以及Hibernate(3.6)库,并在standalone.xml中禁用EAP。
欢迎任何其他想法/建议。
答案 0 :(得分:0)
它可能是与类路径相关的问题,可能会加载同一类的两个版本。 检查您的战争中是否包含服务器提供的jar。 你可以添加你的库设置吗?
我看到你有平台提供的jstl.jar和standard.jar。不确定这些罐子是否包含有问题的类,但无论如何你需要删除它们。
<强>更新强>
据我所知,JBoss EAP应该符合JEE6标准,因此它应该使用JSF 2.0,并且迁移到JBoss EAP(符合JEE7的JSF 2.2)应该是轻松的。
但是你指出你使用的是JSF 1.2,我猜你正在使用JBoss EAP 6中的兼容模式,如blog所述。
似乎Wildfly / JBoss EAP 7不再支持JSF 1.2,请查看this page以获取有关如何添加自定义JSF版本的说明。