JNDI的主要作用是作为一种服务定位机制,能够将用户抽象出来的服务名称映射到具体的服务实现对象。就好像一个电话簿,用户知道了联系人的名字(服务名称),电话簿可以帮助找到该联系人的电话号码(服务对象)。
在Java EE环境中,常见的如DataSource(数据源)、EJB(Enterprise JavaBeans,企业级JavaBeans)、JMS(Java Message Service,Java消息服务)等服务都可以注册到JNDI,然后在程序中通过名字查找和使用。
让我们以Java EE应用服务器(如Tomcat、WebLogic、JBoss等)中的数据源作为例子,深入了解JNDI的使用。数据源是数据库连接池的抽象,包含了获取数据库连接所需的所有信息。
当你在Java EE服务器中配置一个数据源时,会给它一个名字(例如,"jdbc/mydb"),然后这个数据源就会被注册到JNDI服务。然后,你就可以在你的Java EE应用程序中这样使用:
Context context = new InitialContext();
DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/mydb");
Connection conn = ds.getConnection();
在这个例子中,"java:comp/env/jdbc/mydb"就是数据源在JNDI中注册的名字。通过使用Context.lookup()
方法,我们可以从JNDI中查找到对应的数据源对象。
JNDI有一些明显的优点:
总的来说,JNDI是Java EE中不可或缺的一部分,它在服务查找和访问中扮演着关键角色。通过使用JNDI,我们可以简化代码,提高代码的移植性,同时提高了应用的灵活性和扩展性。