gpt4 book ai didi

java - spring.datasource.jndi-name 来自具有 JNDI 的不同 ip 服务器

转载 作者:太空宇宙 更新时间:2023-11-04 11:11:44 25 4
gpt4 key购买 nike

我开发了一项服务,该服务使用本地 JNDI 中的数据源(服务和 JNDI 所在的服务器)。

在 Spring boot 中,此信息声明如下:

spring: datasource:
jndi-name: java:/comp/env/jdbc/MyLocalDB

我想知道是否可以做这样的事情:

spring: datasource:
jndi-name: java:192.168.0.1:8080/comp/env/jdbc/MyLocalDB

谢谢

最佳答案

JNDI 是访问目录的 API。应用程序服务器包括用于维护应用程序、数据源和 EJB bean 信息的目录。 JNDI 可用于访问其他类型的目录。例如,它可用于访问 Active Directory 和 LDAP 目录服务器上的用户信息。

您可以创建访问这些 JNDI 目录并获取配置数据和 RMI 远程引用等数据的客户端程序来调用 EJB bean。

访问远程 JNDI 目录

如果您正在创建客户端程序,您可以define an InitialContext描述您的程序将使用的 JNDI 目录。您必须使用配置定义 Hashtable,定义 Context.PROVIDER_URL 并创建 InitialContext

例如,您可以创建一个程序 access information in an LDAP directory .

// Set up the environment for creating the initial context
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

// ... do something useful with ctx

根据您使用的库,您可以定义描述 JNDI 远程主机的配置文件。例如,对于 JBoss EJB Client library ,您可以定义一个jboss-ejb-client.properties文件。 Glassfish 使用 jndi.properties file .

访问远程资源

资源是程序需要独立于程序代码的位置访问的数据(例如图像、音频或文本)。您可以使用 JNDI API 或 @Resource annotation访问信息。

例如,您可以使用 API 来请求 LDAP 目录中的用户数据。

try {

// Create the initial directory context
DirContext ctx = new InitialDirContext(env);

// Ask for all attributes of the object
Attributes attrs = ctx.getAttributes("cn=Ted Geisel, ou=People");

// Find the surname attribute ("sn") and print it
System.out.println("sn: " + attrs.get("sn").get());

} catch (NamingException e) {
System.err.println("Problem getting attribute:" + e);
}

访问远程 EJB

您可以access EJBs with remote interfaces located in other VMs 。一方面,您必须使用 CORBA 样式的远程接口(interface)创建 EJB,并在服务器的 java: 命名空间中注册 EJB。另一方面,应用程序可以使用 corbaname URL 来访问这些 bean。

在 Websphere/Liberty 中,如果您定义绑定(bind)到的 EJB:

java:global/ExampleApp/ExampleModule/ExampleBean!com.ibm.example.ExampleRemoteInterface
java:app/ExampleModule/ExampleBean!com.ibm.example.ExampleRemoteInterface
java:module/ExampleBean!com.ibm.example.ExampleRemoteInterface

您可以使用 RMI-IIOP 远程访问 EJB(以调用方法)

corbaname::test.ibm.com:2809#ejb/global/ExampleApp/ExampleModule/ExampleHomeBean!com.ibm.example.ExampleEJBHome
corbaname:rir:#ejb/global/ExampleApp/ExampleModule/ExampleHomeBean!com.ibm.example.ExampleEJBHome

这些远程 EJB 的详细配置可能因应用程序服务器而异。如果您使用Glassfish,您可以检查documentation 。有一个example in the Oracle blogs .

如果配置集群的话,还有很多其他options to access the remote resources使用集群中节点的名称。

访问远程数据源

无法远程访问服务器中定义的数据源。如果您想将数据源的配置保留在 JNDI 目录中,您可以解决方案定义 custom class that implements the DataSource interface 。客户端可以从服务器获取数据源配置并使用该连接创建本地数据库连接。

关于java - spring.datasource.jndi-name 来自具有 JNDI 的不同 ip 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45923971/

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