InitialContext和lookup

InitialContext和lookup

InitialContext和lookup是在Java EE中使用JNDI(Java Naming and Directory Interface)时的两个重要概念。

1. InitialContext的作用

InitialContext是JNDI API的入口,提供了以下四个功能:

(1)查找Context对象

Context类是JNDI的基础类,通过Context对象可以找到需要的资源。InitialContext类可以创建Context对象。

(2)查找命名对象

InitialContext类可以通过JNDI名称查找命名对象。

(3)绑定新的命名对象

InitialContext类可以将一个新的对象绑定到JNDI目录中。

(4)撤销绑定的命名对象

InitialContext类可以将已经绑定到JNDI目录中的命名对象撤销。

2. lookup的作用

lookup方法可以在JNDI目录中查找对象,其用法如下:

```java

Context context = new InitialContext();

Object obj = context.lookup("jndiName");

```

其中,jndiName表示资源在JNDI目录中的名称。

将JNDI名称作为参数传递给lookup方法,该方法将返回一个Object类型的对象,需要使用类型强制转换将其转换为实际的资源类型。

3. 使用方法

以使用JMS(Java Message Service)为例来介绍如何使用InitialContext和lookup:

(1)创建InitialContext对象

```java

import javax.naming.InitialContext;

Context context = new InitialContext();

//指定JNDI服务的URL

//如果JNDI服务是本地的,则可以不指定URL

Properties env = new Properties();

env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");

env.put(Context.PROVIDER_URL, "tcp://localhost:61616");

Context context = new InitialContext(env);

```

(2)在JNDI目录中查找ConnectionFactory对象

```java

ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");

```

(3)在JNDI目录中查找Destination对象

```java

Destination destination = (Destination) context.lookup("queue/testQueue");

```

(4)创建Connection、Session和MessageProducer对象

```java

Connection connection = connectionFactory.createConnection();

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

MessageProducer producer = session.createProducer(destination);

```

(5)发送消息

```java

TextMessage message = session.createTextMessage("Hello, world!");

producer.send(message);

```

(6)关闭连接

```java

connection.close();

```

4. 案例说明

参考上述JMS的例子,介绍使用InitialContext和lookup的另一个案例。

场景:在Java EE应用程序中,需要使用DataSource对象连接数据库。

(1)创建InitialContext对象

```java

import javax.naming.InitialContext;

Context context = new InitialContext();

//指定JNDI服务的URL

//如果JNDI服务是本地的,则可以不指定URL

Properties env = new Properties();

env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");

Context context = new InitialContext(env);

```

(2)在JNDI目录中查找DataSource对象

```java

DataSource dataSource = (DataSource) context.lookup("java:openejb/Resource/jdbc/MyDS");

```

(3)创建Connection和Statement对象

```java

Connection connection = dataSource.getConnection();

Statement statement = connection.createStatement();

```

(4)执行查询

```java

ResultSet rs = statement.executeQuery("SELECT * FROM my_table");

while (rs.next()) {

System.out.println(rs.getString("column1"));

}

```

(5)关闭连接

```java

connection.close();

```

总结:在Java EE应用程序中,使用InitialContext和lookup可以方便地使用JNDI找到资源,如DataSource、Queue和Topic等。这种方法可以减少硬编码的JNDI名称,提高代码的可重用性和可维护性。

壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。

我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!

点赞(16) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部