JNDI其实都是服务器自动绑定的,如websphere的datasource setup,在console里设好后,就自动和上下文绑定了。无需手写。
但是这次我们要作深入了解就手写下。
首先要有个中间件服务器,例如weblogic,webshpere.我就是用jboss做为服务器,免费,size小嘛。
首先启动jboss,然后就不管它。
我们打开ecplispe,在自己src java 的根目录下放下这个jndi.properties文件。
引用
# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING
#
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099
然后我们就开始写我们的java类了。
import java.io.FileInputStream;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
public class JNDITest {
/**
* @param args
*/
public static void main(String[] args) {
try {
Properties env = new Properties();
// 载入jboss的SPI相关参数,包括初始上下文工厂,服务URL,等等
env.load(new FileInputStream("jndi.properties"));
env.list(System.out);
// 通过JNDI api 初始化上下文
InitialContext ctx = new javax.naming.InitialContext(env);
// System.out.println("Got context");
// // create a subContext
ctx.createSubcontext("/sylilzy");
ctx.createSubcontext("sylilzy/sily");
// // rebind a object
ctx.rebind("sylilzy/sily/a", "I am sily a!");
ctx.rebind("sylilzy/sily/b", "I am sily b!");
// lookup context
Context ctx1 = (Context) ctx.lookup("sylilzy");
Context ctx2 = (Context) ctx1.lookup("/sylilzy/sily");
ctx2.bind("/sylilzy/g", "this is g");
// lookup binded object
Object o;
o = ctx1.lookup("sily/a");
System.out.println("get object from jndi:" + o);
// rename the object
ctx2.rename("/sylilzy/g", "g1");
o = ctx2.lookup("g1");
System.out.println("get object from jndi:" + o);
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后会输出:
引用
-- listing properties --
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
get object from jndi:I am sily a!
get object from jndi:this is g
但是我还是再想运行一次。
引用
-- listing properties --
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
javax.naming.NameAlreadyBoundException; remaining name 'sylilzy'
at org.jnp.server.NamingServer.createSubcontext(NamingServer.java:465)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at org.jnp.server.NamingServer_Stub.createSubcontext(Unknown Source)
at org.jnp.interfaces.NamingContext.createSubcontext(NamingContext.java:942)
at org.jnp.interfaces.NamingContext.createSubcontext(NamingContext.java:924)
at javax.naming.InitialContext.createSubcontext(Unknown Source)
at JNDITest.main(JNDITest.java:22)
结果在执行绑定的时候就报错了,因为我们已经在上下文里绑定了这个name.
分享到:
相关推荐
Tomcat 6.0 通过 JNDI 连接 MySQL 实例 Tomcat 6.0 中通过 JNDI 连接 MySQL 实例需要进行详细的配置和设置。本文将对 Tomcat 6.0 中的 JNDI 连接 MySQL 实例进行详细的介绍和解释。 配置 JNDI 资源 在 Tomcat 6.0...
3. **查找数据源**:在Java代码中,使用Context接口的lookup()方法,传入数据源的JNDI名称,查找并返回数据源对象。 4. **获取数据库连接**:通过数据源对象的getConnection()方法获取数据库连接。这个过程通常会从...
本文将深入探讨JNDI的使用实例,帮助开发者更好地理解和应用这一技术。 首先,我们需要了解JNDI的基本概念。JNDI是一个服务提供商接口(SPI),允许应用程序查找和操作存储在不同类型的命名和目录系统中的数据。...
本实例是一个关于如何在Tomcat 6.0中配置和使用JNDI数据源的经典示例,包含了所需的JAR包、配置文件和SQL脚本。 首先,我们来看配置JNDI数据源的步骤。在Tomcat的`conf/server.xml`文件中,你需要添加一个新的`...
例如,当使用JUnit测试时,模拟JNDI环境可以帮助我们隔离测试代码,避免对真实服务器的依赖。此外,IDE如Eclipse和IntelliJ IDEA提供了集成的JNDI查看和编辑功能,便于开发者调试和管理应用的配置。 总之,JNDI作为...
在这个"**log4j\c3p0\jndi详细配置实例**"中,可能包含了如何将`log4j`日志记录、`c3p0`数据库连接池和`JNDI`资源绑定整合的示例代码和配置文件。这可能是一个非常有价值的教程,可以帮助开发者理解如何在实际项目中...
在这个实例中,我们将讨论如何在基于Tomcat的Web服务器上使用JNDI来创建数据库连接池。 首先,理解JNDI的工作原理至关重要。JNDI的核心是名称绑定,即将一个名称(比如“jdbc/myDataSource”)与一个对象(如数据库...
Java利用DES私钥对称加密代码实例 Java加密解密工具集 JCT v1.0源码包.rar Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,支持旋转和透明度设置 Java圆形...
在Java应用中,JNDI(Java Naming and Directory Interface)是一种标准的接口,它允许应用程序查找和使用资源,如数据源(DataSource),而无需直接在代码中硬编码这些资源的位置或配置信息。JNDI的核心理念是将...
这个"JNDI简单应用示例"可能是演示如何使用JNDI进行基本操作的代码实例,例如: 1. **初始化Naming Context**:首先,你需要创建一个初始上下文(InitialContext),这是所有JNDI操作的起点。这通常通过传递一个...
8. **JNDI与EJB和JDBC**:在Enterprise JavaBeans (EJB) 中,JNDI用于查找和注入EJB实例。在Java Database Connectivity (JDBC) 中,数据源通常通过JNDI查找来获取,这样可以轻松地在不同环境中配置数据库连接。 9....
使用JNDI的主要优势在于其与平台无关性——开发人员可以使用相同的代码来访问不同类型的命名服务,而无需了解底层实现细节。 #### 三、JNDI配置问题及解决方案 在开发过程中,尤其是在非服务器环境下的独立应用...
本资源包含对JNDI数据库连接池的详细讲解,以及监听器的代码实例和讲解资料,旨在帮助开发者更好地理解和应用这些技术。JNDI主要通过以下步骤实现数据库连接的管理: 1. **配置JNDI数据源**:在应用服务器(如...
- **松耦合**:JNDI允许应用程序与资源之间保持松散耦合,因为它们之间的联系是通过名称而不是硬编码的实例引用。 - **可扩展性**:随着系统的发展,可以轻松添加新的命名或目录服务,而无需修改现有代码。 - **集中...
**J2EE架构与应用详解** J2EE(Java 2 Platform, Enterprise Edition)是Java平台上用于构建...通过分析和实践提供的代码实例,不仅能够加深理论理解,还能提升实际开发技能,对于Java开发者来说是一份宝贵的资源。
3. **代码中使用**:在Java代码中,通过`InitialContext`实例化并调用`lookup()`方法查找资源。 ```java Context initialContext = new InitialContext(); DataSource dataSource = (DataSource) initialContext....
2. **JNDI实例化** 在应用程序中,你可以通过JNDI查找刚创建的数据源。以下是一个简单的Java代码示例: ```java Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:...
- **EJB Home Stub及EJB环境变量**:在EJB(Enterprise JavaBeans)环境中,JNDI用来查找EJB的Home接口,以及EJB实例的环境配置信息。 - **JDBC DataSource**:用于查找和管理数据库连接资源。 - **JMS Connection ...
通过JNDI,开发者可以将这些资源的配置信息与实际代码分离,增强了代码的可移植性和可维护性。 Tomcat中的JNDI主要分为两部分:全局JNDI和Web应用局部JNDI。全局JNDI通常用于配置跨多个Web应用的共享资源,如全局...