WebLogicJNDI与RMI使用指南
立即解锁
发布时间: 2025-08-24 00:58:24 阅读量: 1 订阅数: 7 

### WebLogic JNDI与RMI使用指南
#### 1. WebLogic JNDI对象绑定
在获取上下文之后,就可以将对象绑定到WebLogic JNDI树。以下代码展示了如何将一个假设的`Person`类实例以逻辑名称`Person Object`绑定到JNDI树:
```java
try {
ctx = env.getInitialContext();
Person myPerson = new Person();
ctx.bind("Person Object", myPerson);
} catch (NamingException e) {
}
```
需要注意的是,如果已有同名对象绑定到树上,调用`InitialContext.bind()`会抛出`NamingException`。若不想抛出异常,可以使用`InitialContext.rebind()`,它会用新绑定覆盖之前的绑定:
```java
try {
ctx = env.getInitialContext();
Person myPerson = new Person();
ctx.rebind("Person Object", myPerson);
} catch (NamingException e) {
}
```
可以使用WebLogic控制台查看JNDI树中绑定的对象,操作步骤如下:
1. 展开域树中的`Servers`节点。
2. 右键单击`myserver`(或你使用的服务器)。
3. 从服务器相关操作的弹出菜单中,选择`View JNDI Tree`,JNDI树将显示在新的浏览器窗口中。
#### 2. 使用子上下文组织JNDI树
前面的`Person`对象绑定到了JNDI树的根级别。如果要绑定大量对象,或者想按应用程序组织绑定对象,可以将对象绑定到子上下文中,子上下文类似于JNDI树中的文件夹。以下示例展示了如何创建名为`JNDI Chapter`的子上下文,并将`Person`对象绑定到其中:
```java
try {
ctx = env.getInitialContext();
Context subctx = ctx.createSubContext("JNDI Chapter");
Person myPerson = new Person();
subctx.bind("Person Object", myPerson);
} catch (NamingException e) {
}
```
#### 3. 在WebLogic JNDI树中查找对象
将对象绑定到WebLogic JNDI树后,可以通过查找操作获取它们的引用。通过调用`Context.lookup()`方法实现,该方法返回一个Java对象,然后将结果强制转换为正确的对象类型。以下代码展示了如何获取前面示例中存储的`Person`对象的引用:
```java
try {
ctx = env.getInitialContext();
Person myPerson = (Person) ctx.lookup("JNDI Chapter/Person Object");
// 现在可以调用myPerson的方法
} catch (NamingException e) {
}
```
注意,以这种方式使用的类(如`Person`)必须实现`java.io.Serializable`接口。
另一种快捷方式是调用`Environment.getContext()`而不是`Environment.getInitialContext()`,并传递用于查找的子上下文名称。`getInitialContext()`始终返回根上下文的引用,而`getContext()`返回任何有效子上下文的引用:
```java
try {
ctx = env.getContext("JNDI Chapter");
Person myPerson = (Person) ctx.lookup("Person Object");
// 现在可以调用myPerson的方法
} catch (NamingException e) {
}
```
#### 4. 对LDAP目录进行查找
在进行LDAP目录查找之前,先了解一下LDAP的基本概念。LDAP目录是分层的,通常使用地理或组织划分从上到下进行组织。LDAP目录的设计(组织方式和跟踪的项目)称为其模式,LDAP模式完全可由用户定义。要在目录中查找条目,需要提供一个可分辨名称(DN),它由一个或多个相对可分辨名称(RDN)组成,用于完全指定该条目。标准LDAP RDN如下表所示:
| RDN Type | Description |
| ---- | ---- |
| C | 国家名称 |
| ST | 州或省名称 |
| L | 地区或城市名称 |
| STREET | 街道地址 |
| O | 组织名称 |
| OU | 组织单位名称 |
| CN | 通用名称 |
要在LDAP目录中进行查找,需要从一个或多个RDN构造一个DN。提供的RDN越多,查询就越具体。例如:
```plaintext
CN=Joe Zuffoletto, OU=Management, O=ZeeWare, L=Sausalito, ST=California, C=US
```
将上述DN作为查询传递给LDAP服务器,可能只返回一个条目。也可以传递不太具体的DN来检索多个条目,例如:
```plaintext
OU=Management, O=ZeeWare, ST=California, C=US
```
此DN将检索ZeeWare公司加利福尼亚办公室所有管理人员的条目。
以下是一个在LDAP目录中查找的示例,假设安装了iPlanet Directory Server v5.0,并添加了示例组织单位和用户:
```plaintext
dc=JMZ (root)
ou=Management
uid=GWells
uid=JZuffoletto
ou=Developers
uid=BGill
uid=GSchneider
uid=BTucker
ou=Clients
uid=SJohnson
uid=MJones
uid=DMiller
uid=NSmith
```
#### 5. 访问Microsoft的Active Directory
如果Active Directory和DNS为Windows 2000域正确配置,使用JNDI访问Microsoft的Active Directory相对容易。以下代码片段展示了如何获取Active Directory的`DirContext`:
```java
DirContext ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ht.put(Context.PROVIDER_URL, "ldap://pdc.mycompany.com:389");
ht.put(Context.SECURITY_AUTHENTICATION, "simple");
ht.put(Context.SECURITY_PRINCIPAL, "MYCOMPANY\\Administrator");
ht.put(Context.SECURITY_CREDENTIALS, "password");
ctx = new InitialDirContext(ht);
```
获取`DirContext`后,可以像使用其他LDAP目录一样使用它。以下代码将转储目录中的所有`Person`对象:
```java
SearchControls cons = new SearchControls();
cons.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration results = ctx.search("dc=zeeware,dc=com", "objectclass=person", cons);
while (results.hasMore()) {
System.out.println("\n\n");
SearchResult result = (SearchResult) results.next();
Attributes rAttrs = result.getAttributes();
for (NamingEnumeration ne = rAttrs.getAll(); ne.hasMore();) {
Attribute nA
```
0
0
复制全文
相关推荐










