作为
j2ee小菜鸟,初次遭遇
JNDI还是在大三的时候,当时学院搞
j2ee实训,我们还没搞清楚
servlet和
JSP就依葫芦画瓢的搞
Struts了。所以在配置
mysql-
ds.xml的时候完全不知道在配置
DataSource,现在知道这就是在使用JNDI。网上查了几个网页,拼拼凑凑,模模糊糊地理解了:
JNDI——Java Naming and Directory InterfaceTM
直接翻译就是Java命名和目录接口,实现这个接口,提供的是一个服务,这是个什么样的服务呢?
首先在连接数据库的时候(我使用的是mysql和jboss4.0),我们会用到Context这个类,context是一套name-to-object的绑定,可以理解为层次或目录,他可以包括下一层subContext。在使用命名和目录服务时获得initial context 是对整个名字空间操作的入口。
针对Datasource而言,说白了,就是给你的数据库连接(注意,是数据库连接Connection这个对象,不是数据库)起个简单易懂的名字,你在程序中直接调用这个名字,就得到这个连接的对象,而具体的生成和管理就靠服务器了。
通常会形成一个connection pool,动态的来管理这些对象以节省资源。
这样,如果项目移植到其它数据库或者服务器什么的,只要配置服务器就行了。配置比如这个连接用什么JDBC驱动啊,用户名和密码啊等等。程序代码可以不作改动。这里的DataSource不一定就是数据库连接,还可以是其它比如文件连接等等。
其实EJB都是靠JNDI得到EJB object的reference的,具体的机理是不太了解,不过就是那个意思,初学者这样理解应该就够了。
今天郁闷了半天,在jboss里面配置JNDI DataSource,想看看如果外面直接用普通的Java工程能不能连接数据库,答案是否。后来想通了。服务器提供JNDI服务所使用的类,这个普通的工程又不知道在哪,当然搞不起来。而Web工程和EJB工程因为发布到服务器下面的目录的,所以能使用JNDI服务。
这是我的理解,请各位高手指点。
至于JBoss等等服务器怎么配置,网上搜一下,有很多牛人总结的,这里就不重复了。