我正在尝试使用JSF和EJB 3.0创建一个Web应用程序。
我使用普通的JSF,Glassfish Server,Hibernate作为我的持久性提供者。我的数据库是apache derby。
这里我的无状态会话bean如下:
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class StudentServiceBean implements StudentService{
@PersistenceContext(unitName="forPractise")
private EntityManager entityMgr;
@Resource
private SessionContext sessionContext;
@Override
public List<StudentVO> fetchStudentListOrderByStudentId(boolean flag){
List<StudentEntity> studentList = null;
TypedQuery<StudentEntity> studentQuery = null;
List<StudentVO> studentVOList = null;
String queryDesc = "select s from StudentEntity s order by s.studentId desc";
String query = "select s from StudentEntity s order by s.studentId";
try{
if(!flag){
studentQuery = entityMgr.createQuery(query,StudentEntity.class);
}else{
studentQuery = entityMgr.createQuery(queryDesc,StudentEntity.class);
}
studentList = studentQuery.getResultList();
studentVOList = new ArrayList<StudentVO>();
for(StudentEntity studentE : studentList){
studentVOList.add(new StudentVO(String.valueOf(studentE.getStudentId()),studentE.getStudentName(),studentE.getContactNumber()));
}
}catch(Exception e){
System.out.println(" EXCEPTION IN "+this.getClass().getName()+" in method fetchStudentListOrderByStudentId "+e);
}
return studentVOList;
}
这是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.0">
<persistence-unit name="forPractise" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/app</jta-data-source>
<class>com.entity.StudentEntity</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup" />
</properties>
</persistence-unit>
</persistence>
在加载JSP页面时会发生什么,调用StudentList的getter方法 -
在getter方法中我写了逻辑,如果studentList
为空,则调用studentService.fetchStudentListOrderByStudentId(true);
。
但是当我这样做时,我得到一个例外:
方法中的com.bb.StudentServiceBean中的EXCEPTION fetchStudentListOrderByStudentId org.hibernate.service.UnknownServiceException:未知服务 要求 [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
你能告诉我我错过了什么,或者我哪里错了吗?
感谢。
答案 0 :(得分:4)
您表示您正在使用Hibernate 4.x,但您提到的afaik类仅对JPA 1.0和Hibernate 3.x有效。尝试从配置中删除以下行:
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup" />
答案 1 :(得分:2)
为了防止它有任何兴趣,我在尝试启动Hibernate会话时在Jetty上遇到了这个错误:
请求了未知服务[org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
根本原因是之前的异常(日志中提前几秒)导致spring上下文(WebAppContext)无法初始化。
一旦我修复了弹簧上下文,“请求的未知服务”就自行修复了。所以,如果你看到这个错误,那么在调查太多之前检查早期错误是值得的。