首页编程initialcontext?InitialContext()是什么意思

initialcontext?InitialContext()是什么意思

编程之家2023-11-0676次浏览

大家好,initialcontext相信很多的网友都不是很明白,包括InitialContext()是什么意思也是一样,不过没有关系,接下来就来为大家分享关于initialcontext和InitialContext()是什么意思的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

initialcontext?InitialContext()是什么意思

Hibernate 基于JDBC的事务

Hibernate是JDBC的轻量级封装本身并不具备事务管理能力在事务管理层 Hibernate将其委托给底层的JDBC或者JTA以实现事务管理和调度功能

Hibernate的默认事务处理机制基于JDBC Transaction我们也可以通过配置文件设定采用JTA作为事务管理实现

Java代码

<hibernate configuration><session factory>……<propertyname= hibernate transaction factory_class> net sf hibernate transaction JTATransactionFactory<! net sf hibernate transaction JDBCTransactionFactory></property>……</session factory></hibernate configuration>

<hibernate configuration><session factory>……<property name= hibernate transaction factory_class> net sf hibernate transaction JTATransactionFactory<! net sf hibernate transaction JDBCTransactionFactory></property>……</session factory></hibernate configuration>

基于JDBC的事务管理将事务管理委托给JDBC进行处理无疑是最简单的实现方式 Hibernate对于JDBC事务的封装也极为简单我们来看下面这段代码 Java代码 session=sessionFactory openSession(); Transactiontx=session beginTransaction();…… mit();

session= sessionFactory openSession(); Transaction tx= session beginTransaction();…… mit();

initialcontext?InitialContext()是什么意思
从JDBC层面而言上面的代码实际上对应着 Java代码 Connectiondbconn=getConnection(); dbconn setAutoCommit(false);…… mit();

Connection dbconn= getConnection(); dbconn setAutoCommit(false);…… mit();

就是这么简单 Hibernate并没有做更多的事情(实际上也没法做更多的事情)只是将这样的JDBC代码进行了封装而已这里要注意的是在sessionFactory openSession()中 hibernate会初始化数据库连接与此同时将其AutoCommit设为关闭状态(false)而其后在Session beginTransaction方法中 Hibernate会再次确认Connection的AutoCommit属性被设为关闭状态(为了防止用户代码对session的Connection AutoCommit属性进行修改)这也就是说我们一开始从SessionFactory获得的session其自动提交属性就已经被关闭(AutoCommit=false)下面的代码将不会对数据库产生任何效果 Java代码 session=sessionFactory openSession(); session save(user); session close();

session= sessionFactory openSession(); session save(user); session close();

这实际上相当于 JDBC Connection的AutoCommit属性被设为false执行了若干JDBC操作之后没有调用mit操作即将Connection关闭如果要使代码真正作用到数据库我们必须显式的调用Transaction指令 Java代码 session=sessionFactory openSession(); Transactiontx=session beginTransaction(); session save(user); mit(); session close();

session= sessionFactory openSession(); Transaction tx= session beginTransaction(); session save(user); mit(); session close();

基于JTA的事务管理 JTA提供了跨Session的事务管理能力这一点是与JDBC Transaction最大的差异 JDBC事务由Connnection管理也就是说事务管理实际上是在JDBC Connection中实现事务周期限于Connection的生命周期之类同样对于基于JDBC Transaction的Hibernate事务管理机制而言事务管理在Session所依托的JDBC Connection中实现事务周期限于Session的生命周期 JTA事务管理则由 JTA容器实现 JTA容器对当前加入事务的众多Connection进行调度实现其事务性要求 JTA的事务周期可横跨多个JDBC Connection生命周期同样对于基于JTA事务的Hibernate而言 JTA事务横跨可横跨多个Session JTA事务是由JTA Container维护而参与事务的Connection无需对事务管理进行干涉这也就是说如果采用JTA Transaction我们不应该再调用HibernateTransaction功能上面基于JDBC Transaction的正确代码这里就会产生问题 Java代码 publicclassClassA{ publicvoidsaveUser(Useruser){ session=sessionFactory openSession(); Transactiontx=session beginTransaction(); session save(user); mit(); session close();}} publicclassClassB{ publicvoidsaveOrder(Orderorder){ session=sessionFactory openSession(); Transactiontx=session beginTransaction(); session save(order); mit(); session close();}} publicclassClassC{ publicvoidsave(){…… UserTransactiontx=newInitialContext() lookup(……); ClassA save(user); ClassB save(order); mit();……}}

public class ClassA{ public void saveUser(User user){ session= sessionFactory openSession(); Transaction tx= session beginTransaction(); session save(user); mit(); session close();}} public class ClassB{ public void saveOrder(Order order){ session= sessionFactory openSession(); Transaction tx= session beginTransaction(); session save(order); mit(); session close();}} public class ClassC{ public void save(){…… UserTransaction tx= new InitialContext() lookup(……); ClassA save(user); ClassB save(order); mit();……}}

这里有两个类ClassA和ClassB分别提供了两个方法 saveUsersaveOrder用于保存用户信息和订单信息在ClassC中我们接连调用了ClassA saveUser方法和ClassB saveOrder方法同时引入了JTA中的UserTransaction以实现ClassC save方法中的事务性问题出现了 ClassA和ClassB中分别都调用了Hibernate的Transaction功能在Hibernate的JTA封装中 Session beginTransaction同样也执行了InitialContext lookup方法获取UserTransaction实例 mit方法同样也调用了mit方法实际上这就形成了两个嵌套式的JTA Transaction ClassC申明了一个事务而在ClassC事务周期内 ClassA和ClassB也企图申明自己的事务这将导致运行期错误因此如果决定采用JTA Transaction应避免再重复调用Hibernate的 Transaction功能上面的代码修改如下 Java代码 publicclassClassA{ publicvoidsave(TUseruser){ session=sessionFactory openSession(); session save(user); session close();}……} publicclassClassB{ publicvoidsave(Orderorder){ session=sessionFactory openSession(); session save(order); session close();}……} publicclassClassC{ publicvoidsave(){…… UserTransactiontx=newInitialContext() lookup(……); classA save(user); classB save(order); mit();……}}

public class ClassA{ public void save(TUser user){ session= sessionFactory openSession(); session save(user); session close();}……} public class ClassB{ public void save(Order order){ session= sessionFactory openSession(); session save(order); session close();}……} public class ClassC{ public void save(){…… UserTransaction tx= new InitialContext() lookup(……); classA save(user); classB save(order); mit();……}}

上面代码中的ClassC save方法也可以改成这样 Java代码 publicclassClassC{ publicvoidsave(){…… session=sessionFactory openSession(); Transactiontx=session beginTransaction(); classA save(user); classB save(order); mit();……}}实际上这是利用Hibernate来完成启动和提交UserTransaction的功能但这样的做法比原本直接通过InitialContext获取UserTransaction的做法消耗了更多的资源得不偿失在EJB中使用JTA Transaction无疑最为简便我们只需要将save方法配置为JTA事务支持即可无需显式申明任何事务下面是一个Session Bean的save方法它的事务属性被申明为 Required EJB容器将自动维护此方法执行过程中的事务 Java代码/***@ejb interface method*view type= remote**@ejb transactiontype= Required**/ publicvoidsave(){//EJB环境中通过部署配置即可实现事务申明而无需显式调用事务 classA save(user); classB save(log);}//方法结束时如果没有异常发生则事务由EJB容器自动提交 lishixinzhi/Article/program/Java/ky/201311/28740

initialcontext?InitialContext()是什么意思

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服务器接受你的请求,同样起到交互作用。

InitialContext()是什么意思

InitialContext()是可以加载配置文件的(jndi.properties),构造方法也可以带参数的(见API),以下是我的看法,它的初始化是由容器来(系统内部)来完成的,如果你的客户端和服务器都在一台机子上且同一个JVM,那么Context namingContext= new InitialContext();是没问题,如果你的服务器端在另一台机器上,想想也知道,肯定要配置个IP的,对于JNDI的编程都是先注册资源(数据库连接,EJB等),然后再用,这样的原则的,我在EJB3,也同样用到InitialContext()我想道理是相同的,以下是jnid.properties的配置文件(EJB)java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

java.naming.provider.url=localhost:1099

--------------------------------------------------------------------------------

ejb入门问题javax.naming.NoInitialContextException

jndi.properties要放在类路径的根下,比如 classes目录下,如果是打包在 jar中它在 jar中但不应该在 jar中的任何子目录中。

另外程序在用时除了使用 jndi.properties这个静态的办法,还有一个 new InitialContext(properties)这种方法,这时的 properties可以是从某个 properties文件中读取的,也可以是代码计算并填充出来的。

还有一个种低优先级的在命令行添加-Djava.naming.factory.initial=...这种方法。

我们需要确认服务端 ejb jar确实被部署了,在客户端这个 jndi参数文件确实放在了正确的位置。

好了,关于initialcontext和InitialContext()是什么意思的问题到这里结束啦,希望可以解决您的问题哈!

手机关键词优化?如何提高百度手机关键词优化排名schedulerfactorybean(spring 4 quartz 2.x动态配置triggers)