JNDI绑定数据库
经过3个多小时的努力,配置JNDI数据源(主要是通过DBCP连接池)终于搞定~
还是Tomcat官方的说明好,不过全是英文的,大概还看得懂.
百度上那么花花绿绿的太多了,一个也没成功!...
本例使用的数据库为Ms SQL Server 2000,对于其它数据库只是修改一下相应的参数即可,
服务器是Tomcat5.5, 与之间的版本配置连接池最简便
自己总结了一下,希望起到一个抛砖引玉的作用
总结:
第一步:
将驱动程序(jar包)放到tomcat安装目录下的common\lib文件夹下
第二步:
在Tomcat的webapps目录随便创建一个工程目录,例如myjdbc。在myjdbc目录下创建META-INF目录,在此目录下创建一个context.xml文件,里面的内容如下:
<Context>
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa" password=""
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localhost/pubs"/>
</Context>
附注如下:
Tomcat标准数据源资源工厂配置项如下:
* driverClassName - 所使用的JDBC驱动类全称。
* maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。
* maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。
* maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
* password - 传给JDBC驱动的数据库密码。
* url - 传给JDBC驱动的连接URL。
* user - 传给JDBC驱动的数据库用户名。
* validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。
* 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句。
jdbc/test是数据源的名称(随意写,要和web.xml文件中 <res-ref-name>jdbc/test</res-ref-name> 一样即可),
其他的参数按照自己的实际情况进行修改,例如数据库的名称、账号、密码。
第三步:
在myjdbc目录下创建WEB-INF目录,创建web.xml文件,内容如下:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
说明:
<resource-ref>
<descrtiption>引用资源说明</descrtiption>
<res-ref-name>引用资源的JNDI名</res-ref-name>
<res-type>引用资源的类名</res-type>
<res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web应用管理-->
</resource-ref>
第四步:
写个jsp,试一下吧!
=java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection
try
{
初始化查找命名空间
Context ctx InitialContext();
InitialContext ctx InitialContext();亦可
找到DataSource,对名称进行定位java:compenv是必须加的,后面跟你的DataSource名
DataSource ds (DataSource)ctx.lookup(java:comp/env/jdbc/test);
取出连接
Connection conn ds.getConnection();
System.out.println(connection pool connected !!);
} catch (NamingException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
e.printStackTrace();
}finally
{
注意不是关闭,是放回连接池.
conn.close();
}
}
或写个JSP用标签库测试一下:
=http://java.sun.com/jsp/jstl/sql prefix""%>
=http://java.sun.com/jsp/jstl/core prefix""%>
<sql:query var="rs" dataSource="jdbc/test">
select * from authors
</sql:query>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<c:forEach var="row" items="${rs.rows}">
${row.city}<br/>
</c:forEach>
</body>
</html>
我成功了!Good Luck!
以下是配置JNDI的其他方法,个人不建议使用,因为修改服务器的
server.xml和web.xml,如果有一点错误,你的容器就会崩溃~
注:连接数据源的方法还有很多,在这里我简要说之:
比如说第二步还可以这么做:
在/tomcat/conf/Catalina/localhost(或其它主机名)/中添加以
虚拟目录名称(你的工程名)命名的XML文件来配置context.
比如我的主机下有个目录dbpool其地址为tomcat/webapps/test我可以这样来配置这个上下文:
在tomcat/conf/Catalina/localhost/目录下创建test.xml文件,内容和上面一样.
还可以:
在/tomcat/conf/server.xml中<host></host>标签之间添加
debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localhost/pubs"/>
</Context>
其中path是你的工程路径(相对或绝对亦可),其中docBase="test"说明,此主机已经指向到webapps目录下了,回头
来看test这个上下文,它实际目录是位于webapps的目录下的,所以
在Context中我们可以将docBase直接设置为test了。如果它在webapps/dbpool/test下,则设置为dbpool/test就可以了。
附:JNDI——Java Naming and Directory Interface是一套提供naming和 directory功能的 API,
Java应用程式开发者透过使用 JNDI,在naming和 directory方面的应用上就有了共通的准则.
另一种方法:eclipse中修改catalina.properties,servers.xml,context.xml都直接在eclipse的server目录下修改,否则发布一次项目就被覆盖了。除非是war包形式发布项目,则可以直接在tomcat下修改
第一步:(1)把数据库驱动的jar包,放入tomact解压文件的lib文件下:db2jcc.jar,db2jcc_license_cu.jar
(2)在config目录下,打开catalina.properties文件。在tomcat.util.scan.DefaultJarScanner.jarsToSkip节点后加上db2*.jar
第二步:(1)在config目录下的servers.xml中填写如下(在全局节点下配置)
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
<!--此处为jndi的配置 -->
<Resource auth="Container" driverClassName="com.ibm.db2.jcc.DB2Driver" maxActive="50" maxIdle="30" maxWait="10000" name="NMCRW" password="mobilebe" type="javax.sql.DataSource" url="jdbc:db2://172.17.101.101:50001/HAPPY" username="mobilebe"/> </GlobalNamingResources>
(2)在config目录下的context.xml中配置节点指向jndi的配置
<!-- 引用刚才在全局配置的jndi数据源 -->
<ResourceLink global="NMCRW" name="NMCRW" type="javax.sql.DataSource"/>
第三步:(1)spring配置jndi的工厂bean
<!-- jndi的spring -->
<bean id="dataSourceNmc" class="org.springframework.jndi.JndiObjectFactoryBean">
<!-- jndi名字在tomcat中的书写格式java:comp/env/+jndi名字 -->
<property name="jndiName">
<value>java:comp/env/NMCRW</value>
</property>
</bean>
JNDI绑定数据库的更多相关文章
- TreeView树形控件递归绑定数据库里的数据
TreeView树形控件递归绑定数据库里的数据. 第一种:性能不好 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 <% ...
- comboBox绑定数据库、模糊查询
实现: 一.绑定数据库 点击查询按钮,comboBox显示从数据库查到的某字段的一列数据 方法:在按钮的点击事件绑定数据库 private void button1_Click(object send ...
- 理解asp.net中DropDownList编辑数据源,绑定数据库数据。
一.理解asp.net绑定数据库 终于学习到了连接数据库部分的内容,杨中科老师视频看起来挺轻松的,如果是高清版就更ok了. 我发现我学习新的编程语言会有一个特点,都想要赶紧学习数据库,数据就是一切,有 ...
- 如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示
今天学习了下如何间接绑定数据库网上看了很多信息,都云里雾里,没有图片说明,初学者完全看不懂,我自己做了一个DEMO,相信可以帮到大家! 一.建立数据库,并构建表信息,我的表信息如下: 表中的数据在数据 ...
- Repeater绑定数据库,使用AspNetPager进行分页
分页是Web中经常遇到的功能,分页主要有真分页和假分页. 所谓真分页是指:每一页显示多少数据,就从数据库读多少数据: 假分页是指:一次性从数据库读取所有数据,然后再进行分页. 这两种分页方式区别在于从 ...
- JavaEE(2) - Weblogic 服务器执行JNDI绑定和查找
1. 应用服务器默认添加的系统属性 NetBeans创建java web project(ctxTest) (index.jsp) <%@page import="java.util. ...
- silverlight中 ComboBox绑定数据库,并获取当前选定值
silverlight中 ComboBox绑定数据库,并获取当前选定值 在silverlight中 用combobox下拉菜单绑定数据库的方法和用DataGrid绑定数据库的方法类似. page.xa ...
- Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库
Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1 : TDataSource; Clie ...
- dropdownlist同时绑定数据库和自定义内容
在有些时候,我们需要dropdownlist里面包含“全部”这个字段,但是数据库中不存在“全部”,只存在具体的分类项. 这种情况下就需要先把数据库的数据源绑定到dropdownlist中,然后再在后面 ...
随机推荐
- cellspacing与cellpadding
此文引用自cellpadding和cellspacing属性来控制表格边框的间距. 作者:nestea 巢(cell) -- 表格的内容 巢补白(表格填充)(cellpadding) -- 代表巢外面 ...
- jackson set properties to default value (取消让jackson 赋予默认值)
you can define it with Integer rather than int or long. define it with a package type. jackson wont' ...
- Hbase Shell命令
1 启动HBase shell 2 HBase shell 命令 3 我们将以“一个学生成绩表”的例子来详细介绍常用的 HBase 命令及其使用方法. 这里 grad 对于表来说是一个列,course ...
- Mita和Maui
参考:http://blog.csdn.net/popeer/article/details/6002541 UI自动化的框架,MS内部使用的不对外开放的框架.UI Automation 离不开像Mi ...
- Linux软链接和硬链接
Linux中的链接有两种方式,软链接和硬链接.本文试图清晰彻底的解释Linux中软链接和硬链接文件的区别. 1.Linux链接文件 1)软链接文件 软链接又叫符号链接,这个文件包含了另一个文件的路径 ...
- TForm的显示过程
新建一个空窗体项目,然后运行,此时首先运行: procedure TApplication.Run; begin FRunning := True; try AddExitProc(DoneAppli ...
- Oracle 全文索引相关命令
--用sys用户登录,解锁ctxsys用户alter user ctxsys account unlock; --授权给对应用户grant execute on ctx_ddl to yw; --用y ...
- http://blog.csdn.net/xiamizy/article/details/40781939
http://blog.csdn.net/xiamizy/article/details/40781939
- 如何避免JSP页面自动生成session对象?为什么要这么做?
JSP // 在默认情况下,在对一个JSP页面发出请求时,如果session还没有建立,JSP页面会自动为请求建立一个session对象,但是session是比较消耗资源的,如果没必要保持和使用ses ...
- Crypto API加密通信流程
应用程序使用Crypto API进行加密通信的一般步骤如下: 1,include wincrypt.h 2,调用CryptAcquireContext()获得某个CSP模块中的密钥容器(key con ...