调用远程EJB的独立客户端在Ubuntu中工作,但在Windows中不工作

问题描述 投票:0回答:1

我在同一Windows 10中将我的EJB客户端与EJB一起在Glassfish 5.1中运行。它运行良好。我正在尝试将glassfish移植到Ubuntu,但是发现如果Windows中的客户端和Ubuntu中的EJB不起作用(win-> ubuntu,不行)。但是,如果在Ubuntu中使用客户端,在Windows中使用EJB,则它可以工作(ubuntu-> win,确定)。赢->赢,好。 ubuntu-> ubuntu,好。所以我希望这里有人可以帮助我。

为了进行测试,而不是调用EJB,而是使用Context.list()查找玻璃鱼中的所有JNDI,最后我会提到一些奇怪的结果。

这里是我的客户:

package test;
public class TestJNDI {
    public static void main(String[] args) throws Exception {
        System.setProperty("org.omg.CORBA.ORBInitialHost", args[0]);
        Context c = new InitialContext();
        NamingEnumeration<NameClassPair> ne = c.list("");
        if (!ne.hasMore()) {
            System.out.println("c.list empty");
            return;
        }//end if
        while (ne.hasMore()) {
            NameClassPair ncp = ne.next();
            String name = ncp.getName();
            System.out.println(name+"="+ncp.getClassName());
        }//end while
    }//end main
}//end class

我尝试包含类似的内容>

System.setProperty("java.naming.factory.initial",
                "com.sun.enterprise.naming.SerialInitContextFactory");

和其他人,但没有一个人有帮助。客户端在Windows中编译为testJNDI.jar,并移植到Ubuntu。

首先,我在ubuntu和Windows中都运行着glassfish。 Ubuntu EJB与mappedName一样使用@Singleton(mappedName = "StockFacade")。 Windows具有相同的EJB集,但是所有名称都以win.作为前缀,例如@Singleton(mappedName = "win.StockFacade")

然后我在命令行中运行客户端。在Ubuntu中

java -cp testJNDI.jar:/home/me/glassfish5-1/glassfish/lib/gf-client.jar test.TestJNDI win-ip

它列出了win glassfish中的所有EJB名称,没有前缀。因此有效。

然后在Windows中

java -cp testJNDI.jar;d:\glassfish5-1\glassfish\lib\gf-client.jar test.TestJNDI ubu-ip

它说c.list empty。因此它不起作用。

[当我用win-ip替换上面的ubu-iplocalhost时,两个命令都起作用,即ubuntu列表不带前缀,windows列表带前缀。奇怪的是,一旦执行完此命令,然后重复第二条命令:使用ubu-ip的windows to ubuntu命令,它就会给我Windows EJB列表(即带前缀)。仅当我关闭Windows glassfish并重复命令时,它才给我c.list empty

因此,存在两个问题:(1)为什么Ubuntu中的客户端可以工作而Windows中的同一客户端却不能工作? (2)为什么在Windows中使用localhost后,列表似乎仍留在某种缓冲区中,进一步访问Ubuntu就给了我Windows列表?请帮助。

编辑:进一步测试揭示了2个发现:(1)我发现,如果我使用属性java.naming.provider.url而不是org.omg.CORBA.ORBInitialHost....Port,即使正确指定了主机url,它也始终为我提供本地glassfish的EJB,即使在ubuntu-> windows情况下也不起作用。(2)我在测试中添加了另一个ubuntu,也使用相同的glassfish和相同的EJB集,但名称的前缀为test.,这使我修改了上面的结果。总结新结果(客户端->服务器=结果):ubu1-> ubu2 = ubu1 EJB; ubu2-> ubu1 = ubu2 EJB; ubu-any-> win =工作正常; win-> ubu-any = Win EJB。有什么主意吗?

我在同一Windows 10中将我的EJB客户端与EJB一起在Glassfish 5.1中运行。它运行良好。我正在尝试将glassfish移植到Ubuntu,但是发现如果Windows和EJB中的客户端,它是行不通的...

windows ubuntu glassfish ejb jndi
1个回答
0
投票

我只看到您这样做:

© www.soinside.com 2019 - 2024. All rights reserved.