gpt4 book ai didi

java - 从客户端通过一个或多个网络远程访问 EJB

转载 作者:行者123 更新时间:2023-12-01 12:33:42 24 4
gpt4 key购买 nike

假设使用 CLI 或 Swing 界面客户端,如何通过 Glassfish 访问远程 Bean?通过obtaining a reference to BeanManager

示例代码:

Hashtable contextArgs = new Hashtable();

// First you must specify the context factory.
// This is how you choose between jboss implementation
// vs. an implementation from Sun or other vendors.
contextArgs.put( Context.INITIAL_CONTEXT_FACTORY, "com.jndiprovider.TheirContextFactory" );

// The next argument is the URL specifying where the data store is:
contextArgs.put( Context.PROVIDER_URL, "jndiprovider-database" );

// (You may also have to provide security credentials)

// Next you create the initial context
Context myCurrentContext = new InitialContext(contextArgs);

http://en.wikipedia.org/wiki/Java_Naming_and_Directory_Interface#Basic_lookup

因此,对于 CLI 应用程序来访问正在运行的 glassfish 应用程序服务器,它将使用以下内容:

    Context context = null;
try {
context = new InitialContext();
hello = (Hello) context.lookup("java:global/SalutationApp/SalutationApp-ejb/Hello");
hello.myRemoteMethod();
} catch (Exception e) {
e.printStackTrace();
}

仅使用指定的 URL 才能连接到特定的 glassfish 实例?连接是如何建立的?

最佳答案

如果您正在进行真正的远程查找,则无法通过 CDI 的 BeanManager 来完成,因为 Swing GUI 不是本地的。

首先,您需要配置应用程序服务器以允许远程调用 - 这很可能包括一些身份验证设置,但我从未在 Glassfish 上这样做过。

下面是我们如何在我们自己的 Swing 应用程序之一中查找 EJB bean 的远程接口(interface),该应用程序访问部署在 JBoss 4 上的 EJB。

首先,我们在 UI 的 ClassPath 中添加了一个 jndi.properties,其中包含哪个服务器负责命名查找的信息(请注意,端口号是特定于应用程序服务器的)。这是我们自己的 Swing GUI 之一中使用的 jndi.properties 文件:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=server.local\:1199

接下来,鉴于您的命名上下文现在知道如何查找远程 JNDI 名称,您可以使用类似的内容(同样,这在我们的 Swing UI 中使用):

InitialContext ctx = new InitialContext();
MyRemote mr = (MyRemote) ctx.lookup("global/jndi/name/of/remote/interface");

您还可以通过在代码中传递配置值来配置 InitialContext,而不是使用属性文件,如下所示:

    Properties env = new Properties();
env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory"); // depends on your server
env.setProperty(Context.PROVIDER_URL, "jnp://server.local:1099/");
env.setProperty(Context.SECURITY_PRINCIPAL, "user");
env.setProperty(Context.SECURITY_CREDENTIALS, "password");
InitialContext ctx = new InitialContext(env);

这个答案并不完整,但我希望这有助于您入门。

关于java - 从客户端通过一个或多个网络远程访问 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25740832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com