我创建了一个在 GlassFish Opensource Edition 上运行的测试 EJB3 应用程序。
我从同一主机连接到 GlassFish(客户端和应用程序服务器都在“本地主机”上运行)。
我使用 InitialContext.lookup() 获取远程(有状态)对象,然后像对待普通 Java 对象一样与它交互。
唯一的问题是这个单一的调用,需要 15 秒:
FooRemoteService foors = (FooRemoteService)
context.lookup("java:global/FooApp/FooService!test.FooRemoteService");
我知道必须进行某种“握手”和“初始化”,但这太慢了。
其余的交互(多个远程调用与许多正在交换的序列化对象)只需要大约 0.1 秒!
我怎样才能找出为什么需要这么长时间的原因?
最佳答案
我建议您实例化指定主机 ip 的初始上下文,因为您可能在不同的主机上部署了相同的应用程序,并且 EJB 规范会在网络中搜索它
Properties props = new Properties();
props.put(Context.PROVIDER_URL, "jnp://ip:1099");
InitialContext ctx = new InitialContext(props);
此致。
关于java - Glassfish 的慢 "lookup"时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10163658/