У меня есть проект под 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, позволяющая это работать.