Weblogic,EJB,$ Proxy99类转换异常

时间:2015-12-08 09:50:55

标签: ejb-3.0 java-6 weblogic11g

以下是我项目中的模块,
 的 1。 EJB模块(版本3):我们准备这个模块的ejb jar并在Weblogic11g服务器上部署。它涉及数据库操作。它有@local,@ Remote接口和实现@ local,@ Remote接口的@stateless类  的 2。 Web应用程序:此Web应用程序从用户获取输入(用户上载文件),验证文件并将数据插入数据库。它使用RMI。

问题:在生产(weblogic 11g服务器)时,有时我们会发现异常,说$ Proxy99不能转换为“远程接口名称”(针对不同的不同类),例如com.xyz.fileProcessSetting.FileProcessSttgFacadeRemote。 但是在我们再次上传文件一段时间后,它会成功上传而不会出现任何错误。

现在,我不明白为什么这些远程对象暂时不可用?从未在开发/ UAT环境中遇到过这个问题。也不知道如何重现和修复它 请帮忙。在此先感谢。

@Remote
public interface FileProcessSttgFacadeRemote {
//methods
}

@Local
public interface FileProcessSttgFacadeLocal {
//methods
}

@Stateless
public class FileProcessSttgFacade implements FileProcessSttgFacadeLocal, FileProcessSttgFacadeRemote {
//methods
}


在weblogic-ejb-jar.xml

<weblogic-enterprise-bean>
    <ejb-name>FileProcessSttgFacade</ejb-name>
    <stateless-session-descriptor>
        <business-interface-jndi-name-map>
            <business-remote>com.xyz.fileProcessSetting.FileProcessSttgFacadeRemote</business-remote>
            <jndi-name>FileProcessSttgFacade</jndi-name>
        </business-interface-jndi-name-map>
    </stateless-session-descriptor>
</weblogic-enterprise-bean>


在web应用程序中也在ejb模块中,每当我们想要调用方法时,我们使用以下查找方法来获取远程对象:

public class someclass extends EjbLocator {
    public void someMethod(){

        FileProcessSttgFacadeRemote fpfr = (FileProcessSttgFacadeRemote) getService("FileProcessSttgFacade");
        //other code
    }
}

以下是用于JNDI查找的类:

public class EjbLocator {

    public Object getService(final String jndiName) throws Exception {
        try {
            obj = getDefaultContext().lookup(jndiName);
        } catch (final Exception exp) {
            exp.printStackTrace();
        }
        return obj;
    }

    protected Context getDefaultContext() {
        try {
            final Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
            env.put(Context.SECURITY_PRINCIPAL,"weblogic");
            env.put(Context.SECURITY_CREDENTIALS, "password");
            env.put(Context.PROVIDER_URL, "t3://<ip>:<port>");
            defaultContext = new InitialContext(env);
            return defaultContext;
        } catch (final NamingException nExp) {
            nExp.printStackTrace();
        }
        return null;
    }
}

0 个答案:

没有答案