`
lifaming15
  • 浏览: 64850 次
  • 来自: ...
文章分类
社区版块
存档分类

WebLogic JNDI 编程

 
阅读更多

WebLogic JNDI

下列部分介绍如何使用 WebLogic JNDI 编程:


使用 WebLogic JNDI 将 Java 客户端连接到单个服务器

WebLogic Server JNDI 服务提供程序接口(Service Provider Interface,简称 SPI)提供一个允许远程 Java 客户端连接到 WebLogic Server 的 InitialContext 实现。客户端可以指定标识特定 WebLogic Server 部署的标准 JNDI 环境属性,以及用于登录 WebLogic Server 的相关连接属性。

要与 WebLogic Server 交互,Java 客户端必须能够获取某个远程对象的对象引用,并能够调用对该对象的操作。要完成此操作,客户端应用程序代码必须执行下列步骤:

  1. 设置 InitialContext的 JNDI 环境属性。
  2. 使用 WebLogic Server 建立 InitialContext
  3. 使用上下文查找 WebLogic Server 名称空间中的已命名对象。
  4. 使用已命名对象来获取远程对象的引用,并调用对远程对象的操作。
  5. 关闭上下文。

下列部分讨论连接到特定 WebLogic Server 的 JNDI 客户端操作。有关在 WebLogic Server 群集中使用 JNDI 的详细信息,请参阅在群集环境中使用客户端的 WebLogic JNDI

必须将 WebLogic Server 环境的对象下载到 WebLogic Server JNDI 树中,才能使用 JNDI 访问该对象。

注意: 下列操作不受支持,而且在启动时会导致出现故障:绑定使用 WebLogic Server 6.1 类生成的对象,以及将其部署到 WebLogic Server 7.0 或更高版本。


设置 InitialContext的 JNDI 环境属性

任何 Java 客户端应用程序必须执行的第一项任务是创建环境属性。InitialContext 工厂使用多种属性自定义特定环境的 InitialContext。可以使用散列表或 WebLogic 环境对象的 set() 方法来设置这些属性。这些指定为名值对形式的属性确定 WLInitialContextFactory 如何创建上下文。

下列属性用于自定义 InitialContext

  • Context.PROVIDER_URL- 指定提供命名服务的 WebLogic Server 的 URL。默认为 t3://localhost:7001
  • Context.SECURITY_PRINCIPAL- 指定用于身份验证的用户(即在 WebLogic Server 安全领域中所定义的用户)标识。该属性默认为 guest 用户,除非线程已与 WebLogic Server 用户关联。有关详细信息,请参阅将 WebLogic 用户与安全上下文关联
  • Context.SECURITY_CREDENTIALS - 指定 Context.SECURITY_PRINCIPAL 属性中定义的用户密码,或指定使用已定义的 Context.SECURITY_CREDENTIALS 属性来实现 weblogic.security.acl.UserInfo 接口的对象。如果在此属性中传递 UserInfo 对象,则忽略 Context.PROVIDER_URL 属性。该属性默认为 guest 用户,除非线程已与某个用户关联。有关详细信息,请参阅将 WebLogic 用户与安全上下文关联

可以在客户端或服务器使用相同属性。如果在服务器端对象定义属性,则使用本地上下文。如果在客户端或另一台 WebLogic Server 上定义属性,则上下文委托在 Context.PROVIDER_URL 属性所指定的 WebLogic Server 上运行的远程上下文。绑定到服务器的远程对象不能接受 peerGone 提供的服务,且在客户端失败时不可访问。

创建上下文后,有些属性就不可再更改。这些属性包括提供程序 url、用户凭据和工厂。创建上下文后,AddToEnvironment 可用于更改其他属性。

清单3-1 说明如何使用 Context.INITIAL_CONTEXT_FACTORY 属性和 Context.PROVIDER_URL 属性获取上下文。

清单3-1 获取上下文
  Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,
"t3://localhost:7001");

try {
ctx = new InitialContext(ht);
// 使用程序中的上下文
}
catch (NamingException e) {
// 发生故障
}
finally {
try {ctx.close();}
catch (Exception e) {
// 发生故障
}
}

其他 WebLogic 特定的属性也可以用于控制如何将对象绑定到群集范围的 JNDI 树。是否跨群集中每个服务器的 JNDI 树复制绑定,取决于设置这些属性的方法。诸如这些属性由 weblogic.jndi.WLContext 类的常量来标识。有关 JNDI 相关的群集问题的详细信息,请参阅在群集环境中使用客户端的 WebLogic JNDI

使用散列表创建上下文

可以使用指定设置 InitialContext 的 JNDI 环境属性中所述属性的散列表创建上下文。

为此,将散列表传递到 InitialContext 的构造方法。属性 java.naming.factory.initial 用于指定如何创建 InitialContext。要使用 WebLogic JNDI,您必须一直将 java.naming.factory.initial 属性设置为 weblogic.jndi.WLInitialContextFactory。此设置可确定真正创建上下文的工厂。

使用 WebLogic 环境对象创建上下文

也可以使用 weblogic.jndi.environment 实现的 WebLogic 环境对象创建上下文。虽然环境对象是 WebLogic 特定的,但它具有下列优势:

  • 具有一组默认设置,可以减少需要编写的代码量。
  • 简便的 set() 方法可以提供编译时类型安全。类型安全 set() 方法可以节省编写和调试代码的时间。

WebLogic 环境对象提供下列默认设置:

  • 如果未指定 InitialContext 工厂,则默认使用 WLInitialContextFactory
  • 如果未在 Context.SECURITY_PRINCIPALContext.CREDENTIALS 属性中指定用户和密码,则默认使用 guest 用户和密码,除非线程已与某个用户关联。
  • 如果未指定 Context.PROVIDER_URL 属性,则默认使用 t3://localhost:7001

如果希望用这些默认设置创建 InitialContext,请编写下列代码:

  Environment env = new Environment();
Context ctx = env.getInitialContext();

如果希望只将 WebLogic Server 设置为用于访问客户端群集的分布式命名服务(Distributed Name Service,简称 DNS),请编写下列代码:

  Environment env = new Environment();
env.setProviderURL("t3://myweblogiccluster.com:7001");
Context ctx = env.getInitialContext();
注意: 每次新建 JNDI 环境对象的同时,也在创建新的安全范围。使用 context.close() 方法结束该安全范围。
注意: 如果使用 IIOP 协议,则 environment.getInitialContext() 方法不能正常工作。

清单3-2 演示了使用 JNDI 环境对象创建安全上下文。

清单3-2 使用 JNDI 环境对象创建安全上下文
weblogic.jndi.Environment environment = new weblogic.jndi.Environment();
environment.setInitialContextFactory(
weblogic.jndi.Environment.DEFAULT_INITIAL_CONTEXT_FACTORY);
environment.setProviderURL("t3://bross:4441");
environment.setSecurityPrincipal("guest");
environment.setSecurityCrendentials("guest");
InitialContext ctx = environment.getInitialContext();

从服务器端对象创建上下文

也可能需要从在 WebLogic Server 的 Java 虚拟机(Java Virtual Machine,简称 JVM)上实例化的对象(Enterprise JavaBean (EJB) 或远程方法调用(Remote Method Invocation,简称 RMI)对象)创建上下文。使用服务器端对象时,不需要指定 Context.PROVIDER_URL 属性。只有要以特定用户登录时,才需要用户名和密码。

要从服务器端对象创建上下文,首先必须新建一个 InitialContext,如下所示:

  Context ctx = new InitialContext();

不需要指定工厂或提供程序 URL。默认情况下,上下文创建为 Context 并连接到本地命名服务。

将 WebLogic 用户与安全上下文关联

请参阅 JNDI 上下文和线程

JNDI 上下文和线程

创建具有用户名和密码的 JNDI 上下文时,即将用户和线程关联起来。创建上下文后,用户被上推到与线程关联的上下文堆栈。在启动线程上新的上下文之前,必须关闭第一个上下文,以使第一个用户不再与线程关联。否则,每次新上下文创建后,用户都会被下推到堆栈。这不仅不能高效使用资源,还可能导致 ctx.lookup() 调用返回错误的用户。下列步骤演示了上述情况:

  1. user1 创建一个名为 ctx1 的上下文(具有用户名和凭据)。在创建上下文的过程中,user1 与线程关联,并被上推到与线程关联的堆栈。现在当前用户是 user1
  2. user2 创建另一个名为 ctx2 的上下文(具有用户名和凭据)。此时,线程使某个用户的堆栈与之关联。User2 位于堆栈顶部,而 user1 位于其后,因此 user2 作为当前用户使用。
  3. 如果调用 ctx1.lookup("abc"),则作为标识使用的是 user2,而不是 user1,因为 user2 位于堆栈顶部。要获得预期结果,即调用 ctx1.lookup("abc") 作为 user1,则需要调用 ctx2.close() ctx2.close() 调用会从与线程关联的堆栈中删除 user2,这样,现在 ctx1.lookup("abc") 调用可以按预期使用 user1
    注意: 当启用 weblogic.jndi.enableDefaultUser 标志时,会有两种情况因为 close() 调用并未从堆栈中删除当前用户而导致出现 JNDI 上下文问题。有关如何避免出现 JNDI 上下文问题的详细信息,请参阅如何避免潜在的 JNDI 上下文问题

如何避免潜在的 JNDI 上下文问题

通常是调用 close(),如 JNDI 上下文和线程中所述。不过,在启用 weblogic.jndi.enableDefaultUser 标志后,也会发生非预期行为,如下面的异常:

上次使用

使用 IIOP 时,当有一个上下文位于堆栈中,而由 close() 来删除该上下文,会发生非预期行为的异常。从堆栈中删除的上一个上下文标识确定当前用户的标识。下列步骤介绍了上述情况:

  1. user1 创建一个名为 ctx1 的上下文(具有用户名和凭据)。在创建上下文的过程中,user1 与线程关联且存储在堆栈中,即将当前标识设置为 user1
  2. 调用 ctx1.close()
  3. 调用 ctx1.lookup()。当前标识是 user1。
  4. user2 创建一个名为 ctx2 的上下文(具有用户名和凭据)。在创建上下文的过程中,user2 与线程关联且存储在堆栈中,即将当前标识设置为 user2
  5. 调用 ctx2.close()
  6. 调用 ctx2.lookup()。当前标识是 user2。


使用上下文查找已命名对象

对上下文使用的 lookup() 方法用于获取已命名对象。被传递到 lookup() 方法的参数是一个包含所需对象名称的字符串。清单3-3 说明检索名为 ServiceBean 的 EJB 的方法。

清单3-3 查找指定的对象
  try { 
ServiceBean bean = (ServiceBean)ctx.lookup("ejb.serviceBean");
}catch (NameNotFoundException e) {
// 绑定不存在
}catch (NamingException e) {
// 发生故障
}


使用已命名对象获取对象引用

EJB 客户端应用程序从 EJB Home 中获取对 EJB 远程对象的对象引用。RMI 客户端应用程序从初始命名对象中获取对其他 RMI 对象的对象引用。WebLogic Server 将这两个初始命名对象识别为工厂。工厂是任何可以将引用返回到 WebLogic 名称空间中另一个对象的对象。

客户端应用程序对工厂调用方法,以获取对特定类的远程对象的引用。然后客户端应用程序对远程对象调用方法,传递所有需要的参数。

清单3-4 包含获取远程对象、而后对该对象调用方法的代码片段。

清单3-4 使用指定的对象获取对象引用
ServiceBean bean = ServiceBean.Home.create("ejb.ServiceBean")
Servicebean.additem(66);


关闭上下文

BEA 系统建议客户端使用上下文完成工作后,应当关闭上下文,以释放资源和避免内存泄漏。BEA 建议使用 finally{} 块并包装 try{} 块中的 close() 方法。如果尝试关闭一个因错误而从未实例化的上下文,则 Java 客户端应用程序会引发异常。

清单3-5 中,客户端将关闭上下文,并释放正在使用的资源。

清单3-5 关闭上下文
try {
ctx.close();
} catch () {
//发生故障
}


使用群集环境中的 WebLogic JNDI

WebLogic JNDI 的目的在于向 J2EE 服务提供命名服务,特别是 EJB、RMI 和 Java 消息服务(Java Messaging Service,简称 JMS)。因此,了解将对象绑定到群集环境中 JNDI 树的含义是很重要的。

下列部分讨论在群集环境中如何实现 WebLogic JNDI,并提供了一些可以使自己的对象在 JNDI 客户端可用的方法。

使用 RMI 和 JNDI 之间的关系启用 WebLogic 群集

WebLogic RMI 是允许 JVM 客户端从另一个 JVM 客户端访问 EJB 和 JMS 服务的可行性技术。RMI 存根控件将客户端传入的调用编组到 RMI 对象。为将 J2EE 服务提供给客户端,WebLogic 将特定服务的 RMI 存根控件绑定到其 JNDI 树的特定名称下。在将实例部署到群集中的其他服务器时,会更新 RMI 存根控件及 RMI 对象的其他实例位置。如果群集中的某个服务器出现故障,则其他服务器的 JNDI 树中的 RMI 存根控件将更新,以反映此服务器故障。

客户端连接群集时,实际上是连接到群集中的一个 WebLogic Server。由于此 WebLogic Server 的 JNDI 树包含群集中其他 WebLogic Server 提供的所有服务(除了其自身服务)的 RMI 存根控件,因此群集对客户端显示为承载所有群集范围服务的 WebLogic Server。当有新的 WebLogic Server 加入群集时,群集中已有的每个 WebLogic Server 负责将有关自己服务的信息与新的 WebLogic Server 共享。通过从群集中的其他服务器收集到的信息,新服务器会创建自己的群集范围 JNDI 树的副本。

RMI 存根控件对在群集环境下实现 WebLogic JNDI 有着显著的影响:

  • RMI 存根控件相对较小。这允许 WebLogic JNDI 用很小的开销以服务器对服务器交互对话的方式,复制群集中所有 WebLogic Server 的存根控件。
  • RMI 存根控件充当跨群集进行复制的机制。虽然 RMI 对象实例被部署到单个 WebLogic Server,但是将跨群集复制存根控件。

使自定义对象对 WebLogic Server 群集可用

将自定义对象(非 RMI 对象)绑定到 WebLogic Server 群集中的 JNDI 树时,群集中的所有服务器都将复制该对象。但是,如果主机服务器发生故障,则从群集的 JNDI 树上删除自定义对象。除非再次绑定自定义对象,否则不复制该自定义对象。每次传播对自定义对象所做的更改时,需要先对自定义对象取消绑定,然后再重新绑定。因此,WebLogic JNDI 不能用作分布式对象缓存。可以结合使用第三方解决方案和 WebLogic Server 来提供分布式缓存。

假设自定义对象需要只允许仅在一个 WebLogic Server 中部署的 EJB 对其进行访问。很明显,不需要跨群集中的所有 WebLogic Server 复制此自定义对象。事实上,应当避免复制自定义对象,以免因进行不必要的服务器对服务器通信导致性能下降。要创建不跨群集中的 WebLogic Server 复制的绑定,在创建将自定义对象绑定到名称空间的上下文时必须指定 REPLICATE_BINDINGS 属性。清单3-6 说明 REPLICATE_BINDINGS 属性的用法。

清单3-6 使用 REPLICATE_BINDINGS 属性
  Hashtable ht = new Hashtable();
//关闭绑定的复制
ht.put(WLContext.REPLICATE_BINDINGS, "false");
try {
Context ctx = new InitialContext(ht);
//绑定对象
ctx.bind("my_object", MyObect);
} catch (NamingException ne) {
//发生故障
}

使用此技巧以及需要使用自定义对象时,必须明确获取 WebLogic Server 的 InitialContext。如果连接到群集中的任意其他 WebLogic Server 时,JNDI 树将不显示绑定。

如果需要从群集中的任何一台 WebLogic Server 都能访问某个自定义对象,请将自定义对象部署到群集的每个 WebLogic Server 而不是复制 JNDI 绑定。

使用 WebLogic JNDI 复制绑定时,被绑定对象将被作为主机 WebLogic Server 拥有的对象来处理。如果主机 WebLogic Server 失败,则会从群集中所有 WebLogic Server 的 JNDI 树上删除自定义对象。此行为不利于使用自定义对象。

数据缓存设计模式

Web 应用程序的常用任务是缓存多个对象在一段时间内使用的数据,以避免产生与数据计算或与连接另一个服务有关的开销。

假设已设计了在单个 WebLogic Server 上执行良好的自定义数据缓存对象,并要在 WebLogic 群集中使用此对象。如果将数据缓存对象绑定到其中一个 WebLogic Server 的 JNDI 树上,默认情况下,WebLogic JNDI 会将此对象复制到群集中的任何其他一台 WebLogic Server 上。很重要的一点是,因为这不是 RMI 对象,但绑定到 JNDI 树(以及复制到其他 WebLogic Server)的是对象本身,而不是其中一台 WebLogic Server 所承载的单个对象实例的存根控件。不能根据 WebLogic Server 会在服务器之间复制自定义对象,从而假定自定义对象可用作分布式缓存。请记住,如果自定义对象所绑定到的 WebLogic Server 失败,则将从群集中删除该对象,并且,除非先取消绑定该对象,然后将其重新绑定到 JNDI 树,否则不会在群集中传播对该自定义对象所做的更改。

从性能和可用性方面来考虑,通常需要避免使用 WebLogic JNDI 的绑定复制将可用性要求较高的大型自定义对象复制到群集中的所有 WebLogic Server。因此,可以将自定义对象的单个实例部署到群集中的每台 WebLogic Server。将对象绑定到每台 WebLogic Server 中的 JNDI 树时,必须确保关闭绑定复制,如使自定义对象对 WebLogic Server 群集可用中所述。在此设计模式中,每台 WebLogic Server 都有自定义对象的副本,但要避免将大量的数据从一台服务器复制到另一台服务器。

不管使用何种方法,每个对象实例必须维护自己的逻辑,这样,不需要依赖群集中的其他数据缓存对象,便可更新其缓存。例如,假设客户端访问 WebLogic Server 中的数据缓存。这是缓存对象第一次被访问,所以它会计算或获取信息,并且保存信息副本以备将来的请求使用。现在假定另一个客户端连接群集以执行与第一个客户端相同的任务,不同之处只是连接到群集中的另一台 WebLogic Server。如果此特定的数据缓存对象是第一次被访问,则它需要计算信息,而不管群集中的其他数据缓存对象是否已经缓存该信息。当然,考虑到将来的请求,该数据缓存对象的实例应该能够查阅已保存的信息。

每个群集恰好一次的设计模式

有些情况下,要求具有在群集中只出现一次的服务。通过只在一台计算机上部署服务,可以达到此目的。对于 RMI 对象,可以使用 WebLogic JNDI 的默认行为来复制绑定(RMI 存根控件)以及可从群集中的所有 WebLogic Server 进行访问的单个对象实例。这称作固定服务。对于非 RMI 对象,确保将对象绑定到名称空间时使用的是 REPLICATE_BINDINGS 属性。这种情况下,需要显式连接到主机 WebLogic Server 才能访问对象。也可以创建部署在相同主机 WebLogic Server (充当非 RMI 对象的代理)上的 RMI 对象。可以复制(使用默认的 WebLogic JNDI 行为)代理的存根控件,这允许连接到群集中的任何 WebLogic Server 的客户端都可以通过 RMI 代理来访问非 RMI 对象。

对于要求高可用性的服务,可以将 RMI 对象的自动迁移配置到另一个服务器上。有关自动迁移的详细信息,请参阅“使用 WebLogic Server 群集”中的服务器迁移

在群集环境中使用客户端的 WebLogic JNDI

对象的 JNDI 绑定可以出现在群集中其中一台 WebLogic Server 的 JNDI 树上,也可以被复制到群集中的所有 WebLogic Server 中。如果关注的对象只绑定在一台 WebLogic Server 上,则创建初始上下文时,必须通过将 Context.PROVIDER_URL 属性设置为主机 WebLogic Server 的 URL 来显式连接主机 WebLogic Server,如使用 WebLogic JNDI 将 Java 客户端连接到单个服务器中所述。

然而,大多数情况下,关注的对象是群集服务或固定服务。因此,服务的存根控件显示在群集中每个 WebLogic Server 的 JNDI 树中。这种情况下,客户端不需要命名特定的 WebLogic Server 才能提供其命名服务。实际上,客户端最好只请求 WebLogic 群集提供命名服务,这样,WebLogic Server 中的上下文工厂可以从群集中选择最适合客户端的 WebLogic Server。

现在,可以使用由“群集地址”特性定义的群集的 DNS 名从 WebLogic 中选择命名服务提供程序。此特性定义客户端用于连接到群集的地址。此地址可以是映射到多个 IP 地址的 DNS 主机名,也可以是以逗号分隔的单个地址主机名或 IP 地址的列表。如果配置了网络通道,则可以为每个通道设置群集地址。请参阅使用 WebLogic Server 群集

通常,将返回到群集服务客户端的上下文作为故障转移存根控件来实现。当选定 WebLogic Server 发生故障(如通信失败)时,该存根控件可以以透明方式更改命名服务提供程序。

清单3-7 说明客户端如何使用群集命名服务。

清单3-7 使用 WebLogic 群集的命名服务
  Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://acmeCluster:7001");
try {
Context ctx = new InitialContext(ht);
// 做客户端的工作
}
catch (NamingException ne) {
// 发生故障
}
finally {
try {ctx.close();}
catch (Exception e) {
// 发生故障
}
}

指定作为提供程序 URL 一部分的 hostname 是指 ClusterAddress setting in a Cluster stanza of the config.xml file 定义的群集的 DNS 名。ClusterAddress 映射到此群集中提供的命名服务的主机列表。有关详细信息,请参阅“使用 WebLogic Server 群集”中的了解群集配置和应用程序部署

清单3-7 中,群集名 acmeCluster 用于连接群集中的任意一台 WebLogic Server。复制结果上下文,以透明地故障转移到群集中的任意一台 WebLogic Server。

指定与 WebLogic 群集的初始联系点另一个方法是提供以逗号分隔的 DNS 服务器名列表或 IP 地址列表。

  • 下例指定使用同一端口的 WebLogic Server 的列表:
    ht.put(Context.PROVIDER_URL,"t3://acme1,acme2,acme3:7001");

    所有 WebLogic Server 都在 URL 结尾处指定的端口上监听。

  • 下例指定使用不同端口的 WebLogic Server 的列表:
    ht.put(Context.PROVIDER_URL,"t3://node1:7001,node2:7002,node3:7003");

使用映射到多个服务器的 DNS 名时,WebLogic Server 取决于负载平衡的 DNS。

使用以逗号分隔的 WebLogic Server 节点的 DNS 名列表时,通过循环法方法完成故障转移,并将请求转到随机选择的服务器,如果该服务器响应失败,则该请求会转到列表上的下一个服务器。如果每台失败的服务器,此操作都会。

一旦客户端获取上下文,除非出现故障,否则不会发生其他负载平衡。这种情况下,WebLogic Server 将故障转移到群集的另一个节点。

远程客户端将从第一台可用服务器中获取上下文。群集中某台服务器的本地客户端永远不会转到远程服务器进行 JNDI 操作。

查找存根控件时,存根控件的第一个调用通常将转到获得上下文的服务器。如果存根控件是可群集的,则后续的调用会根据用户定义的负载平衡策略进行负载平衡。

有关 JNDI 和群集的详细信息,请参阅了解 WebLogic Server 群集


使用 J2EE 组件的 JNDI

虽然 J2EE 组件可能可以直接使用全局环境,但最好是使用组件环境。J2EE 应用程序中的每个 J2EE 组件都有自己的组件环境,该环境是根据组件的部署描述符中包含的信息进行设置的。

J2EE 组件能够使用下列代码查找组件环境:

Context ctx = new InitailContext();

Context comp_env = (Context)ctx.lookup("java:comp/env");

由于是在 J2EE 组件中工作,所以不需要设置散列表或环境对象来定义连接信息。

使用此上下文的方法与使用全局环境的方法相同,但是,所使用的名称是在组件的部署描述符中定义的名称。例如,部署描述符中有如下的 ejb-ref:

<ejb-ref>

...

<ejb-ref-name>ejb1</ejb-ref-name>

<ejb-ref-type>Session</ejb-ref-type>

<home>ejb1.EJB1Home</home>

<remote>ejb1.EJB1</remote>

...

</ejb-ref>

则可以查找使用 <ejb-ref-name> 设置所定义的名称,本例中为“ejb1”。

使用组件环境比使用全局环境来设置 JNDI 名称更具优势,因为在部署过程将解析所涉及的名称。这意味着,不必重新编写代码,就可以解决命名冲突。

有关设置和使用组件环境的详细信息,请参阅位于 http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf 的“J2EE Specification”。


设置外部 JNDI

外部 JNDI 是一个无需直接连接到远程树即可访问远程 JNDI 树上的对象的 API。

通过它,可以链接至另一台服务器上或提供程序(包括但不限于 WebLogic Server)上的 JNDI 树或者 java 程序中的 JNDI 树。一旦配置外部 JNDI 后,就可以使用位于其他位置的对象,这与使用绑定在 WebLogic server 实例的对象同样方便。

要配置外部 JNDI,请使用希望使用其对象的远程 JNDI 提供程序的地址创建 ForeignJNDIProvider,并创建用户名和密码访问这些对象。然后创建 ForeignJNDILinks 和 ForeignJNDIObjects,以设置本地 JNDI 树的名称和远程树的对象之间的关系。

有关如何配置外部 JNDI 的详细信息,请参阅“管理控制台联机帮助”中的创建外部 JNDI 提供程序

分享到:
评论

相关推荐

    weblogic API FOR [weblogic.jar]

    WebLogic API提供了对服务器运行时环境的编程访问,包括服务器启动、停止、集群管理、部署、安全管理、JMS队列和主题管理等。这些API主要分为以下几大类别: 1. **服务器管理**:用于创建、启动、停止、重启服务器...

    weblogic.jar

    这包括了WebLogic Server的编程模型,如WebLogic Server的生命周期管理、部署API、JNDI(Java Naming and Directory Interface)和JCA(Java Connector Architecture)等。开发者在编写自定义插件、部署工具或集成...

    04_JNDI.pdf

    JNDI(Java Naming and Directory Interface)是一种用于访问命名和目录服务的应用程序编程接口(API)。它允许开发者以统一的方式查找、获取、命名、重新命名以及取消命名Java平台上的对象,无论这些对象是本地的...

    WebLogic_管理员

    管理员可以通过管理控制台或编程方式来注册和查找JNDI资源,便于应用的部署和维护。 四、集群与高可用性 WebLogic集群是多个独立的WebLogic实例的集合,它们协同工作以提供高可用性和负载均衡。通过创建集群,管理...

    BEA WebLogic Server 开发WebLogic Server 应用.doc

    这一章涵盖了WebLogic Server应用开发中的通用编程主题。这些主题可能包括日志记录,使用WebLogic的API来管理和监控应用,线程管理,安全性配置,事务处理,以及性能优化。开发者需要熟悉如何利用WebLogic Server...

    Weblogic Ejb 学习笔记

    - 使用WebLogic的WLST(WebLogic Scripting Tool)或Admin Console进行部署,配置服务器、集群、安全、JNDI名称等。 5. **EJB的调用** - 客户端可以通过JNDI查找服务,获取EJB的引用,然后调用其方法。 - Remote...

    jndi连接数据库配置方法

    在Java应用服务器如Tomcat、WebLogic、JBoss等中,你需要先配置一个JNDI数据源。这通常在服务器的配置文件中完成,比如在Tomcat中,数据源配置在`$CATALINA_HOME/conf/server.xml`的`&lt;Context&gt;`元素内。你需要指定...

    Spring+Weblogic JMS

    1. **配置JMS连接工厂**:在Spring的配置文件中,我们需要定义一个JMS连接工厂bean,通常使用`weblogic.jndi.WLInitialContextFactory`作为初始上下文工厂类,并设置JNDI名称、服务器URL、用户名和密码等相关属性。...

    weblogic讲义

    通过遵循J2EE规范,应用可以标准化、遵循一致的编程指南,并且能够在任何兼容的服务器上部署。J2EE的关键技术包括Servlets、JavaServer Pages (JSPs)、JavaBeans、Enterprise JavaBeans (EJBs)、Java Authentication...

    Weblogic Tools for eclipse 3.4

    5. **资源管理**:可以创建、编辑和管理WebLogic Server的资源,如数据源、JMS队列和主题、JNDI条目等。 6. **代码提示与自动完成**:基于Java EE规范,提供智能代码补全和错误检查,提高开发效率。 四、WebLogic ...

    EJB3.0+weblogic操作文档

    - 创建Java客户端项目,添加对WebLogic的JNDI库和EJB3.0项目的依赖。 - 使用JNDI查找机制获取EJB的引用,然后调用其方法。例如: ```java Context ctx = new InitialContext(); CompanyRemote company = ...

    Spring+weblogic接收JMS消息

    在IT行业中,Spring框架是Java应用开发中的一个关键组件,尤其在企业级应用中,它提供了丰富的功能,如依赖注入、AOP(面向切面编程)以及与各种服务的集成,包括消息传递系统。WebLogic Server是Oracle公司的一款...

    java 采用JNDI访问数据库(三种方法)

    在Java EE应用服务器(如Tomcat、JBoss、WebLogic、GlassFish等)中,数据源通常会被配置为一个JNDI资源。开发者无需直接处理数据库连接的创建和关闭,只需通过JNDI查找即可获取连接。 1. **配置数据源**:在应用...

    Programming WebLogic JMS

    ### 编程WebLogic JMS:深入理解与实践 #### 一、引言 随着企业级应用对消息处理的需求日益增长,Java消息服务(JMS)作为一种标准的消息中间件技术,已经成为开发分布式应用的重要组成部分。BEA WebLogic Server...

    WebLogic JMS 介绍 打印版

    WebLogic JMS编程涉及消息的生产者(Producer)和消费者(Consumer)的角色,以及消息目的地(Destination),包括主题(Topic)和队列(Queue)。生产者负责发送消息到目的地,消费者则从目的地接收消息。WebLogic ...

    Spring JMS 消息处理-基于JNDI

    在“Spring JMS 消息处理-基于JNDI”的博文中,作者可能会讲解如何在应用服务器如Tomcat或WebLogic中配置JNDI资源,以及如何在Spring配置文件中声明JNDI查找。 1. **JMS核心概念**:首先,博客会介绍JMS的基本概念...

    WebLogic Server J2EE 体系结构简介 .doc

    命名和目录服务是J2EE架构中的关键组件,WebLogic Server集成了Java Naming and Directory Interface (JNDI)。JNDI允许应用查找和绑定资源,例如EJB、数据源和邮件会话,这对于分布式系统中的服务发现和配置非常有用...

    定制自己的WebLogic LDAP Authentication Provider

    总之,定制WebLogic LDAP Authentication Provider是一项涉及深入理解WebLogic安全框架、LDAP协议和Java编程的任务。通过这项工作,我们可以增强企业的安全策略,提高用户管理和认证的效率,同时保持与企业目录服务...

    Spring与WebLogic Server的集成

    4. **资源管理**:Spring 可以通过 JNDI 查找 WebLogic Server 提供的资源,如数据源、邮件会话等。 5. **安全管理**:Spring Security 可以与 WebLogic Server 的身份验证和授权机制集成,实现统一的安全策略。 ...

    JAVA-weblogic软件技术文档.rar

    1. **Java基础**: Java是WebLogic的基础,理解其基本语法、类库、多线程、网络编程和异常处理等概念是必要的。Java EE标准如Servlet、JSP、EJB等也是构建WebLogic上应用程序的重要组成部分。 2. **WebLogic Server...

Global site tag (gtag.js) - Google Analytics