原文作者:阿堂
在j2ee项目中,使用数据源配置,无外乎jdbc和jndi的配置,对于jdbc配置,没有什么好说的,对于jndi的配置,要稍显麻烦一些.这里分三种情况总结一下:第一种是没有用任何框架,第二种是只使用struts框架,第三种是使用struts和hibernate框架整合(ssh时类
似).
(以下是指的tomcat5.5环境,在tomcat5.0环境中,在server.xml中的写法,有点不一样,具体请参看阿堂写的在"Tomcat中
配置数据源出现问题的解决方法"
http://blog.sina.com.cn/s/blog_4c925dca010098u5.html
)
第一种情况没有使用任何框架
第一步.在web.xml中配置如下
<description>MYSQL JNDI TEST</description>
<resource-ref>
<description>DB Connection test</description>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
第二步 在tomcat的server.xml文件中配置如下
放在<host></host>之间就可以了
<Context path="/jdniTest080220" debug="0" reloadable="true" privileged="true"
docBase="E:\workprojects\jndiTest080220"
workDir="E:\workprojects\jndiTest080220\WebRoot">
<Resource
name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/test"
username="root"
password="admin"
maxActive="20"
maxIdle="10"
maxWait="10000" />
</Context>
第三步.在jsp文件具体调用
<%
DataSource ds = null;
try{
Context initCtx = new InitialContext();
if (initCtx == null) throw new Exception("Initial Failed!");
Context ctx = (Context) initCtx.lookup("java:comp/env");
if (ctx != null) ds = (DataSource) ctx.lookup("jdbc/test");
if (ds == null) throw new Exception("Look up DataSource Failed!");
}catch (Exception e){
System.out.println(e.getMessage());
}
%>
<%
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from student");
while (rs.next()){
%>
<%=rs.getInt(1) %>:<%=rs.getString(2) %>
<%
}
rs.close();
stmt.close();
conn.close();
%>
在ie中调用方法
http://localhost:8888/jdniTest080220/
第二种情况只使用struts框架
第一步.在tomcat中的server.xml文件中<GlobalNamingResources></GlobalNamingResources>之间添加如下代码
<Resource name="jdbc/sqlserver" auth="Container"
type="javax.sql.DataSource" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=Logis;SelectMethod=Cursor"
username="sa" password="" maxActive="50" maxIdle="4" maxWait="5000"/>
第二步在tomcat对应的如下目录中%tomcat5520%\Catalina\localhost新建一个TmsOrder.xml文件,内容如下
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="TmsOrder" path="/TmsOrder" workDir="work\Catalina\localhost\TmsOrder">
<ResourceLink global="jdbc/sqlserver" name="jdbc/sqlserver" type="javax.sql.DataSourcer"/>
</Context>
第三步在项目中一个公共类中,调用jndi数据源的方法如下
public class GetConnection {
private Connection conn = null;
private DataSource dataSource = null;
private Context ctx = null;
public GetConnection(){}
public Connection getConnection() {
try{
ctx = new InitialContext();
dataSource =(DataSource)ctx.lookup("java:comp/env/jdbc/sqlserver");
conn = dataSource.getConnection();
return conn;
}catch(Exception e){
System.out.println("获得连接池:"+e.getMessage());
return conn;
}
}
public void closeConn() {
try {
if( conn != null ){
conn.close();
}
} catch( SQLException e ) {
e.printStackTrace();
}
}
}
在ie中调用
http://localhost:8888/TmsOrder
第三种情况使用struts+hibernate框架(使用ssh时,做法类似)
第一步在hibernate.cfg.xml文件配置如下
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="connection.datasource">
java:comp/env/jdbc/mldn
</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="cn/mldn/lxh/login6/vo/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
第二步.在tomcat中的server.xml文件中<GlobalNamingResources></GlobalNamingResources>之间添加如下代码
<Resource name="jdbc/mldn" auth="Container"
type="javax.sql.DataSource" driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/mldn"
username="root" password="admin" maxActive="50" maxIdle="4" maxWait="5000"/>
第三步在tomcat对应的如下目录中%tomcat5520%\Catalina\localhost新建一个SHLogin.xml文件,内容如下
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="TmsOrder" path="/TmsOrder" workDir="work\Catalina\localhost\TmsOrder">
<ResourceLink global="jdbc/sqlserver" name="jdbc/sqlserver" type="javax.sql.DataSourcer"/>
</Context>
第四步.在公共类中调用连接数据源的方法如下
public class DefaultSessionFactory {
public static Session getSession() {
Session session = null;
session = new Configuration().configure().buildSessionFactory().openSession();
return session;
}
}
在ie中调用
http://localhost:8888/SHLogin
在tomcat 6.0下配置JNDI及在Spring中的使用
第一步:在tomcat6.0的conf文件夹下找到 context.xml 文件,在<context></context>中加入
<Resource name="jdbc/demo" <!-- JNDI名称 -->
auth="Container" <!-- 此处和web.xml中对应 -->
type="javax.sql.DataSource" <!-- 数据源类型 -->
password="1234" <!-- 数据库访问密码 -->
username="demo" <!-- 数据库访问用户名 -->
driverClassName="oracle.jdbc.OracleDriver" <!-- 数据库驱动类 -->
url="jdbc:oracle:thin:@127.0.0.1:1521:DEMO" <!-- 数据库访问url -->
maxActive="100" <!-- 最大活动数 -->
maxIdle="30"
maxWait="5000" <!-- 最大等待时间 -->
/>
第二步:在web.xml中加入
<resource-ref>
<res-ref-name>jdbc/demo</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
第三步:在spring配置文件中配置dataSource
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/smap"></property>
</bean>
如此3步,在Spring中即可进行数据源注入。
1、配置Tomcat5.5.X的Server.xml,在<host>下面加上
<Context path="/JNDIDemo" docBase="D:\workspace\JNDIDemo\WebRoot" debug="0"
reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log."
suffix=".txt" timestamp="true"/>
<Resource
name="jdbc/test" <!-- JNDI数据池名称 -->
type="javax.sql.DataSource" <!-- 数据类 -->
password="karid" <!-- 密码 -->
driverClassName="oracle.jdbc.driver.OracleDriver" <!-- 驱动 -->
maxIdle="2" <!-- 最少可用lia -->
maxWait="5000" <!-- 最大等待时间 5秒 -->
username="karid" <!-- 用户名 -->
url="jdbc:oracle:thin:@127.0.0.1:1521:karid"
maxActive="4" <!-- 最大可用连接 --> />
<ResourceParams name="jdbc/test">
<parameter>
<name>removeAbandoned</name>
<!-- Abandoned DB connections are removed and recycled -->
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<!-- Use the removeAbandonedTimeout parameter to set the number of seconds a
DB connection has been idle before it is considered abandoned. -->
<value>60</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<!-- Log a stack trace of the code which abandoned -->
<value>false</value>
</parameter>
<parameter>
<name>factory</name>
<!--DBCP Basic Datasource Factory -->
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
</ResourceParams>
2、配置web.xml
<description>MySQL Test App</description>
<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>
3、JNDI使用
Java代码
public class DataSourceFactory{
private static DataSource ds;
public static DataSource createDataSourde(){
if (ds == null) {
try {
Context initContext = new InitialContext();
if (initContext == null) System.out.println("无配置环境");
Context envContext = (Context) initContext.lookup("java:/compenv");
ds = (DataSource) envContext.lookup("jdbc/test"); //根据名称取得数据源
}catch (NamingException e){
e.printStackTrace();
}
}
return ds;
}
}
分享到:
相关推荐
**Jetty嵌入式服务器的JNDI快速配置指南** Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,常被用于嵌入式环境,因为它可以方便地与应用程序集成,无需独立部署。JNDI(Java Naming and Directory ...
总结,JNDI提供了灵活的方式连接到数据库,无论是通过应用服务器的预配置数据源,还是通过`@Resource`注解,或是直接的JNDI查找。理解并熟练掌握这些方法,能够帮助开发者更好地管理和维护Java应用中的数据库连接,...
本文旨在解决Java开发者在使用Java Naming and Directory Interface (JNDI)时遇到的问题,特别是那些涉及到EJB(Enterprise JavaBeans)组件查找和访问的过程。对于刚接触EJB技术的新手来说,正确设置并配置JNDI环境...
为了在Hibernate配置中使用JNDI DataSource,需要在`hibernate.cfg.xml`文件中指定相关设置: ```xml <!-- 其他配置 --> <property name="connection.provider_class">org.hibernate.connection.C3P0...
这个教程“SUN JNDI Tutorial”是官方提供的详细指南,旨在帮助开发者理解和使用JNDI。 在JNDI中,命名服务是存储和检索对象的名字到对象映射的地方,而目录服务则扩展了命名服务,提供了更丰富的查询能力,允许...
总结,Java API for LDAP通过JNDI提供了一套全面的工具,使得Java开发者能够在其应用程序中轻松地与LDAP服务器交互。通过学习和实践,开发者可以掌握创建、读取、更新和删除LDAP目录中的数据,以及执行更高级的操作...
本文档提供了一个关于JNDI和LDAP的入门指南,涵盖了JNDI References的基础知识,LDAP协议的核心概念,包括命名模型、功能模型和安全模型,以及如何搭建和配置LDAP服务器。文档中的实例代码展示了如何利用Java技术栈...
**JBOSS 4.2.2GA 使用指南** JBOSS是一款开源的企业级Java应用服务器,基于Java 2企业版(J2EE)规范。JBOSS 4.2.2GA是其一个特定的稳定版本,发布于2007年,提供了一个全面的平台来部署和管理各种Java应用程序和...
总结:JBoss开发人员指南旨在帮助开发者掌握JBoss的各项核心功能,从安装部署到应用开发、性能优化,全面解析JBoss的使用和管理,为构建稳定、高效的企业级应用提供有力支持。通过深入学习和实践,开发者将能够充分...
本指南将深入探讨金蝶容器的运维与使用,同时也会介绍JNDI(Java Naming and Directory Interface)的基础知识。 一、金蝶容器的运维 1. 安装与配置:金蝶容器的安装过程通常包括下载安装包、解压、配置环境变量、...
### Java EE 5 编程指南 #### 一、概述 《Java EE 5 编程指南》是由 Sun Microsystems 公司出版的...以上是对《Java EE 5 编程指南》的一些关键知识点的总结,希望能够帮助到正在学习或准备学习 Java EE 5 的读者们。
- **章节内容**:第五至六章讲解了JNDI的工作原理、配置方法以及如何使用JNDI进行命名服务和目录访问。 - **知识点**: - JNDI的基本概念和工作原理; - JNDI环境的配置与初始化; - 使用JNDI进行对象绑定、查找...
本指南涵盖了LDAP的基本概念,Java LDAP API的使用,以及如何通过Java进行连接、查询和操作LDAP目录。了解这些知识,开发者可以高效地在Java应用中整合LDAP服务,实现用户认证、权限管理等功能。记住,实践是检验...
### J2EE应用程序开发指南知识点总结 #### 一、J2EE概述 - **定义**:J2EE(Java 2 Platform, Enterprise Edition)是一种基于Java的平台标准,专为开发企业级应用而设计。 - **历史背景**:1993年,James Gosling...
### EJB3.0开发指南知识点详解 #### 一、EJB3.0概述与特点 EJB(Enterprise JavaBeans)3.0是Java EE平台的一部分,用于构建可移植、健壮、重用性强的企业级应用程序。相比于之前的版本,EJB 3.0引入了大量的简化...
7. **Java Naming and Directory Interface (JNDI)** - 提供了查找和绑定服务,使得应用可以发现和使用分布式环境中的资源。 8. **Java Transaction API (JTA)** - 为分布式事务处理提供了一套接口,确保在多个操作...
总结,JSP数据库编程涉及了JDBC、DataSource、JNDI、Servlet、JSTL等多个方面。通过合理地运用这些技术,可以构建高效、安全的Web应用。在实际开发中,还需要关注性能优化、错误处理以及安全性问题,以提供更好的...
- **设置企业Bean的JNDI名**:解释了如何使用JNDI(Java Naming and Directory Interface)为EJB命名。 - **部署J2EE应用程序**:描述了部署J2EE应用程序的过程。 - **运行J2EE应用程序客户端**:指导如何启动和...
### AD安装配置指南知识点梳理 #### 一、概述 - **目标**:通过Java的JNDI技术结合LDAP协议操作Active Directory(AD),实现与OA系统的用户和密码同步,达到单点登录的目的。 - **环境**:基于Windows 2000 Server...