EJB не распознается в корпоративном приложении

Я работаю над Eclipse и хочу создать корпоративное приложение с использованием Glassfish и MySQL.

Я создал проект корпоративного приложения с модулями EJB и WEB, названными WeatherEJB и WeatherWeb.

В проекте WeatherEJB я сгенерировал объекты из таблиц с помощью JPA, а также создал удаленный сеансовый компонент без сохранения состояния, названный CountryDAO, который реализует CountryDAOBean, чтобы обернуть сгенерированный объект Country.

В проекте WeatherWeb я добавил ссылки на проект WeatherEJB в ванну Java Build, ссылки на проекты и зависимости модулей.

Затем в проекте WeatherWeb я создал управляемый компонент CountryController (в области «запрос»), который выглядит следующим образом:

import javax.ejb.EJB;

import model.Country;

import service.CountryDAO;

public class CountryController 
{
    @EJB
    CountryDAO countryDao;

    private Country country;

    public CountryController()
    {
        country = new Country();
    }

    public String saveCountry()
    {
        String returnValue = "success";

        try
        {
            countryDao.saveCountry(country);
        }
        catch (Exception e){
            e.printStackTrace();
            returnValue = "failure";
        }
        return returnValue;
    }

    public Country getCountry(){
        return country;
    }

    public void setCountry(Country country){
        this.country = country;
    }
}

Хотя я могу успешно развернуть приложение на Glassfish, когда я пытаюсь получить доступ к jsf, использующему CountryController, я получаю следующие ошибки:

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.faces.FacesException: com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref managedBeans.CountryController/countryDao@jndi: service.CountryDAO@[email protected]@Session@null into class managedBeans.CountryController

root cause

javax.faces.FacesException: javax.faces.FacesException: com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref managedBeans.CountryController/countryDao@jndi: service.CountryDAO@[email protected]@Session@null into class managedBeans.CountryController

root cause

javax.faces.FacesException: com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref managedBeans.CountryController/countryDao@jndi: service.CountryDAO@[email protected]@Session@null into class managedBeans.CountryController

root cause

com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref managedBeans.CountryController/countryDao@jndi: service.CountryDAO@[email protected]@Session@null into class managedBeans.CountryController

root cause

javax.naming.NameNotFoundException: service.CountryDAO#service.CountryDAO not found

Что мне не хватает? или что я делаю не так?


person melculetz    schedule 13.02.2010    source источник


Ответы (1)


Собственно, вместо класса реализации:

@EJB
CountryDAO countryDao;

Я должен был использовать интерфейс:

@EJB
CountryDAOBean countryDao;
person melculetz    schedule 13.02.2010