JNDI及其在开发中的应用

JNDI:(Java Naming and Directory Interface,Java命名和目录接口)是Java API,借助于它提供的接口,开发者能够通过名字定位用户、机器、网络、对象、服务。
在学习JNDI前,很有必要学习下“命名和目录服务”:
名字类似于引用,即能够标识某实体、人等。命名服务类似于话务员,能帮你找到你想要通话对象的电话号码。命名服务能够完成如下几方面任务的实体:
1. 名字和对象绑定在一起
2. 能够提供依据名字查找对象的机制
在企业计算领域,命名服务随处可见,比如DNS能够将机器名转换成IP地址等。
在当今世界,有很多不同的命名和目录产品,他们基于各自的命名和目录标准,为了使这些产品之间能够相互交互,我们引出了JNDI。
在JAVA 开发中,JNDI的应用
一、定位各种资源工厂,比如定位数据源等
比如,我们在用到Spring的项目中,ApplicationContext.xml中定位数据源可以这么做:

引用

<bean id="DataSource"
  class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName">
   <value>java:comp/env/jdbc/dbname</value>
  </property>
</bean>

当然了,你的jndiname需要在服务启动的时候加载到容器中:
比如容器如果是tomcat的话,我们把类似于如下的一个配置文件放到conf下:
引用

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- 开发环境  -->
<Resource name="jdbc/dbname" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="awpdr" password="awpdr" driverClassName="oracle.jdbc.driver.OracleDriver"
               url="jdbc:oracle:thin:@12.1.10.120:1521:dbname"/>

<Resource name="jdbc/dware" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="dwawpuser" password="dwawpuser" driverClassName="com.teradata.jdbc.TeraDriver"
url="jdbc:teradata://10.1.1.82/client_charset=cp936,COMPAT_DBS=TRUE,COMPAT_GETTABLE=TABLE,database=DWMART_AWP"/>


</Context>

相应的,也要在web.xml 中加入如下配置代码:
引用

<!-- DB POOL -->
<resource-ref>
  <res-ref-name> jdbc/dbname</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

<resource-ref>
  <res-ref-name> jdbc/dware</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

总之,在项目中利用JNDI来定位数据源是种常见的用法。
二、客户和EJB组件能够借助与JNDI查找其他EJB组建
比如,我们在用EJB开发时(weblogic作为server),需要在相应的xml中有类似这样的配置:
引用

<weblogic-enterprise-bean>
<ejb-name>DcrsConsumerRecoveryAssignmentEJB</ejb-name>
<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>ejb/hxb/dcrs/QueryEJB</ejb-ref-name>
<jndi-name>ejb/hxb/dcrs/QueryEJB</jndi-name>
</ejb-reference-description>
<ejb-reference-description>
<ejb-ref-name>ejb/hxb/dcrs/GenericEJB</ejb-ref-name>
<jndi-name>ejb/hxb/dcrs/GenericEJB</jndi-name>
</ejb-reference-description>
<ejb-reference-description>
<ejb-ref-name>ejb/WFExecutionEngine</ejb-ref-name>
<jndi-name>
ejb/solution/dbps/WFExecutionEngine
</jndi-name>
</ejb-reference-description>
<ejb-reference-description>
<ejb-ref-name>ejb/WFMonitoringManager</ejb-ref-name>
<jndi-name>
ejb/solution/dbps/WFMonitoringManager
</jndi-name>
</ejb-reference-description>
</reference-descriptor>
<jndi-name>
ejb/hxb/batch/ConsumerRecoveryAssignmentEJB
</jndi-name>

</weblogic-enterprise-bean>


你可能感兴趣的:(jdbc,SQL Server,网络应用,ejb,企业应用)