WebLogic配置JNDI数据源
一、什么是jndi数据源
JNDI是Java命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一。
我们平时开发web程序的时候,在连接数据库的时候,往往会编写一个连接数据库的类,
例如连接Mysql的类:
- package cn.edu.hpu.util;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class DB {
- // 定义MySQL的数据库驱动程序
- public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
- //定义mysql的数据库连接地址:
- public static final String DBDURL = "jdbc:mysql://localhost:3306/iqweb" ;
- //mysql数据库的连接用户名
- public static final String DBUSER = "root" ;
- //mysql数据库的连接密码
- public static final String DBPASS = "1234" ;
- static{
- try {
- Class.forName(DBDRIVER);
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public static Connection getConnection(){
- Connection conn=null;
- try {
- conn=DriverManager.getConnection(DBDURL,DBUSER,DBPASS);
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return conn;
- }
- public static void close(ResultSet rs,Statement st,Connection conn){
- try {
- if(rs!=null){
- rs.close();
- }
- if(st!=null){
- st.close();
- }
- if(conn!=null){
- conn.close();
- }
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public static void close(Statement st,Connection conn){
- close(null,st,conn);
- }
- }
可以看到,我们的数据库的驱动名,数据库名称,账号和密码都是通过“硬编码”写死在
程序里的。一旦我们的项目需要数据迁移,或者更换数据库的时候,我们就要停止应用,在代码中
修改数据库的连接信息,这样做非常繁琐和不安全。即使不更换数据库,我们在改变数据库的最大
连接数和最小连接数,以及数据库的其它配置等等,都需要在代码中进行修改,这十分不友好。
我们需要一种外部的数据源,来指定我们的应用程序来链接数据库,对此,我们的应用程序不必
关心数据库的配置,数据库的配置交由独立的模块管理和配置。
近年来,Web开发中涌现了许多框架,如hibernate/Mybatis/Spring,使用他们,可以通过
“数据库连接池”来管理数据库的链接和配置:
- <!-- 配置c3p0数据源 -->
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
- <property name="jdbcUrl" value="${jdbcUrl}"></property>
- <property name="driverClass" value="${driverClass}"></property>
- <property name="user" value="${user}"></property>
- <property name="password" value="${password}"></property>
- <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
- <property name="initialPoolSize" value="${initialPoolSize}"></property>
- <!--连接池中保留的最小连接数。Default: 3 -->
- <property name="minPoolSize" value="3"></property>
- <!--连接池中保留的最大连接数。Default: 15 -->
- <property name="maxPoolSize" value="${maxPoolSize}"></property>
- <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
- <property name="acquireIncrement" value="3"></property>
- <!--最大空闲时间,1800秒内未使用则连接被丢弃,若为0则永不丢弃。Default: 0 -->
- <property name="maxIdleTime" value="1800"></property>
- </bean>
并且把数据库配置单独放置在porperties配置文件中:
这样做就在应用层实现了数据库配置信息独立的机制。这样会使应用程序的数据库配置更加灵活。
而我们的WebLogic服务器,拥有绑定Jndi数据源的功能,也就是服务器来对应用程序的数据库配置
进行托管,应用程序只需要在其应用代码中制定使用jndi模式链接WebLogic的数据源信息即可。
当需要修改数据库信息的时候,根本不需要动应用程序的东西,只需要调整WebLogic的jndi数据源
中的数据库配置信息即可。
也即是说,WebLogic的jndi机制,在服务层实现了数据库配置信息独立的机制。
二、新建Mysql的JNDI数据源
访问http://localhost:7001/console/,登录进入WebLogic控制台主页。
点击左侧“域结构”下的“服务”下的“数据源”选项:
选择新建,一般数据源。
填写数据源的名称,JNDI名称以及选择数据库类型:
选择数据库驱动版本:
其它配置按照默认即可:
填写数据库的连接信息:
接下来点击测试配置,看一下是否能连接成功:
出现“连接测试成功”即表示数据库配置没有问题。
点击下一步,勾选服务器。
点击完成之后,我们服务器端的JNDI数据源就配置完毕了。
三、应用程序引用WebLogic的jndi数据源
我们在MyEclipse中创建一个WebProject测试工程:
我们在src中创建一个数据库连接类:
编写该连接类:
- package com.cn.opensource.dbConn;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.Properties;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.sql.DataSource;
- public class DatabaseConnection {
- //初始化上下文需要用到的工厂类
- private final static String INITIAL_CONTEXT_FACTORY="weblogic.jndi.WLInitialContextFactory";
- //WebLogic服务器的访问地址
- private final static String PROVIDER_URL="t3://127.0.0.1:7001";
- //WebLogic服务器中的JNDI数据源名称
- private final static String MYSQL_JNDI_NAME="JNDI-MySqlDataSource";
- //存储从JNDI容器中取出来的数据源
- private static DataSource dsOracle = null;
- private static DataSource dsMySQL = null;
- static {
- try {
- //初始化WebLogic Server的JNDI上下文信息
- Context context = getInitialContext();
- //获取数据源对象
- dsMySQL = (DataSource) context.lookup(MYSQL_JNDI_NAME);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * MethodName: getInitialContext
- * Description: 获得WebLogic ServerJNDI初始上下文信息
- * @return
- * @throws Exception
- */
- private static Context getInitialContext() throws Exception {
- Properties properties = new Properties();
- //指定工厂类
- properties.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
- //指定服务器访问地址
- properties.put(Context.PROVIDER_URL, PROVIDER_URL);
- return new InitialContext(properties);
- }
- /**
- * MethodName: getMySQLConnection
- * Description: 获取MySQL数据库连接
- * @return
- * @throws SQLException
- */
- public static Connection getMySQLConnection() throws SQLException {
- return dsMySQL.getConnection();
- }
- /**
- * MethodName: CloseConnection
- * Description: 关闭数据库连接
- * @return
- * @throws SQLException
- */
- public static void Close()throws SQLException {
- if(dsMySQL!=null){
- dsMySQL.getConnection().close();
- }
- }
- }
然后,我们创建一个Servlet,测试数据库是否连接成功并取到数据:
编写Servlet内容:
- package com.cn.opensource.dbConn;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class JndiConnectionServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
- out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
- out.println("<HTML>");
- out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
- out.println(" <BODY>");
- out.print("<h1>测试JNDI数据源连接</h1>");
- Connection conn = null;
- Statement st = null;
- ResultSet rs = null;
- try {
- conn = DatabaseConnection.getMySQLConnection();
- String sql = "select * from teacher";
- st = conn.createStatement();
- rs = st.executeQuery(sql);
- int i=0;
- while (rs.next()) {
- i++;
- out.println("第"+i+"个教师信息");
- out.println("编号:"+rs.getInt("number"));
- out.println("姓名:"+rs.getString("name"));
- out.println("性别:"+rs.getString("sex"));
- out.println("所属班级:"+rs.getString("classname"));
- out.println("住址:"+rs.getString("address"));
- out.println("<br/>");
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- } finally {
- try {
- DatabaseConnection.Close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- out.println(" </BODY>");
- out.println("</HTML>");
- out.flush();
- out.close();
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request,response);
- }
- }
如果编译器没有给你自动在Web.xml中配置Servlet,别忘记自己配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="3.0"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
- <servlet>
- <servlet-name>JndiConnectionServlet</servlet-name>
- <servlet-class>com.cn.opensource.dbConn.JndiConnectionServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>JndiConnectionServlet</servlet-name>
- <url-pattern>/servlet/JndiConnectionServlet</url-pattern>
- </servlet-mapping>
- </web-app>
接下来,将我们的测试程序部署在WebLogic服务器中:
启动服务器,访问应用路径,可以看到:
打开数据库的teacher表,数据一致
说明我们配置的数据源连接成功了!
转载请注明出处:http://blog.csdn.net/acmman/article/details/70146603
WebLogic配置JNDI数据源的更多相关文章
- WebLogic使用总结(三)——WebLogic配置JNDI数据源
一.在WebLogic新建针对Oracle数据库的JNDI数据源 进入weblogic管理控制台,此处是远程访问:http://192.168.1.144:7001/console 点击左侧[ 域结构 ...
- 【WebLogic使用】3.WebLogic配置jndi数据源
参见博客:https://blog.csdn.net/acmman/article/details/70146603 参考视频教程: 一.什么是jndi数据源JNDI是Java命名与目录接口(Java ...
- weblogic配置jdbc数据源
weblogic配置jdbc数据源的过程 方法/步骤 启动weblogic 管理服务器,使用管理用户登录weblogic管理控制台 打开管理控制台后,在左侧的树形域结构中,选择服务->数 ...
- weblogic配置oracle数据源
在weblogic配置oracle数据源还是挺简单的,网上也有很多关于这方面的文章,写给自己也写给能够得到帮助的人吧.weblogic新建域那些的就不说了哈.点击startWebLogic文件,会弹出 ...
- JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...
- JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar
- Tomcat配置JNDI数据源
经过3个多小时的努力,配置JNDI数据源(主要是通过DBCP连接池)终于搞定-还是Tomcat官方的说明好,不过全是英文的,大概还看得懂.百度上那么花花绿绿的太多了,一个也没成功!...本例使用的数据 ...
- Tomcat下使用Druid配置JNDI数据源
com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...
- Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包
随机推荐
- 分页式存储管理方式AND请求分页式存储管理
先说下什么是页(页面):就是将用户的程序的的地址空间分成固定大小的区域,称为”页“,或者”页面“ 之后将这些页离散的放进内存中,这样解决了内存的碎片问题 记得老师上课说了下这两个概念不能混,现在区分下 ...
- shell统计各省的百强县
原始数据在最后 baiqiang.txt文件中 shell命令: cat baiqiang.txt | grep -P "^国|^☆" | awk -F" " ...
- 《用 Python 学微积分》笔记 2
<用 Python 学微积分>原文见参考资料 1. 13.大 O 记法 比较两个函数时,我们会想知道,随着输入值 x 的增长或减小,两个函数的输出值增长或减小的速度究竟谁快谁慢.通过绘制函 ...
- jQuery实际案例④——360导航图片效果
如图:①首先使用弹性盒子布局display:flex; flex-wrap:wrap; ②鼠标移上去出现“百度一下,你就知道了”,这句话之前带上各个网站的logo:③logo使用的是sprite,需要 ...
- 简单UML
http://www.cnblogs.com/pluviophile/p/7542017.html,看了这篇博文感觉这个例子有用遂搬运过来方便查阅 上面的类图就体现了所需要了解的类的6个基本关系 该类 ...
- 【Python】解决Python脚本 在cmd命令行窗口运行时,中文乱码问题
问题描述 python2.X,代码中指定了UTF-8,但是在cmd命令行窗口时,打印的中文仍然会乱码 在python3不存在该问题 运行结果: 原因 搜索得知,中文windows默认的输出编码为gbk ...
- VC中release和debug版本的区别
DEBUG版本 包含调试信息,编译器生成的代码方便调试 RELEASE版本 算是发布版本,RELEASE下不能调试,生成的文件更小,编译器生成的程序速度更快但是Debug下生成的exe文件在单独运行时 ...
- 获取CPU和内存的使用率
1.获取CPU的使用率 主要就是一个计算. int CUseRate::GetCPUUseRate() //获取CPU使用率 { ; FILETIME ftIdle, ftKernel, ftUser ...
- Codeforces命令行工具
https://github.com/xalanq/cf-tool Codeforces Tool 是 Codeforces 的命令行界面的工具. 这玩意儿挺快.挺小.挺强大,还跨平台哦. 特点 提交 ...
- eureka -2 - 重要配置
Server 端配置 eureka.client.registerWithEureka :是否将自己注册到Eureka Server,默认是true,如果是单节点部署,切是server端,则设置成fa ...