一、什么是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,使用他们,可以通过

“数据库连接池”来管理数据库的链接和配置:

并且把数据库配置单独放置在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("HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

out.println("");

out.println("

A Servlet");

out.println("

");

out.print("

测试JNDI数据源连接

");

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("
");

}

} catch (Exception ex) {

ex.printStackTrace();

} finally {

try {

DatabaseConnection.Close();

} catch (SQLException e) {

e.printStackTrace();

}

}

out.println("  ");

out.println("");

out.flush();

out.close();

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request,response);

}

}

如果编译器没有给你自动在Web.xml中配置Servlet,别忘记自己配置:

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">

JndiConnectionServlet

com.cn.opensource.dbConn.JndiConnectionServlet

JndiConnectionServlet

/servlet/JndiConnectionServlet

接下来,将我们的测试程序部署在WebLogic服务器中:

启动服务器,访问应用路径,可以看到:

打开数据库的teacher表,数据一致

说明我们配置的数据源连接成功了!

jndi weblogic mysql_WebLogic配置JNDI数据源相关推荐

  1. jndi weblogic mysql_WebLogic配置JNDI数据源及在项目的使用方法

    一.在WebLogic新建针对Oracle数据库的JNDI数据源 点击左侧[ 域结构]→[base domain] → [服务] → [数据源] 然后点击右侧[ 新建] → [般数据源], 如下图所示 ...

  2. jndi weblogic mysql_Tomcat配置JNDI数据源连接池

    [Tomcat数据源连接池加密] Tomcat 5.0.28 Jndi配置: 1)部署你的应用到Tomcat,并且确保能正常访问. 2)进放admin控制台,如果你无法进入控制台,请参考常用的一些Ja ...

  3. weblogic 11g 配置oracle数据源 数据库驱动选哪个,weblogic11g配置db2数据源驱动有关问题...

    weblogic11g配置db2数据源驱动问题 今天在weblogic10.33上配置db2 9.7数据源,采用type4方式连接,驱动选择weblogic db2 type4驱动,配置成功后,开启应 ...

  4. WebLogic配置JNDI数据源

    进入weblogic管理控制台,此处是本地访问:http://127.0.0.1:7001/console 点击左侧[ 域结构]→[base domain]→[服务]→[数据源] 然后点击右侧[新建] ...

  5. 【WebLogic使用】3.WebLogic配置jndi数据源

    一.什么是jndi数据源 JNDI是Java命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一. 我们平时开发web程序的时候, ...

  6. WebLogic 配置JNDI数据源

    WebLogic使用总结(三)--WebLogic配置JNDI数据源 一.在WebLogic新建针对Oracle数据库的JNDI数据源 进入weblogic管理控制台,此处是远程访问:http://1 ...

  7. 在Tomcat配置JNDI数据源的三种方式

    转载自   在Tomcat配置JNDI数据源的三种方式 在我过去工作的过程中,开发用服务器一般都是Tomcat,数据源的配置往往都是在applicationContext.xml中配置一个dataSo ...

  8. jndi weblogic mysql_在WebLogic新建针对Oracle数据库的JNDI数据源

    一.在WebLogic新建针对Oracle数据库的JNDI数据源 点击左侧[ 域结构]→[base domain]→[服务]→[数据源]然后点击右侧[新建]→[般数据源],如下图所示: 填写JDBC数 ...

  9. Tomcat下使用Druid配置JNDI数据源

    转:Tomcat下使用Druid配置JNDI数据源 http://blog.csdn.net/houbin0912/article/details/52535982

最新文章

  1. 布尔值_Python基础知识点手册——布尔值及布尔运算
  2. Appcan跨域交互
  3. tiny4412 linux+qtopia nfs网络文件系统的挂载
  4. 超乎想象,数据揭示自学成才的码农为何备受青睐
  5. C# 图解教程 第四章 类的基本概念
  6. CloudStack核心类ApiServlet、ApiServer、ApiDispatcher、GenericDaoBase源码分析
  7. 通过jclasslib修改class文件
  8. 层次分析matlab例题,层次分析法例题
  9. library genesis (libgen)及Book系列网站的使用方法,外文图书下载神器,Springer学术书籍免费下载
  10. 普中51控制火焰传感器_火焰传感器的应用
  11. Unity3D导入图片资源
  12. 刚入职的新人如何快速了解公司业务--转载
  13. 背景图片上面写字的方法。
  14. 小白篇:阿里云 对象存储 OSS
  15. Linux locale命令
  16. 全球365隐私政策服务协议
  17. Python爬虫之获取淘宝商品数据
  18. cma盲均衡matlab,qam信号cma盲均衡(CMA_MMA_16QAM.asv)
  19. 当人工智能渐渐成熟,健康医疗将更专注于数据整合
  20. 在苹果电脑MAC上执行Linux命令

热门文章

  1. 查看linux版本是多少位
  2. 讲讲React中的State和Props
  3. 怎样让dw的html表格移动,妙用dw图层与表格进行网页布局-网页设计,Dreamweaver
  4. outlook邮箱显示一直启动中_win10outlook邮箱怎么设置开机自动运行 - 卡饭网
  5. Zookeeper序列化及通信协议
  6. 编码(NRZ、NRZI、曼彻斯特、4B
  7. c++ 统计一个一篇英文小说的单词数,从文件读取小说
  8. 计算机网络-网络应用(下)
  9. 递归与lamdba与高阶函数
  10. Android Zxing识别图片二维码识别率低