(转)WebSphere的web工程中怎么获取数据源

原文:http://aguu125.iteye.com/blog/1694313 

 https://blog.csdn.net/bigtree_3721/article/details/44900325-------JNDI之java:comp/env

was配置数据源和tomcat是不同的。tomcat只需要配置tomcat 的service.xml或者content.xml,然后 WEB程序就不需要配置了。但是was不同.was 除了在控制台配置数据源后,还需要在web.xml 和WEB-IBN.XML中配置

 

websphere 下获取jndi,有两种方式:java:comp/env/cas与jdbc/cas。 A.lookup("java:comp/env/cas")与lockup("jdbc/cas")在websphere中都可以使用。两者的差别在于,java:comp/env/cas是websphere建议使用的方式 。

    如果你当前的线程属于websphere的线程,建议使用java:comp/env/cas的方式,否则was的控制台将报出警告。 
    在web程序中,要实现通过java:comp/env/cas的方式来获得jndi必须在web.xm和ibm-web-bnd.xmi文件里分别添加 

 web.xml: 

 

  1.  
    <resource-ref id="ResourceRef_1129470735234">
  2.  
    <res-ref-name>cas_ase</res-ref-name>
  3.  
    <res-type>java.sql.DataSource</res-type>
  4.  
    <res-auth>Container</res-auth>
  5.  
    <res-sharing-scope>Shareable</res-sharing-scope>
  6.  
    </resource-ref>


ibm-web-bnd.xmi: 

 

 

  1.  
    <resRefBindings xmi:id="ResourceRefBinding_1129470735234"
  2.  
    jndiName="jdbc/cas_ase">
  3.  
    <bindingResourceRef href="WEB-INF/web.xml#ResourceRef_1129470735234" />
  4.  
    </resRefBindings>


 以上两段配置的意思是告诉web容器的上下文环境,将应用映射到的jndi资源。然后就可以通过lookup(“java:comp/env/cas/jdbc/cas_ase”)名来获得数据源。 
     然而,如果你当前执行的线程不在was的容器内,比如说你通过web容器的线程新起了一个子线程,那么该线程将不在容器的上下文内,通过lookup(“java:comp/env/cas/jdbc/cas_ase”)名来获得数据源 
     将报错,这个时候你只能使用通用的获取jndi资源的方式,就是通过lookup(“jdbc/cas”)来实现。“jdbc/cas”为你在was的资源设定的jndi名

 

 

java代码: 

 

  1.  
    package com;
  2.  
     
  3.  
    import java.sql.Connection;
  4.  
    import java.util.Hashtable;
  5.  
     
  6.  
    import javax.naming.Context;
  7.  
    import javax.naming.InitialContext;
  8.  
    import javax.naming.NamingException;
  9.  
    import javax.sql.DataSource;
  10.  
     
  11.  
    public class conn {
  12.  
     
  13.  
    public static void main(String[] args) throws Exception {
  14.  
    InitialContext initialContext = getInitialContext();
  15.  
    javax.sql.DataSource ds = (DataSource) initialContext.lookup("jdbc/cas_ase");
  16.  
    Connection cn = ds.getConnection();
  17.  
    if (cn != null){
  18.  
    System.out.println("Connection ok");
  19.  
    }
  20.  
    }
  21.  
     
  22.  
    /* 因为此类不在Websphere服务器内部运行,所以需要配置环境变量,否则是可以省略的 */
  23.  
    public static InitialContext getInitialContext() throws NamingException {
  24.  
    Hashtable env = new Hashtable();
  25.  
     
  26.  
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
  27.  
    env.put(Context.PROVIDER_URL, "iiop://localhost:2809"); // iiop是协议
  28.  
    InitialContext context = new InitialContext(env);
  29.  
     
  30.  
    return context;
  31.  
    }
  32.  
     
  33.  
    }


关于JNDI可以看:http://blog.csdn.net/lan861698789/article/details/26402935 

 

 

关于web.xml中参数的解释:

 

 resource-ref元素用于指定对外部资源的servlet引用的声明。
  <!ELEMENT resource-ref (description?, res-ref-name,
  1.  
    res-type, res-auth, res-sharing-scope?)>
  2.  
    <!ELEMENT description (#PCDATA)>
  3.  
    <!ELEMENT res-ref-name (#PCDATA)>
  4.  
    <!ELEMENT res-type (#PCDATA)>
  5.  
    <!ELEMENT res-auth (#PCDATA)>
  6.  
    <!ELEMENT res-sharing-scope (#PCDATA)>

resource-ref子元素的描述如下: 

 ● res-ref-name是资源工厂引用名的名称。该名称是一个与java:comp/env上下文相对应的JNDI名称,并且在整个Web应用中必须是惟一的。  
● res-auth表明:servlet代码通过编程注册到资源管理器,或者是容器将代表servlet注册到资源管理器。该元素的值必须为Application或Container。 
 ● res-sharing-scope表明:是否可以共享通过给定资源管理器连接工厂引用获得的连接。该元素的值必须为Shareable(默认值)或Unshareable。
posted @   liujiacai  阅读(700)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
历史上的今天:
2018-01-21 (转)计算机网络基础知识总结
2018-01-21 (转) HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
2018-01-21 (转)Linux系统基础网络配置老鸟精华篇
2018-01-21 (转)diff 命令
2018-01-21 (转)vimdiff 快速比较和合并少量文件
点击右上角即可分享
微信分享提示