Приложение, использующее EJB 3.0 и провайдер персистентности Hibernate, выдает исключение UnknownServiceException - PullRequest
2 голосов
/ 09 марта 2012

Я пытаюсь создать веб-приложение, используя JSF и EJB 3.0.

Я использую простой JSF, Glassfish Server, Hibernate в качестве поставщика персистентности.Моя база данных - apache derby.

Вот мой bean-компонент Session Stateless следующим образом:

  @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 - внутри метода получения я написал логику, что если studentList пусто, тогда вызовите studentService.fetchStudentListOrderByStudentId(true);.

Но когда я это делаю, я получаюисключение:

ИСКЛЮЧЕНИЕ В com.bb.StudentServiceBean в методе fetchStudentListOrderByStudentId org.hibernate.service.UnknownServiceException: запрошена неизвестная служба [org.hibernate.service.jdbc.connections.rovi.con_ctions8]

Подскажите, пожалуйста, что мне не хватает, или где я ошибаюсь?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Вы указываете, что используете Hibernate 4.x, но класс, который вы упомянули afaik, действителен только для JPA 1.0 и Hibernate 3.x. Попробуйте удалить следующую строку из вашей конфигурации:

<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup" />
2 голосов
/ 09 ноября 2012

На всякий случай, если это интересно, я получил эту ошибку на Jetty при попытке запустить сеанс Hibernate:

Запрошен неизвестный сервис [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]

Основной причиной было предыдущее исключение (несколькими секундами ранее в журналах), из-за которого пружинный контекст (WebAppContext) не мог инициализироваться.

Как только я исправил контекст весны, «Запрошенный неизвестный сервис» исправил сам себя. Итак, если вы видите эту ошибку, стоит проверить более ранние ошибки, прежде чем исследовать слишком много ..

...