我在想如何节省查找通过jndi远程ejb参考的时间。我有一个需要工作得非常快的应用程序,但它也必须调用远程ejb,这会降低速度。缓存远程EJB 3.0参考
所以我的解决方案是这样的: 我带了apache commons-pool库,并使用它的StackObjectPool实现了我的远程ejb引用缓存。
private static final ObjectPool pool = new StackObjectPool(new RemoteEjbFactory());
厂看起来是这样的:
public static class RemoteEjbFactory extends BasePoolableObjectFactory {
@Override
public Object makeObject() {
try {
return ServiceLocator.lookup(jndi);
} catch (NamingException e) {
throw new ConfigurationException("Could not find remote ejb by given name", e);
}
}
}
然后我把对象从池借用它(如果在池中没有免费的对象,它使用工厂创建一个):
SomeEjbRemote someEjb = null;
try {
someEjb = (SomeEjbRemoteImpl) pool.borrowObject();
someEjb.invokeRemoteMethod();
} catch (Throwable t) {
if (someEjb != null) {
pool.invalidateObject(someEjb);
}
pool.clear(); // Maybe its not neccessary
someEjb = (SomeEjbRemoteImpl) pool.borrowObject();
someEjb.invokeRemoteMethod(); // this time it should work
}
当然返回ejb后成功invokacion
finally {
try {
pool.returnObject(someEjb);
} catch (Exception e) {
logger.error("Could not return object to pool.", e);
}
}
据我所知,不能保证远程引用将保持连接,所以如果我们使用缓存远程ejb捕获异常,我们只是使该对象无效并重试。
您对这种方法有什么看法?这是对的吗?也许还有其他解决方案,建议?
谢谢你的回答! – nesvarbu 2010-06-23 12:28:34
是否可以对单个EJB或所有远程EJB执行有限数量的并发远程调用? JBoss是否通过配置参数来控制它? – 2016-06-15 18:42:02