以下是我项目中的模块,
的 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;
}
}