Ошибка разрешения ссылки Glassfish ejb для удаленного бизнес-интерфейса - PullRequest
2 голосов
/ 30 января 2012

Я создал очень простой EJB3-компонент с состоянием, но не могу получить к нему удаленный доступ.Я получаю:

Причина: javax.naming.NamingException: ошибка разрешения ejb ref для удаленного бизнес-интерфейсаcom.s9120.ejb.Calculator [Исключением корня является java.lang.ClassNotFoundException: com.s9120.ejb.Calculator]

У меня есть 1 компонент и 1 интерфейс.Похоже, интерфейс не развернут (я использую GlassFish): Вот код:

package com.calc.ejb;

import javax.ejb.Remote;

@Remote
public interface Calculator {

    public Double multiply(Double multiplier, Double multiplicand);
    public Double divide(Double dividend, Double divisor);
    public Double add(Double addend, Double augend);
    public Double subtract(Double minuend, Double subtrahend);

    public void saveToMemory(Double number);
    public Double retrieveFromMemory();
}

Bean:

package com.calc.ejb;

import javax.ejb.Remote;
import javax.ejb.Stateful;

/**
 * Session Bean implementation class CalculatorBean
 */
@Stateful
@Remote(Calculator.class)
public class CalculatorBean implements Calculator{
/* Implementation */
}

Доступ к нему:

context = new InitialContext(); 
Calculator calculator = (Calculator) context.lookup("java:global/Zad3_s9120/CalculatorBean");

Должен ли я сделать некоторые шаги, чтобы сделать интерфейс доступным для сессионного компонента?Я добавляю его из Eclipse с помощью меню сервера «Добавить и удалить».

1 Ответ

5 голосов
/ 30 января 2012

Из того, что я вижу, у вас разные пакеты.

Вы определили интерфейс как:

com.calc.ejb.Calculator 

, но ваше исключение говорит вам:

com.s9120.ejb.Calculator

Возможно, у вас нет подходящего класса в вашем клиентском проекте?

Кстати: вам не нужно указывать @Remote как для интерфейса, так и для EJB.Вы можете сделать только @Remote(MyClass.class) на EJB или @Remote на интерфейсе.

...