使用EJB 3.0和Hibernate持久性提供程序的应用程序提供UnknownServiceException

时间:2012-03-09 11:27:25

标签: java hibernate jpa ejb-3.0 jpa-2.0

我正在尝试使用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]

你能告诉我我错过了什么,或者我哪里错了吗?

感谢。

2 个答案:

答案 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)无法初始化。

一旦我修复了弹簧上下文,“请求的未知服务”就自行修复了。所以,如果你看到这个错误,那么在调查太多之前检查早期错误是值得的。