原文: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。

(转)WebSphere的web工程中怎么获取数据源的更多相关文章

  1. web工程中URL地址的推荐写法

    三.web工程中URL地址的推荐写法 使用c标签<c:url value="" /> 会自动添加项目名 -> value中的值 前面要加 “/” 在JavaWeb ...

  2. web工程中的各种路径(eclipse开发)

    目前遇到的 web 工程中要写url和路径的文件有 webContent中.jsp/.html :action src中的servlet类 : 映射地址.重定向.请求转发.访问资源文件(webCont ...

  3. web工程中URL地址的写法

    在开发中我们不可避免的要碰到许多需要写URL地址的情况,这常常让我们感到头疼.下面笔者推荐一种简单的做法.URL地址分为绝对路径和相对路径两种.相对路径又分为相对资源路径和相对根路径.显然绝对路径在开 ...

  4. 读取web工程中.properties资源文件的模板代码

    读取web工程中.properties资源文件的模板代码 // 读取web工程中.properties资源文件的模板代码 private void test2() throws IOException ...

  5. 如何在Web工程中实现任务计划调度

    转载自: http://www.oschina.net/question/146385_37793?sort=time 下面就Servlet侦听器结合Java定时器来讲述整个实现过程.要运用Servl ...

  6. Web工程中各类地址的写法

    1)总体原则 在java web开发中,只要是url地址,那么最好以“/”开头,也就是绝对路径的方式.那么这个“/”到底代表什么呢? 如果“/”是给服务器用的,则代表当前web工程:如果是给浏览器用的 ...

  7. 在Web工程中,普通Java类如何读文件

    我们在以前讨论过在Web工程不能采用Java工程原先的读取方式,即创建一个文件流(FileInputStream)并给出一个文件目录(从src开始找一直找到你要读取文件的目录),这种的方式是不可行的. ...

  8. Servlet接口的实现类,路径配置映射,ServletConfig对象,ServletContext对象及web工程中文件的读取

    一,Servlet接口实现类:sun公司为Servlet接口定义了两个默认的实现类,分别为:GenericServlet和HttpServlet. HttpServlet:指能够处理HTTP请求的se ...

  9. 在Web工程中引入Jquery插件报错解决方案

    在学习Jquery插件的时候,遇到一个问题就是新建web工程后在WebRoot下引入Jquery插件的时候报错,不知道为什么好纠结,但是项目能正常运行,后来找到解决方案,在这里给大家分享一下. 解决方 ...

随机推荐

  1. php 制作二维码 phpqrcode.php

    phpqrcode.php 下载地址:https://sourceforge.net/projects/phpqrcode/ //测试可行 utf-8格式 <?php header(" ...

  2. TreeSet集合为什么要实现Comparable?

    首先,让我们来看看JDK中TreeSet类的add方法 /** * Adds the specified element to this set if it is not already presen ...

  3. hide handkerchief

    Problem Description The Children’s Day has passed for some days .Has you remembered something happen ...

  4. kafka参数

    转载地址http://debugo.com/kafka-params/ ############################# System ########################### ...

  5. 初始MapReduce

    MapReduce 概述 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用"的核心框架 MapReduce核心功能是将用户编写的业务逻辑代码和自带 ...

  6. ELK冷热数据分离

      通常情况下,我们使用ELK日志分析平台最常用的数据时间为1周或一个月(因业务场景不同,可能存在差别),时间比较长的数据没有特殊情况可能我们就没有必要再进行查询了,但是因业务需求或者作为凭证,这些日 ...

  7. Modeless对话框如何响应快捷键

    MFC,Modeless对话框不会响应快捷键.解决的方案很多,其中之一是在PreTranslateMessage中地键盘消息进行拦截处理.

  8. 类库中使用WPF 资源文件

    1.类库的 后缀.csproj文件,第一个<PropertyGroup>中加入下面代码 <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-b ...

  9. 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

    剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()- ...

  10. Android开发 - 获取系统输入法高度的正确姿势

    问题与解决 在Android应用的开发中,有一些需求需要我们获取到输入法的高度,但是官方的API并没有提供类似的方法,所以我们需要自己来实现. 查阅了网上很多资料,试过以后都不理想. 比如有的方法通过 ...