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内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。
我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复