zoukankan      html  css  js  c++  java
  • 【WebLogic使用】3.WebLogic配置jndi数据源

    参见博客:https://blog.csdn.net/acmman/article/details/70146603

    参考视频教程:

     一、什么是jndi数据源
    JNDI是Java命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一。

    我们平时开发web程序的时候,在连接数据库的时候,往往会编写一个连接数据库的类,
    例如连接Mysql的类:

    1. package cn.edu.hpu.util;
    2.  
       
    3.  
      import java.sql.Connection;
    4.  
      import java.sql.DriverManager;
    5.  
      import java.sql.ResultSet;
    6.  
      import java.sql.SQLException;
    7.  
      import java.sql.Statement;
    8.  
       
    9.  
      public class DB {
    10.  
      // 定义MySQL的数据库驱动程序
    11.  
      public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
    12.  
      //定义mysql的数据库连接地址:
    13.  
      public static final String DBDURL = "jdbc:mysql://localhost:3306/iqweb" ;
    14.  
      //mysql数据库的连接用户名
    15.  
      public static final String DBUSER = "root" ;
    16.  
      //mysql数据库的连接密码
    17.  
      public static final String DBPASS = "1234" ;
    18.  
       
    19.  
      static{
    20.  
      try {
    21.  
      Class.forName(DBDRIVER);
    22.  
      } catch (ClassNotFoundException e) {
    23.  
      // TODO Auto-generated catch block
    24.  
      e.printStackTrace();
    25.  
      }
    26.  
      }
    27.  
       
    28.  
      public static Connection getConnection(){
    29.  
      Connection conn=null;
    30.  
      try {
    31.  
      conn=DriverManager.getConnection(DBDURL,DBUSER,DBPASS);
    32.  
      } catch (SQLException e) {
    33.  
      // TODO Auto-generated catch block
    34.  
      e.printStackTrace();
    35.  
      }
    36.  
      return conn;
    37.  
      }
    38.  
       
    39.  
      public static void close(ResultSet rs,Statement st,Connection conn){
    40.  
       
    41.  
      try {
    42.  
       
    43.  
      if(rs!=null){
    44.  
      rs.close();
    45.  
      }
    46.  
      if(st!=null){
    47.  
      st.close();
    48.  
      }
    49.  
      if(conn!=null){
    50.  
      conn.close();
    51.  
      }
    52.  
      } catch (SQLException e) {
    53.  
      // TODO Auto-generated catch block
    54.  
      e.printStackTrace();
    55.  
      }
    56.  
       
    57.  
      }
    58.  
       
    59.  
      public static void close(Statement st,Connection conn){
    60.  
      close(null,st,conn);
    61.  
      }
    62.  
      }

    --------------------- 本文来自 光仔December 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/acmman/article/details/70146603?utm_source=copy 

    上面的代码存在一个问题:每一次应用程序访问数据库都去创建一个connect,很消耗数据库的资源

    如何解决了,采用数据库连接池

    应用程序获得connect都是从连接池中获得,不在自己操作db获得connect,数据库连接池就好像线程池原理一样。

    我们可以不用编写数据库连接池,现在有开源的数据库连接池

    除了上面的c3p0等数据库连接池之外,weblogic也提供了数据库连接池,weblogic的数据库连接池是通过jndi容器进行管理的,需要进行配置,weblogic将数据库连接池存储

    在jndi容器中,可以通过jndi获得weblogic的连接池

    接下面我们来看看如何通过weblogic创建连接池

    二、新建Mysql的JNDI数据源
    访问http://localhost:7001/console/,登录进入WebLogic控制台主页。
    点击左侧“域结构”下的“服务”下的“数据源”选项:

    选择新建,一般数据源。

    填写数据源的名称,JNDI名称以及选择数据库类型:


    选择数据库驱动版本:


    其它配置按照默认即可:



    填写数据库的连接信息:



    接下来点击测试配置,看一下是否能连接成功:



    出现“连接测试成功”即表示数据库配置没有问题。
    点击下一步,勾选服务器。



    点击完成之后,我们服务器端的JNDI数据源就配置完毕了。




    三、应用程序引用WebLogic的jndi数据源
    我们在MyEclipse中创建一个WebProject测试工程:



    我们在src中创建一个数据库连接类:


    编写该连接类:

    1.  
      package com.cn.opensource.dbConn;
    2.  
       
    3.  
      import java.sql.Connection;
    4.  
      import java.sql.SQLException;
    5.  
      import java.util.Properties;
    6.  
       
    7.  
      import javax.naming.Context;
    8.  
      import javax.naming.InitialContext;
    9.  
      import javax.sql.DataSource;
    10.  
       
    11.  
      public class DatabaseConnection {
    12.  
      //初始化上下文需要用到的工厂类
    13.  
      private final static String INITIAL_CONTEXT_FACTORY="weblogic.jndi.WLInitialContextFactory";
    14.  
      //WebLogic服务器的访问地址
    15.  
      private final static String PROVIDER_URL="t3://127.0.0.1:7001";
    16.  
      //WebLogic服务器中的JNDI数据源名称
    17.  
      private final static String MYSQL_JNDI_NAME="JNDI-MySqlDataSource";
    18.  
       
    19.  
       
    20.  
      //存储从JNDI容器中取出来的数据源
    21.  
      private static DataSource dsOracle = null;
    22.  
      private static DataSource dsMySQL = null;
    23.  
       
    24.  
      static {
    25.  
      try {
    26.  
      //初始化WebLogic Server的JNDI上下文信息
    27.  
      Context context = getInitialContext();
    28.  
      //获取数据源对象
    29.  
      dsMySQL = (DataSource) context.lookup(MYSQL_JNDI_NAME);
    30.  
      } catch (Exception e) {
    31.  
      e.printStackTrace();
    32.  
      }
    33.  
      }
    34.  
       
    35.  
      /**
    36.  
      * MethodName: getInitialContext
    37.  
      * Description: 获得WebLogic ServerJNDI初始上下文信息
    38.  
      * @return
    39.  
      * @throws Exception
    40.  
      */
    41.  
      private static Context getInitialContext() throws Exception {
    42.  
      Properties properties = new Properties();
    43.  
      //指定工厂类
    44.  
      properties.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
    45.  
      //指定服务器访问地址
    46.  
      properties.put(Context.PROVIDER_URL, PROVIDER_URL);
    47.  
      return new InitialContext(properties);
    48.  
      }
    49.  
       
    50.  
       
    51.  
      /**
    52.  
      * MethodName: getMySQLConnection
    53.  
      * Description: 获取MySQL数据库连接
    54.  
      * @return
    55.  
      * @throws SQLException
    56.  
      */
    57.  
      public static Connection getMySQLConnection() throws SQLException {
    58.  
      return dsMySQL.getConnection();
    59.  
      }
    60.  
       
    61.  
       
    62.  
      /**
    63.  
      * MethodName: CloseConnection
    64.  
      * Description: 关闭数据库连接
    65.  
      * @return
    66.  
      * @throws SQLException
    67.  
      */
    68.  
      public static void Close()throws SQLException {
    69.  
      if(dsMySQL!=null){
    70.  
      dsMySQL.getConnection().close();
    71.  
      }
    72.  
      }
    73.  
      }


    然后,我们创建一个Servlet,测试数据库是否连接成功并取到数据:

    --------------------- 本文来自 光仔December 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/acmman/article/details/70146603?utm_source=copy 

    客户端访问的代码如下:

    上面是采用的java代码直接进行操作,如果是在j2ee中如何通过配置文件获得数据库连接池了

    获取JNDI数据源
        如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。下面是一个简单的配置: --------------------- 本文来自 tingyuanss 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tingyuanss/article/details/44940061?utm_source=copy 

    通过jndiName指定引用的JNDI数据源名称。
        Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。下面是使用jee命名空间引用JNDI数据源的配置:

    1. <beans xmlns=http://www.springframework.org/schema/beans      
    2. xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance      
    3. xmlns:jee=http://www.springframework.org/schema/jee      
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans       
    5. http://www.springframework.org/schema/beans/spring-beans-2.0.xsd       
    6. http://www.springframework.org/schema/jee      
    7. http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">        
    8. <jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>        
    9. </beans>  

    只需要配置:

    <jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>     

    --------------------- 本文来自 tingyuanss 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tingyuanss/article/details/44940061?utm_source=copy 

  • 相关阅读:
    cobbler default system 网络安装时主机的menu上只有一个local选项
    tcpdump使用方法
    cobbler 修改 distro_signatures.json
    wireshark in text mode: tshark
    Mac OSX使用隐藏文件夹
    sql中多条件进行排序的问题
    Linux查看打日志文件
    XML Parser Error on line 39: 必须声明元素类型 "domainObjectRenamingRule"。
    Access denied for user '密码'@'192.18.0.0' (using password: YES)
    springboot之DevTools热部署的简单原理解析
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/9755039.html
Copyright © 2011-2022 走看看