EJB не распознается в корпоративном приложении - PullRequest
0 голосов
/ 13 февраля 2010

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

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

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

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

Затем в проекте WeatherWeb я создал управляемый bean-компонент с именем 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@null@service.CountryDAO@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@null@service.CountryDAO@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@null@service.CountryDAO@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@null@service.CountryDAO@Session@null into class managedBeans.CountryController

root cause

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

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

1 Ответ

1 голос
/ 13 февраля 2010

На самом деле вместо класса реализации:

@EJB
CountryDAO countryDao;

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

@EJB
CountryDAOBean countryDao;
...