STS 4.1 исключение при вызове EJB - PullRequest
0 голосов
/ 15 января 2019

У меня есть проект под Eclipse Indigo с JBoss 4.2.2 с внутренним и внешним интерфейсом (с помощью Flash Player).

Теперь я хочу обновить свой проект, используя STS 4.1 для моего бэкенда, и переместить интерфейс в Flash Builder IDE, используя Adobe AIR.

Серверная часть использует архитектуру EJB 2.

В серверной части я создал динамический веб-модуль для взаимодействия с интерфейсом. Он вызывает EJB.

Под STS 4.1 Я поставил Jboss 4.2.3.GA (потому что в мастере установки нет 4.2.2).

Когда я отправляю событие внешнего интерфейса, чтобы запросить запрос к БД, мой внутренний интерфейс отправляется в исключение.

Я пытаюсь отладить и обнаружил, что проблема в методе narrow класса PortableRemoteDocument.

Этот метод работает в исключительных случаях следующим образом:

java.lang.ClassCastException: null

Я нашел другие вопросы SO об этой ошибке, и гипотетическая причина заключается в смешанном использовании архитектур EJB2 и EJB3.

Но тот же проект под Eclipse Indigo работает нормально.

Используется JDK 7 (для обеих сред).

Используемые библиотеки одинаковы.

Следуйте моим настройкам файлов:

Remoting-config.xml:

<destination id="EJB">
    <properties>
        <source>it.spi.jfw.callers.EJBCaller</source>
    </properties>
</destination>

EJBCaller.class вызывает это точка входа для вызова различных EJB с использованием этого метода:

public Document performRequest(final Document req)
    throws ConsumerException
{
    try
    {
        final ServizioRemote remoteInterface = this.getBean(this.beanID);

        return remoteInterface.receiveMessage(req);
    }
    catch (final RemoteException re)
    {
        throw new ConsumerException(message#1", re);
    }
    catch (final IOException ioe)
    {
        throw new ConsumerException("message#2", ioe);
    }
}

Это конфигурация GetEnti EJB:

<session>
     <description><![CDATA[]]></description>
     <display-name>GetEnti</display-name>

     <ejb-name>GetEnti</ejb-name>

     <home>it.spi.jfw.ejbservices.ServizioRemoteHome</home>
     <remote>it.spi.jfw.ejbservices.ServizioRemote</remote>
     <local-home>it.spi.jfw.ejbservices.ServizioLocalHome</local-home>
     <local>it.spi.jfw.ejbservices.ServizioLocal</local>
     <ejb-class>it.spi.anagrafica.servizi.GetEnti</ejb-class>
     <session-type>Stateless</session-type>
     <transaction-type>Container</transaction-type>
</session> 

Определение класса GetEnti.java:

public class GetEnti extends BaseServizio {
    // code
}

Определение класса BaseServizio.java

public abstract class BaseServizio extends AbstractServizioSessionBean {
    // code
}

Определение класса AbstractServizioSessionBean.java

public abstract class AbstractServizioSessionBean extends AbstractServizio implements SessionBean
{
    // code
}

Определение класса AbstractServizio.java

public abstract class AbstractServizio implements Servizio
{
    // code
}

Определение интерфейса Servizio.java

public interface Servizio extends Remote {
    // code
}

EDIT

Я скопировал папку JBoss под старым сервером и с моими развернутыми проектами работает нормально. Так что я полагаю, что это специфическая и настраиваемая конфигурация JBoss, позволяющая это работать.

...