名称空间逻辑视图
整个单元的名称空间在单元中所有服务器之间进行联合。每个服务器进程包含一个名称服务器。所有名称服务器提供单元名称空间的相同逻辑视图。
各种服务器根和名称空间的持久分区通过系统名称空间相互连接。可以使用系统名称空间结构在单元的名称空间中遍历任何上下文。
下图中显示了多服务器安装中名称空间的逻辑视图。

先前图表中的绑定用粗体标号的实线箭头和灰体标号的虚线箭头进行显示。实线箭头表示主绑定。主绑定是在创建相关的子上下文时形成的。虚线箭头表示链接的绑定。链接的绑定是在现有上下文在其他名称下绑定时形成的。添加链接的绑定以方便您使用或与先前WebSphere® Application Server版本互操作。
单元名称空间由服务器中贯穿单元的上下文组成。单元中的所有名称服务器提供单元名称空间的相同逻辑视图。名称服务器通过读配置信息在启动时构造此视图。每个名称服务器有自己的名称空间本地内存中的拷贝,并且不要求另一个正在运行的服务器起作用。然而,有几个异常。在所有服务器之间,没有复制其他服务器的服务器根。必须运行服务器根的各个服务器,以便可以访问服务器根上下文。
在 WebSphere Application Server Network Deployment 单元中,即使 Deployment Manager 和各自的 Node Agent 没有运行,仍可以读单元和节点持久区域。然而,Deployment Manager 必须正在运行以更新单元持久段,并且 Node Agent 必须正在运行以更新其相应的节点持久段。
名称空间分区
单元名称空间中有 5 个主要的分区:
- 系统名称空间分区
- 系统名称空间包含基于单元拓扑的上下文结构。系统结构支持遍历单元名称空间的所有部分,以及配置为外部单元的其他单元的单元根。此结构的根是单元根。除单元根外,系统结构在单元中包含每个节点的节点根。
您可以从节点根访问其他特定于节点的重要上下文,例如该节点中配置的服务器的节点持久根和服务器根。
系统名称空间中的所有上下文都是只读的。您不能添加、更新或移除任何绑定。
- 服务器根分区
- 单元中的每个服务器都有一个服务器根上下文。服务器根特定于特别的服务器。单元中所有服务器的服务器根都可以视为在单元名称空间的瞬时读/写分区中。系统工件,例如服务器应用程序和资源的企业 bean (EJB) home,在相关服务器的服务器根上下文中绑定。服务器应用程序还能在其服务器根下添加绑定。这些绑定是瞬时的。因此,服务器应用程序在应用程序启动时创建所有必需的绑定,以便其在应用程序运行时的任何时候都存在。
服务器集群由许多逻辑等价的 服务器组成。集群的每个成员有其自己的服务器根。这些服务器根不跨集群复制。换言之,将绑定添加到一个成员的服务器根将不会将其散播到其余集群成员的服务器根。要跨集群维护相同的视图,所有服务器根下的用户绑定都应该由服务器应用程序 在应用程序启动时创建,以便绑定将存在于每个集群成员的服务器根下。因为工作负载管理 (WLM) 行为,集群外的 JNDI 客户机不能控制哪些集群成员的服务器根上下文成为 JNDI 操作的目标。因此,您应该只从集群成员进程内对该集群成员的服务器根执行绑定操作。
限于服务器范围的已配置名称绑定与服务器的服务器根有关。
集群成员的名称在单元中必须唯一,并且必须不同于单元名。
- 单元持久分区
- 单元持久分区的上下文根是单元持久根。单元持久根下创建的绑定作为单元配置的一部分保存,并继续存在直至它被显式移除。需要创建通常与单元相关联的对象的其他持久绑
定的应用程序可以在单元持久根下绑定这些对象。
注意单元持久区域不是为瞬时、快速更改的绑定而设计是很重要的。绑定在性质上更静态,例如应用程序设置或配置的一部分,并且不在运行时创建。
即使 Deployment Manager 没有运行,仍可以读单元持久区域。然而,必须运行 Deployment Manager 来更新单元持久段。因为每台服务器包含它自己的单元持久分区副本,所以任何服务器都可以用本地方式查找在单元持久分区中绑定的对象。
限于单元范围的已配置名称绑定与单元的单元持久根有关。
- 节点持久分区
- 除了每个节点有其自己的节点持久根外,节点持久分区与单元分区类似。节点持久根下创建的绑定作为节点配置的一部分保存,并继续存在直至它被显式移除。
需要创建与特定节点相关联的对象的其他持久绑定的应用程序,可以在特殊节点的节点持久根下绑定那些对象。 与单元持久区域类似,注意节点持久区域不是为瞬时、快速更改的绑定而设计是很重要的。这些绑定在性质上更静态,例如应用程序设置或配置的一部分,并且不在运行时创建。
即使相应的 Node Agent 没有运行,也可以从节点中的任何服务器读该节点的节点持久区域。然而,Node Agent 必须正在运行以更新节点持久区域,或使节点外的任何服务器可从该节点持久区域读取。因为节点中的每台服务器包含它自己的节点的节点持久分区副本,所以节点中的任何服务器都可以用本地方式查找在该节点持久分区中绑定的对象。
限于节点范围的已配置名称绑定与节点的节点持久根有关。
- 应用程序分区
- Java EE 6 规范引入了模块、应用程序和全局名称空间。具有模块 java:module、java:app 和 java:global 的 Java URL JNDI 名称可以访问各自的名称空间。
在某些情况下,只能在本地访问名称空间;在其他情况下,可以远程访问名称空间。
应用程序分区包含可远程访问的名称空间。java:global 名称空间的根是应用程序根上下文。其他名称空间的根位于 com.ibm.ws.AppNameSpaces 子上下文下面。例如,应用程序 MyApp 的 java:app 根上下文与名称 MyApp/root 绑定(相对于 com.ibm.ws.AppNameSpaces)。当模块是服务器部署方式或联合方式下的客户机模块时,只能远程访问模块和组件名称空间。例如,应用程序 MyApp 中服务器部署的客户机模块 MyClientModule 的 java:app 根上下文与名称 MyApp/MyClientModule/root 绑定(相对于 com.ibm.ws.AppNameSpaces)。相同模块的组件名称空间(包含 comp/env 绑定)绑定在 MyApp/MyClientModule/ClientComponent/root 下面(相对于 com.ibm.ws.AppNameSpaces)。
安装定义应用程序时,带有 java:global 名称的应用程序资源(例如 EJB 引用、资源引用和环境条目)将绑定到 java:global 名称空间。应用程序不需要处于运行状态,这些名称绑定即可供其他应用程序使用。
将数据分发到它们各自的节点时,带有 java:global 名称的应用程序内定义的资源将绑定到单元中所有服务器的应用程序分区中。应用程序可以从单元中的任何服务器查找这些对象。EJB Home 也绑定在名称格式为 java:global/appName/moduleName/beanName 的 java:global 名称空间中,但仅限于企业 bean 所运行的服务器中。但是,java:global 将查找可从单元中的任何服务器解析的任何 EJB。