JNDI
Java 命名和目录接口(Java Naming and Directory Interface)
WebLogic Server JNDI
JNDI 的 WebLogic Server 实现提供下列方法:
允许客户端访问 WebLogic Server 命名服务
令对象在 WebLogic 名称空间中可用
从 WebLogic 名称空间检索对象
使用 WebLogic JNDI 将 Java 客户端连接到单个服务器
WebLogic Server JNDI 服务提供程序接口(Service Provider Interface,简称 SPI)提供一个允许远程 Java 客户端连接到 WebLogic Server 的 InitialContext 实现。客户端可以指定标识特定 WebLogic Server 部署的标准 JNDI 环境属性,以及用于登录 WebLogic Server 的相关连接属性。
要与 WebLogic Server 交互,Java 客户端必须能够获取某个远程对象的对象引用,并能够调用对该对象的操作。要完成此操作,客户端应用程序代码必须执行下列步骤:
1.设置 InitialContext的 JNDI 环境属性。
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,
"t3://localhost:7001");
try {
ctx = new InitialContext(ht);
// 使用程序中的上下文
}
catch (NamingException e) {
// 打印异常
}
finally {
try {ctx.close();}
catch (Exception e) {
// 打印异常
}
}
2.使用上下文查找 WebLogic Server 名称空间中的已命名对象。
try {
ServiceBean bean = (ServiceBean)ctx.lookup("ejb.serviceBean");
}catch (NameNotFoundException e) {
// 绑定不存在
}catch (NamingException e) {
// 打印异常
}
3.使用已命名对象来获取远程对象的引用,并调用对远程对象的操作。
bean.invoke();
4.关闭上下文。
try {
ctx.close();
} catch () {
//打印异常
}
JTA
Java事务API(Java Transaction API,简称JTA ) 是一个Java企业版 的应用程序接口,在Java环境中,允许完成跨越多个XA资源的分布式事务。
JTA是以X/Open XA体系结构为基础设计的,但他定义了两种不同的事务边界划分的API。应用服务器,如EJB服务器,与应用组件区别对待。JTA提供了一个接口,javax.transaction.TransactionManager,这是供应用服务器自己进行开始,提交或回滚事务使用悳,同时还提供了另外一个接口javax.transaction.UserTransaction,这是供一般客户代码,如Java Servlet或是EJB管理事务使用的
UserTransaction的begin方法开始一个全局事务,并将该事务与调用线程关联。事务到线程的管理是由事务管理器完成的,对应用程序透明的。
对嵌套事务的支持不是必须的。如果调用线程的上下文已经与事务关联,并且事务管理器的实现并不支持嵌套的事务,UserTransaction的begin方法调用时将抛出NotSupportedException。
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
try {
Context ctx = new InitialContext(env);
Object obj = ctx.lookup("javax.transaction.UserTransaction");
UserTransaction ut = (UserTransaction) obj;
ut.begin();
//数据库操作
ut.commit();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException | IllegalStateException | RollbackException | HeuristicMixedException
| HeuristicRollbackException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}