通过JNDI获取的对象是同一个对象吗
时间: 2024-03-30 15:38:52 浏览: 8
在同一个JNDI上下文环境中,通过JNDI获取的对象应该是同一个对象。因为在JNDI上下文环境中,每个对象都有一个唯一的名称,通过名称获取对象时,JNDI会检查该对象是否已经存在,如果存在,则直接返回该对象的引用,否则创建一个新的对象,并将其绑定到JNDI上下文环境中。因此,如果在同一个JNDI上下文环境中,多次获取同一个对象,应该获得同一个对象的引用。需要注意的是,在不同的JNDI上下文环境中,即使对象的名称相同,获取到的对象也可能不同,因为JNDI上下文环境是独立的,它们之间不共享对象。
相关问题
是怎么通过JNDI找到对象的呢
在Java中,JNDI(Java Naming and Directory Interface)是用于访问命名和目录服务的API。JNDI可以将命名和目录服务抽象为一个统一的命名空间,并提供一种标准的方式来查找、绑定和解除绑定对象。
当应用程序需要获取JNDI中的对象时,它可以执行以下步骤:
1. 创建一个JNDI上下文环境(Context),这个上下文环境是通过配置文件或者代码创建的,用于连接到JNDI服务提供者。
2. 通过上下文环境的lookup()方法查找JNDI中的对象,lookup()方法接收一个字符串参数,这个字符串参数表示要查找的对象的名称,例如:"java:comp/env/myDataSource"。
3. 如果JNDI中存在对应名称的对象,lookup()方法将返回该对象的引用,应用程序可以使用这个引用操作对象。
4. 当应用程序不再需要JNDI中的对象时,可以通过unbind()方法将其解除绑定。
需要注意的是,JNDI服务提供者的具体实现是不同的,因此在使用JNDI时需要根据具体的服务提供者进行配置和使用。
glassfish 怎么通过JNDI来获取线程池
在GlassFish中,可以通过JNDI来获取线程池对象。获取线程池对象的步骤如下:
1. 获取InitialContext对象:在应用程序中,首先需要获取InitialContext对象,这个对象用于连接到JNDI服务提供者。
```
Context ctx = new InitialContext();
```
2. 查找线程池对象:通过InitialContext对象的lookup()方法查找线程池对象,lookup()方法接收一个字符串参数,这个字符串参数表示要查找的对象的名称,例如:"java:comp/DefaultManagedExecutorService"。
```
ManagedExecutorService executorService = (ManagedExecutorService)ctx.lookup("java:comp/DefaultManagedExecutorService");
```
3. 使用线程池对象:一旦获取到线程池对象,就可以使用它来执行任务了,例如:
```
executorService.execute(new Runnable() {
public void run() {
// 任务执行的代码
}
});
```
需要注意的是,线程池的名称和具体实现可能会因为应用服务器的不同而有所差异,因此在查找线程池对象时,应该根据具体的应用服务器和线程池实现进行调整。