我在Eclipse Indigo
下有一个项目,其中JBoss 4.2.2
的后端和前端(使用Flash Player)。
现在,我想使用STS 4.1
作为后端更新我的项目,并使用Flash Builder
在Adobe AIR
IDE中移动前端。
后端使用EJB 2
体系结构。
在后端,我创建了一个动态Web模块来与前端交互。它调用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
}
编辑
我已将JBoss文件夹复制到旧服务器下,并且在部署的项目中工作正常。因此,我想这是JBoss允许进行的特殊定制的配置。