1

我创建了一个简单的 EJB3 测试项目,代码很简单:

@Stateless
@Remote( { ISumaSimple.class })
public class SumaSimpleBean implements ISumaSimple {

    /**
     * Default constructor.
     */
    public SumaSimpleBean() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public int sumar(int a, int b) {
        // TODO Auto-generated method stub
        return a + b;
    }

}

public interface ISumaSimple {      
    public int sumar(int a, int b);
}

好的,我的客户端是一个独立的 spring 应用程序,其配置是:

<bean id="sumaSimpleServicio"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiEnvironment">
        <props>
            <prop key="java.naming.factory.initial">
                 org.apache.openejb.client.RemoteInitialContextFactory
            </prop>
            <prop key="java.naming.provider.url">
                 ejbd://localhost:4201
            </prop>
        </props>
    </property>
    <property name="jndiName" value="SumaSimpleBeanRemote" />
</bean>

<bean id="clienteService" class="qtx.cliente.simple.ClienteService">
    <property name="sumaSimpleServicio" ref="sumaSimpleServicio"></property>
</bean>

一切顺利,但后来我尝试使用 weblogic 10.3 进行部署,只需更改这些值:

weblogic.jndi.WLInitialContextFactory

t3://localhost:7010

在 weblogic jndi 树中,我的 ejb 位于:SimpleEJB3SimpleEJB_jarSumaSimple3_ISumaSimple

当然,我将 wlclient.jar 添加到我的 spring 客户端类路径中。

部署进行得很顺利,但我认为我在 weblogic 案例中遗漏了一些东西,但不知道。我的 spring 客户抛出了这个异常:

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [qtx.ejb.simple._SumaSimple3_gwze0z_ISumaSimpleIntf_Stub] to required type [qtx.servicio.simple.ISumaSimple] for property 'sumaSimpleServicio'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [qtx.ejb.simple._SumaSimple3_gwze0z_ISumaSimpleIntf_Stub] to required type [qtx.servicio.simple.ISumaSimple] for property 'sumaSimpleServicio': no matching editors or conversion strategy found
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:391)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1288)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1249)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
    ... 14 more
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [qtx.ejb.simple._SumaSimple3_gwze0z_ISumaSimpleIntf_Stub] to required type [qtx.servicio.simple.ISumaSimple] for property 'sumaSimpleServicio': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:219)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:386)
    ... 18 more

任何帮助,将不胜感激。

4

1 回答 1

2

Jndi 名称在 OpenEJB 和 Weblogic 中不同,必须根据托管 ejb 的服务器使用不同的正确 jndi 名称。

于 2012-05-25T04:48:00.377 回答