`
dycsos123ok
  • 浏览: 82711 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

*****Java之WebLogi数据源的使用*****

    博客分类:
  • java
阅读更多

 说明:

 

这是工作的一个实际应用,在此作一下备案、东西不难但容易忘记。里面主要包括

1、XML配置信息加载

2、单例模式使用

3、ThreadLocal使用,不管在此意义不大

4、WebLogic数据源使用,获取不到数据源将使用JDBC连接

 

一、XML配置

 

 

<?xml version="1.0" encoding="UTF-8"?>  
<config>  
    <!-- JDBC的配置信息 -->  
    <db-info>  
        <driver-name>oracle.jdbc.driver.OracleDriver</driver-name>  
        <url>jdbc:oracle:thin:@localhost:1521:orcl</url>  
        <user-name>name</user-name>  
        <password>password</password>  
    </db-info>  
    <!-- 数据源的配置信息 -->  
    <datasoure-info>  
        <initContextFactory>weblogic.jndi.WLInitialContextFactory</initContextFactory>  
        <provider-url>jdbc:oracle:thin:@localhost:1521:orcl</provider-url>  
        <jndi-name>jndiName</jndi-name>  
    </datasoure-info>  
</config>

 

 

二、POJO用来存读到的配置属性

 

public class JdbcConfig {   
    // jdbc配置   
    private String driverName;   
    private String userName;   
    private String password;   
    private String url;   
    // weblogic数据源的配置   
    private String initContextFactory;   
    private String providerUrl;   
    private String jndiName;   
  
    public String getDriverName() {   
        return driverName;   
    }   
  
    public void setDriverName(String driverName) {   
        this.driverName = driverName;   
    }   
    ................................................   
}  

 

 

三、单例加载配置文件

 看到空间的另外一篇博客可以知道,这种单例很显然不是最佳的写法;而且dom4j的解析也有一点冗余哦,不过影响不大。

 

public class XmlConfigReader {   
  
    // 懒汉式(用的时候再创建),延迟加载   
    private static XmlConfigReader instance = null;   
  
    // 保存jdbc相关配置信息   
    private JdbcConfig jdbcConfig = new JdbcConfig();   
  
    // 构造方法让其private,这就不让外界利用new创建此类实例   
    private XmlConfigReader() {   
  
        SAXReader reader = new SAXReader();   
        // 从用来加载类的搜索路径打开具有指定名称的资源,以读取该资源。此方法通过系统类加载器   
        InputStream in = Thread.currentThread().getContextClassLoader()   
                .getResourceAsStream("dbsource.xml");   
        try {   
  
            Document doc = reader.read(in);   
  
            // 取得jdbc相关配置信息   
            Element driverNameElt = (Element) doc   
                    .selectObject("/config/db-info/driver-name");   
            Element urlElt = (Element) doc.selectObject("/config/db-info/url");   
            Element userNameElt = (Element) doc   
                    .selectObject("/config/db-info/user-name");   
            Element passwordElt = (Element) doc   
                    .selectObject("/config/db-info/password");   
            // 取得WebLogic数据源的相关信息   
            Element initContextFactory = (Element) doc   
                    .selectObject("/config/datasoure-info/initContextFactory");   
            Element providerUrl = (Element) doc   
                    .selectObject("/config/datasoure-info/provider-url");   
            Element jndiname = (Element) doc   
                    .selectObject("/config/datasoure-info/jndi-name");   
  
            // jdbc取得相关的配置   
            jdbcConfig.setDriverName(driverNameElt.getStringValue());   
            jdbcConfig.setUserName(userNameElt.getStringValue());   
            jdbcConfig.setPassword(passwordElt.getStringValue());   
            jdbcConfig.setUrl(urlElt.getStringValue());   
            // 数据源取得相关的配置   
            jdbcConfig.setInitContextFactory(initContextFactory   
                    .getStringValue());   
            jdbcConfig.setProviderUrl(providerUrl.getStringValue());   
            jdbcConfig.setJndiName(jndiname.getStringValue());   
        } catch (DocumentException e) {   
            e.printStackTrace();   
        }   
    }   
  
    // 静态方法访问时,直接访问不需要实例化   
    public static synchronized XmlConfigReader getInstance() {// synchronized表示同时只能一个线程进行实例化   
        if (instance == null) {// 如果两个进程同时进入时,同时创建很多实例,不符合单例   
            instance = new XmlConfigReader();   
        }   
        return instance;   
    }   
    public JdbcConfig getJdbcConfig() {   
        return jdbcConfig;   
    }   
}  

 

 

四、数据库的连接

public class Conn {   
  
    private static final ThreadLocal<Connection> connectLocal = new ThreadLocal<Connection>();   
    static JdbcConfig jdbcConfig = XmlConfigReader.getInstance()   
            .getJdbcConfig();   
  
    public static Connection getJDBCConnection() {   
        Connection conn = (Connection) connectLocal.get(); // 获得连接   
        try {   
            if (conn == null) { // 如果连接不存在,就创建一个新的连接   
                Class.forName(jdbcConfig.getDriverName().trim());   
                conn = DriverManager.getConnection(jdbcConfig.getUrl().trim(),   
                        jdbcConfig.getUserName(), jdbcConfig.getPassword()   
                                .trim());   
                connectLocal.set(conn); // 保存到ThreadLocal中   
            }   
        } catch (ClassNotFoundException e) {   
            e.printStackTrace();   
        } catch (SQLException e) {   
            e.printStackTrace();   
        }   
        return conn;   
    }   
  
    public static Connection getConnection() {   
        Connection conn = (Connection) connectLocal.get(); // 获得连接   
        Hashtable<String, String> ht = new Hashtable<String, String>();   
        ht.put(Context.INITIAL_CONTEXT_FACTORY, jdbcConfig   
                .getInitContextFactory().trim());   
        ht.put(Context.PROVIDER_URL, jdbcConfig.getProviderUrl().trim());   
        Context ctx = null;   
        try {   
            ctx = new InitialContext(ht);   
            DataSource ds = (DataSource) ctx.lookup(jdbcConfig.getJndiName()   
                    .trim());   
            conn = ds.getConnection();   
            connectLocal.set(conn); // 保存到ThreadLocal中   
        } catch (Exception e) {   
            e.printStackTrace();   
        } finally {   
            try {   
                if (ctx != null) {   
                    ctx.close();   
                }   
            } catch (NamingException e) {   
                e.printStackTrace();   
            }   
        }   
        if (conn == null) {   
            conn = getJDBCConnection(); //JDBC连接   
        }   
        return conn;   
  
    }   
  
    public static void CloseConnection() { // 如果这样做,ThreadLocal的性能就不能得到体现了.   
        Connection conn = (Connection) connectLocal.get();   
        try {   
            if (conn != null) {   
                conn.close();   
            }   
        } catch (SQLException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace(); // 出现异常建议上抛,在最上层做提示处理.   
        } finally {   
            connectLocal.remove();   
        }   
    }   
  
}  

 

 

 

 这里如何数据源里面获得的conn是null,将调用JDBC的连接。

分享到:
评论
2 楼 dycsos123ok 2012-08-09  
provider-url里面的参数配置应该是t3://localhost:7001;不好意思。
1 楼 dycsos123ok 2012-08-06  
不好意思,标题写错了,不改了!

相关推荐

    weblogi培训笔记

    2. **Console mode**:控制台模式,提供了一个文本界面供用户输入参数,适用于需要自动化安装流程但又不想使用静默模式的情况。 3. **Silent mode**:静默模式,通过预先准备的响应文件进行无人值守安装,适用于批量...

    WebLogic & MyEclipse 配置

    4. **配置数据源**:若应用需要连接数据库,需在WebLogic中配置JDBC数据源,包括驱动类、URL、用户名和密码等信息。 5. **集群与负载均衡**:在企业级环境中,可能需要配置WebLogic集群以实现高可用性和负载均衡,...

    Weblogi安装部署流程和问题出现调整

    为了便于管理,还需要创建一个用于存放WebLogic软件和数据的目录,并将所有权赋予新创建的`weblogic`用户: ```shell # 新建文件夹 #mkdir -p /var/bea # 为这个文件夹授权给新用户 #chown -R weblogic:weblogic /...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    《经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发》介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则包含Session Bean、Message Driven Bean的...

    weblogic安装步骤以及报错解决

    最后,使用 `java -version` 和 `javac -version` 命令来测试 JDK 是否安装成功。 二、安装 Weblogic 首先,需要创建一个用户来安装 Weblogic,例如 `weblogic`。然后,下载相应版本的 Weblogic 安装包(通常为....

    WebLogic 12c(12.2.1.2)升级方案

    - 备份环境:包括域目录、应用程序和数据、自定义的安全提供程序、节点管理器目录和脚本。 - 确保每台机器上的配置文件一致。 - **升级路线图**: - 安装新版本的 WebLogic 软件(如 10.3.6),无需建立新域。 -...

    weblogic与jms+spring

    2. 配置JMS模板和消息源,指定连接工厂和目的地。 3. 在Spring应用中注入MDP或消息监听容器,实现接收和发送消息的逻辑。 **测试用例:** 创建一个简单的Spring应用,模拟发送和接收JMS消息。发送方使用JMS模板发送...

    AIX5安装Weblogic

    在本文中,我们将深入探讨如何在AIX 5操作系统上安装WebLogic服务器,这是一个关键的任务,对于在IBM AIX环境中部署企业级Java应用程序至关重要。WebLogic是Oracle公司提供的一个Java应用服务器,它提供了管理和运行...

    WebLogic_License_Keys全系列包

    Some BEA products require multiple license keys for full functionality, or use a license key which is not intuitively identified as being for that product. Please refer to the legend below to ...

    weblogic8.1版本_4

    weblogic8.1版本_4 BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、 网络应用和数据库应用的Java应用服务器。 这个版本很难找哦......

    weblogic安装文件

    很多时候我们需要自己部署服务器。无论是tomcat,还是jboss都只能算是小型服务器。真正的企业级服务器为weblogic ,下面就是weblogic服务器安装文件。

    weblogic集群详细的搭建步骤,绝对手把手的教你部署weblogic服务器以及集群的扩容.zip

    weblogic集群详细的搭建步骤,绝对手把手的教你部署weblogic服务器以及集群的扩容.zip

    weblogic启动日志详细说明

    weblogic启动日志详细说明介绍,报错了所有的初始化信息模块的介绍!

    weblogic 认证拒绝 Authentication for user denied

    NULL 博文链接:https://vernonchen163.iteye.com/blog/1995514

    Eclipse中weblogic和EJB的配置

    帮助初学这在Eclipse中配置开发EJB的容器这里以weblogic的配置来说明

    Linux环境Weblogic超详细安装配置说明.pdf

    Weblogic的安装、配置与应用部署 Linux 下安装过程 Weblogic配置 应用部署 在 Linux 控制台启动 Weblogic

Global site tag (gtag.js) - Google Analytics