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避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。

Linode($5/月),新用户注册送100美元,11个数据中心云服务器

关于Linode,这是一家运营超过18年的VPS云主机商家,产品支持随时删除(按小时计费),可选包括美国、英国、新加坡、日本、印度、加拿大、德国等全球十多个数据中心,最低每月费用5美元($0.0075/小时)起。目前,注册Linode的新用户添加付款方式后可以获得100美元赠送,有效期为60天,让更多新朋友可以体验Linode的产品和服务。Linode的云主机产品分为几类,下面分别列出几款套餐配置...

香港物理服务器 E5-2660v2 16G 500GSSD 增送20G防御 688/月 华纳云

#年终感恩活动#华纳云海外物理机688元/月,续费同价,50M CN2 GIA/100M国际大带宽可选,超800G 防御,不限流华纳云成立于2015年,隶属于香港联合通讯国际有限公司。拥有香港政府颁发的商业登记证明,作为APNIC 和 ARIN 会员单位,现有香港、美国等多个地区数据中心资源,百G丰富带宽接入,坚持为海内外用户提供自研顶级硬件防火墙服务,支持T B级超大防护带宽,单IP防护最大可达...

RackNerd($199/月),5IP,1x256G SSD+2x3THDD

我们先普及一下常识吧,每年9月的第一个星期一是美国劳工节。于是,有一些服务商会基于这些节日推出吸引用户的促销活动,比如RackNerd有推出四款洛杉矶和犹他州独立服务器,1G带宽、5个独立IP地址,可以配置Windows和Linux系统,如果有需要独立服务器的可以看看。第一、劳工节促销套餐这里有提供2个套餐。两个方案是选择犹他州的,有2个方案是可以选择洛杉矶机房的。CPU内存SSD硬盘配置流量价格...

initialcontext为你推荐
英文名网站介绍几个好的英语学习网站旺旺群发手机旺旺怎么群发信息?avc是什么格式格式工厂转的[AS3 720 AVC]mp4是什么格式微信如何只发文字微信朋友圈怎样只发文字sms是什么什么是SMS协议cursorlocation如何用ENVI把不同图像中的相同地点的某个像素点的值读出来。按时间把这个点的值连起来,。谢谢好人。云办公平台云办公平台对企业办公有什么好处呢?网站客服代码在线客服系统的代码添加到网站中,要怎么做?网页背景音乐代码有没有网页背景音乐播放器代码??飞信发信息要钱吗用飞信发短信要钱吗??怎么使用飞信??急
asp主机空间 asp网站空间 域名劫持 老域名 阿里云邮箱登陆首页 赵容 美国主机评测 樊云 bbr 香港服务器99idc 博客主机 webhosting 名片模板psd iis安装教程 网站木马检测工具 免费私人服务器 联通网站 台湾google 数据库空间 广东主机托管 更多