initialcontextJDBC与JNDI这两种连接方式有什么区别

initialcontext  时间:2021-06-17  阅读:()

java,android里的context都是什么意思啊该如何处理

Context在Java中的出现是如此频繁,但其中文翻译“上下文”又是如此诡异拗口,因此导致很多人不是很了解Context的具体含义是指什么,所以很有必要来深究一下这词的含义。

先来举几个JAVA中用到Context的例子 (1)JNDI的一个类javax.naming.InitialContext,它读取JNDI的一些配置信息,并内含对象和其在JNDI中的注册名称的映射信息。

请看下面的代码 InitialContext ic=new InitialContext(); RMIAdaptor server=(RMIAdaptor)ic.lookup("jmx/invoker/RMIAdaptor"); 这是一段JBoss中获取MBean的远程调用类的代码。

在这里面通过InitialContext中JNDI注册的名称“jmx/invoker/RMIAdaptor”来获得RMIAdaptor 对象。

这和JAVA集合中的MAP有点象,有一个String的key,key对映着它的对象。

(2)再来看看下面Spring中最常见的几句代码。

ApplicationContext 是内含configuration.xml配置文件的信息,使得可以通过getBean用名称得到相应的注册对象。

ApplicationContext ctx= new FileSystemXmlApplicationContext("configuration.xml"); Object obj= ctx.getBean("Object_Name"); 从上面的代码,我很能体会到Context所代表的意义:公用信息、环境、容器....。

所以我觉得Context翻译成上下文并不直观,按照语言使用的环境,翻译成“环境”、“容器”可能更好。

把Context翻译成“上下文”只是不直观罢了,不过也没大错。

我们来看看中文的“上下文”是什么意思。

我们常说听话传话不能“断章取义”,而要联系它的“上下文”来看。

比如,小丽对王老五说“我爱你”,光看这句还以为在说情话呢。

但一看上下文--“虽然我爱你,但你太穷了,我们还是分手吧”,味道就完全变了。

从这里来看“上下文”也有“环境”的意思,就是语言的环境。

上下文其实是一个抽象的概念。

我们常见的上下文有Servlet中的pageContext,访问JNDI时候用的Context。

写过这些代码的人可能比较容易理解,其实他们真正的作用就是承上启下。

比如说pageContext他的上层是WEB容器,下层是你写的那个Servlet类,pageContext作为中间的通道让Servlet 和Web容器进行交互。

再比如访问JNDI的Context,他的上层是JNDI服务器(可能是远程的),下层是你的应用程序,他的作用也是建立一个通道让你能访问JNDI服务器,同时也让JNDI服务器接受你的请求,同样起到交互作用。

java 错误 CNInitialContextFactory 这个class怎么来的?

在toolkit.sql.PoolConnection.open(PoolConnection.java:112) 错误提示是说没用找到这个类 或者是没用实例化这个类 类路径.ibm.ejs.ns.jndi.CNInitialContextFactory

JDBC与JNDI这两种连接方式有什么区别

jdbc是数据库中间代理商为了是java连接数据库而定的一个协议 或者说是方法,通过jdbc-odbc的方法进行数据库连接,是连接一次创建一次的做法 1,由数据库驱动和协议组成连接数据的方法,调用中间商提供的类包,进行创建连接 2.再由连接去调用3种状态. 3.由状态来提供对数据库的操作 jndi是一种命名树的方式,把需要的类都列成目录的样式,需要哪个只要根据命名直接去 调用,是一种比较快洁的思想和行为. 当你要操作数据库的用jdbc 操作命名服务用jndi Java Database Connectivity (JDBC)是一个标准的Java API,它由一组类和接口组成,Java应用程序开发人员使用它来访问数据库和执行SQL语句 JNDI(Java Name Directory Interface),可不仅仅是进行数据库定位的, 它是给当前应用服务器所管理的所有资源一个唯一的标识,包括数据库,网页,文件, 连接池等等。

配置 JNDI绑定 此处绑定的数据源是以 DBCP 为实现。

首先必须将数据库驱动(这里用了MYSQL数据库)和DBCP所需要的 Jar 包复制到 Jetty 根目录的 lib 目录下。

DBCP主要需要以下3个文件: Commons-dbcp.jar Commons-pool.jar Commons-collections.jar jdbc和jndi区别 Connection conn = null; try{ Class.forName(.mysql.jdbc.Driver",true,Thread.currentThread().getContextClassLoader()); conn = DriverManager.getConnection("jdbc:mysql://MyDBServer?user=***&password=****"); ..... conn.close(); } catch(...){...}finally{ if(conn!=null){ try{ conn.close(); } catch(...){...} } } 存在的问题? 1、数据库服务器名称MyDBServer 用户名和口令可能需要修改,由此引发JDBC URL修要修改; 2、数据库可能该用别的产品; 3、随着实际终端的增加,原配置的连接池参数可能需要调整; 解决办法 程序员不必关心数据库级别的事情,只需要知道如何引用即可 JNDI出现了。

定义数据源,也就是JDBC引用参数,给这个数据源设置一个名称; 在程序中通过数据源名称引用数据源,从而访问数据库; //jndi连接 Context initCtx = new InitialContext(); Context envCtx = (Context)initCtx.lookup("p/env"); DataSource ds = (DataSource)envCtx.lookup("jdbc/webtest"); conn = ds.getConnection(); //jdbc连接 Class.forName(.mysql.jdbc.Driver",true,Thread.currentThread().getContextClassLoader()); conn = DriverManager.getConnection("jdbc:mysql://localhost/mismain?user=root&autoReconnect=true"); 程序员开发时,知道要开发访问MySQL数据库的应用,于是将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的 JDBC URL 连接到数据库。

就像以下代码这样: Connection conn=null; try ...{ Class.forName(.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader()); conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue"); ...... conn.close(); } catch(Exception e) ...{ e.printStackTrace(); } finally ...{ if(conn!=null) ...{ try ...{ conn.close(); } catch(SQLException e) ...{} } } 这是传统的做法,也是以前非Java程序员(如Delphi、VB等)常见的做法。

这种做法一般在小规模的开发过程中不会产生问题,只要程序员熟悉Java语言、了解JDBC技术和MySQL,可以很快开发出相应的应用程序。

没有JNDI的做法存在的问题:1、数据库服务器名称MyDBServer 、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;2、数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;3、随着实际使用终端的增加,原配 置的连接池参数可能需要调整;4、…… 解决办法:程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。

而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

由此,就有了JNDI. 用了JNDI之后的做法:首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。

具体操作如下(以JBoss为例): 1、配置数据源 在JBoss 的 D:jboss420GAdocsexamplesjca 文件夹下面,有很多不同数据库引用的数据源定义模板。

将其中的 mysql-ds.xml 文件Copy到你使用的服务器下,如 D:jboss420GAserverdefaultdeploy。

修改 mysql-ds.xml 文件的内容,使之能通过JDBC正确访问你的MySQL数据库, 如下: Connection conn=null; try ...{ Class.forName(.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader()); conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue"); ...... conn.close(); } catch(Exception e) ...{ e.printStackTrace(); } finally ...{ if(conn!=null) ...{ try ...{ conn.close(); } catch(SQLException e) ...{} } } MySqlDS jdbc:mysql://localhost:3306/lw <.mysql.jdbc.Driver root rootpassword <.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter mySQL 这里,定义了一个名为MySqlDS的数据源,其参数包括JDBC的URL,驱动类名,用户名及密码等。

2、在程序中引用数据源: Connection conn=null;try ...{ Context ctx=new InitialContext(); Object datasourceRef=ctx.lookup("java:MySqlDS"); //引用数据源 DataSource ds=(Datasource)datasourceRef; conn=ds.getConnection(); ...... c.close(); } catch(Exception e) ...{ e.printStackTrace(); } finally ...{ if(conn!=null) ...{ try ...{ conn.close(); } catch(SQLException e) ...{ } } } 直接使用JDBC或者通过JNDI引用数据源的编程代码量相差无几,但是现在的程序可以不用关心具体JDBC参数了。

在系统部署后,如果数据库的相关参数变更,只需要重新配置 mysql-ds.xml 修改其中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。

由此可见,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。

弘速云(28元/月)香港葵湾2核2G10M云服务器

弘速云怎么样?弘速云是创建于2021年的品牌,运营该品牌的公司HOSU LIMITED(中文名称弘速科技有限公司)公司成立于2021年国内公司注册于2019年。HOSU LIMITED主要从事出售香港vps、美国VPS、香港独立服务器、香港站群服务器等,目前在售VPS线路有CN2+BGP、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。可联系商家代安装iso系统,目前推出全场vps新开7折,...

2021HawkHost老鹰主机黑色星期五虚拟主机低至3.5折 永久4.5折

老鹰主机HawkHost是个人比较喜欢的海外主机商,如果没有记错的话,大约2012年左右的时候算是比较早提供支付宝付款的主机商。当然这个主机商成立时间更早一些的,由于早期提供支付宝付款后,所以受众用户比较青睐,要知道我们早期购买海外主机是比较麻烦的,信用卡和PAYPAL还没有普及,大家可能只有银联和支付宝,很多人选择海外主机还需要代购。虽然如今很多人建站少了,而且大部分人都用云服务器。但是老鹰主机...

2021年7月最新洛杉矶CN2/香港CN2 vps套餐及搬瓦工优惠码 循环终身优惠6.58%

搬瓦工怎么样?2021年7月最新vps套餐推荐及搬瓦工优惠码整理,搬瓦工优惠码可以在购买的时候获取一些优惠,一般来说力度都在 6% 左右。本文整理一下 2021 年 7 月最新的搬瓦工优惠码,目前折扣力度最大是 6.58%,并且是循环折扣,续费有效,可以一直享受优惠价格续费的。搬瓦工优惠码基本上可能每年才会更新一次,大家可以收藏本文,会保持搬瓦工最新优惠码更新的。点击进入:搬瓦工最新官方网站搬瓦工...

initialcontext为你推荐
absolute居中绝对定位的div,怎样才能让它随浏览器自动左右居中啊?最好给我能运行的例子。贸易配额国际贸易中什么是配额租pps官网pps官方网站下载pps官方正式版下载网站暴力破解rar求暴力破解rar压缩包软件netbios协议tcp/ip、ipx/spx、netbios这三个通信协议的区别cursorlocation在ENVI中双击遥感图像出来个CURSOR LOCATION/value对话框。下面有个LL : 31?6'21.84"N, 117?9'11.78"E方正证券官方网方正证券完美版下载医院排队系统医院门诊排队叫号系统防火墙技术应用在网络支付流程中,防火墙技术与数据加密技术应用则重点有什么不同?东兴证券网站东兴证券交易软件如何操作?
花生壳动态域名 怎样申请域名 拜登买域名批特朗普 68.168.16.150 godaddy域名优惠码 typecho 国外php空间 镇江联通宽带 cpanel空间 40g硬盘 seednet 工作站服务器 域名和空间 南通服务器 河南移动网 如何用qq邮箱发邮件 免费智能解析 绍兴电信 移动服务器托管 服务器维护 更多