[JBoss] JNDI与JBossNS
JNDI的作用
JNDI是 Java 命名与目录接口(Java Naming and Directory Interface)。
随着分布式应用的发展,远程访问对象访问成为常用的方法。虽然说通过Socket等编程手段仍然可实现远程通信,但按照模式的理论来说,仍是有其局限性的。RMI技术,RMI-IIOP技术的产生,使远程对象的查找成为了技术焦点。JNDI技术就应运而生。JNDI技术产生后,就可方便的查找远程或是本地对象。
可以认为就是我给你一个字符串,你就给出对应字符串所对应的对象。
如果没有JNDI
例如要想通过JDBC访问数据库:
Connection conn=null; try { Class.forName("com.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) {} } }
没有JNDI的做法存在的问题:
1、数据库服务器名称、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;
2、数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;
3、随着实际使用终端的增加,原配置的连接池参数可能需要调整;
4、......
有了JNDI之后
首先,在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;
然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。
具体操作如下(以JBoss为例):
1、配置数据源
在JBoss 的 D:\jboss420GA\docs\examples\jca 文件夹下面,有很多不同数据库引用的数据源定义模板。将其中的 mysql-ds.xml 文件Copy到你使用的服务器下。
修改 mysql-ds.xml 文件的内容,使之能通过JDBC正确访问你的MySQL数据库,如下:
<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>MySqlDS</jndi-name> <connection-url>jdbc:mysql://localhost:3306/lw</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password>rootpassword</password> <exception-sorter-class-name> org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter </exception-sorter-class-name> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources>
2、在程序中引用数据源:
通过Context.lookup()方法找到数据源
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) { } } }
在J2EE规范中,J2EE 中的资源并不局限于 JDBC 数据源。引用的类型有很多,其中包括资源引用(已经讨论过)、环境实体和 EJB 引用。特别是 EJB 引用,它暴露了 JNDI 在 J2EE 中的另外一项关键角色: 查找其他应用程序组件。
J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。JNDI 在 J2EE 中的角色就是“交换机” —— J2EE 组件在运行时 间接地 查找其他组件、资源或服务的通用机制。
在多数情况下,提供 JNDI 供应者的容器可以充当有限的数据存储,这样管理员就可以设置应用程序的执行属性,并让其他应用程序引用这些属性(Java 管理扩展(Java Management Extensions,JMX)也可以用作这个目的)。JNDI 在 J2EE 应用程序中的主要角色就是提供间接层,这样组件就可以发现所需要的资源,而不用了解这些间接性。
在 J2EE 中,JNDI 是把 J2EE 应用程序合在一起的粘合剂,JNDI 提供的间接寻址允许跨企业交付可伸缩的、功能强大且很灵活的应用程序。这是 J2EE 的承诺,而且经过一些计划和预先考虑,这个承诺是完全可以实现的。
JBossNS
JBossNS是JBoss的名称服务器,每个应用服务器把bean绑定到应用服务器自主选择的命名上下文中。
例如部署一个EAR文件,JBoss会将该bean绑定在与EAR文件名相关的环境中。
通过JMX-console,jboss --> service=JNDIView,单击list操作的invoke按钮,即可查看绑定在JNDI中的内容:
如果JNDI绑定的是个bean,则会显示该bean的继承层次。
在默认情况下,会话Bean将绑定JNDI为"EJB/remote"为远程接口和"EJB/local"为本地接口,当EJB部署在一个ear文件中,默认的jndi绑定将会与ear文件相关联。
缺省绑定 缺省情况下,会话 Bean 的 JNDI 绑定名称是:
- local接口:<ejbName>/local
- remote接口:<ejbName>/remote
当 EJB 被部署到某个 ear 中后,缺省绑定名称中会以 ear 包的名称作为前缀。比如,ear 文件是 test.ear 时,EJB 的绑定名称是:
- local接口:test/<ejbName>/local
- remote接口:test/<ejbName>/remote
可以在bean中通过@LocalBinding指定该类的JNDI名称:
@Stateless
@Remote(XXService.class)
@RemoteBinding(jndiBinding = "com....bean")
@Local(XXServiceLocal.class)
@LocalBinding(jndiBinding = "com....bean")
@TransactionRetry
public class XXServiceBean 。。。
http://docs.oracle.com/javase/jndi/tutorial/
[JBoss] JNDI与JBossNS相关推荐
- Exposing/Accessing JBoss JNDI Objects/Datasources From an External JVM
今天要评估改造一个实时信息发送平台的工作量,原来的系统里用到了JNP,在调研时,发现了这篇不错的文章. 原文地址:http://www.engfers.com/2008/08/07/exposing_ ...
- jboss jndi服务
http://www.builder.com.cn/2007/1217/684114.shtml
- 研究项目: JBoss架构分析
原文转自:http://www.huihoo.org/jboss/jboss.cn.html 研究项目: JBoss架构分析 Jenny Liu School of Information Techn ...
- JBoss技术支持文档
1.本节内容简介 本章主要介绍JBOSS(免费的 EJB服务器),以及教会大家如何安装Jboss,建立你第一个EJB和客户端.关于什么是EJB,以及如何开发等.这些关于EJB方面有很多书籍进行描 述, ...
- java jstack dump 线程 介绍 解释
最近抽时间把JVM运行过程中产生的一些线程进行了整理,主要是围绕着我们系统jstack生成的文件为参照依据. 前段时间因为系统代码问题,造成性能到了天花板,于是就dump了一份stack出来进行分析 ...
- spring源码分析之spring-web remoting模块概况及基本概念
spring-web总体分为三部分:caucho.httpinvoker.jaxws,其总体构造图如下: uml结构: 先看看网上搜索到的上述实现的原理吧:Spring RMI,Hessian/Bur ...
- (转)性能分析之-- JAVA Thread Dump 分析综述
原文链接:http://blog.csdn.net/rachel_luo/article/details/8920596 最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相 ...
- jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
转载自 jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令 1.Jstack 1.1 jstack能得到运行java程序的java stack和native stack ...
- Java 7:HashMap与ConcurrentHashMap
从我过去有关性能的文章和HashMap案例研究中可能已经看到,Java线程安全性问题可以很轻松地使Java EE应用程序和Java EE容器崩溃. 在对Java EE性能问题进行故障排除时,我观察到的 ...
最新文章
- java 网络通信协议_JAVA-基础-网络通信协议
- selector是在文件夹drawable中进行定义的xml文件转载 https://www.cnblogs.com/fx2008/p/3157040.html...
- 最新wingide6破解方法(支持Linux),亲测有效,支持python3.0
- GoogleAppEngine是什么?
- 深度学习需要注意的11个方面
- Spark源码分析之Sort-Based Shuffle读写流程
- 修改pip install镜像源
- 解析腾讯企业邮箱到自己域名,设置mail的cname
- cisco交换机配置方法
- python爬取网站视频保存到本地
- 物联网设备OTA软件升级之:升级包下载过程之旅
- 这2个PDF转Word免费不限页数工具很多人没用过
- 苹果开放降级_iPhone 突然开放降级...
- Android 仿美团选择城市、微信通讯录、饿了么点餐列表的导航悬停分组索引列表
- Html 所有触发事件
- 三重邪骨手机版怎么登录服务器未响应,三重邪骨手机版-三重邪骨模拟器预约v1.0-k73游戏之家...
- tensorflow安装之 nvidia官网下载cuda速度太慢!!!!! 还有 TensorFlow下载速度太慢
- 机器学习的数学基础 矩阵论与概率论
- 2021寒假MISC打卡DAY13
- uni-app离线打包APK教程