- 浏览: 707465 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- Struts1.x (7)
- 事务 (2)
- Hibernate (11)
- 数据库 (14)
- JavaScript&Ajax (43)
- JSP&Servlet (2)
- Flex (1)
- 其它 (9)
- Java (22)
- 框架集成 (1)
- WebService (3)
- Tomcat (3)
- 加密和安全登录 (13)
- 基于原型的JavaScript (0)
- JavaDoc和Java编码规范 (3)
- CAS (1)
- 加密 (1)
- Axis2 (10)
- Ext2.x (3)
- SSH整合 (2)
- Ext (0)
- 正则表达式 (1)
- 设计模式 (4)
- 对象序列化技术 (3)
- CVS (2)
- Struts2 (6)
- Spring 2.x (7)
- Spring Security (2)
- Java 课程 (20)
- 程序员之死 (1)
- 软件测试 (6)
- UML (5)
- NetBeans (1)
- cxf (1)
- JMS (13)
- 设计 (5)
- ibatis2.x (3)
- Oracle (1)
- WebSphere (7)
- 概要设计 (1)
- DB2 (10)
- PowerDesigner (0)
- 软件工程 (5)
- rose (1)
- EA (1)
- LDAP (7)
- Portal&Portlet (3)
- MQ (10)
- ESB (4)
- EJB (2)
- JBoss (2)
最新评论
-
typeRos:
只有配置文件,没有代码么大神
Spring实现IBMMQ的JMS消息发布/订阅模式 -
panamera:
如果ActiveMQ服务器没有启动,这个时候消息生产者使用Jm ...
Spring JMSTemplate 与 JMS 原生API比较 -
lian819:
顶1楼, 引用文件, 配置属性, 太方便了
EXTJS 同步和异步请求 -
wilhard:
说得清楚明白
<%@ include file=""%>与<jsp:include page=""/>区别 -
刘琛颖:
总结的很好。受益了
javascript 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
HTML clipboard
因笔者最近实现一个JavaEE jndi的实现,对jndi的相关属性的学习和自己的理解给大家一个分享。
在创建Jndi上下文时,使用Context.INITIAL_CONTEXT_FACTORY("java.naming.factory.initial")属性,用来指定创建jndi上下文的工厂类,例如以下代码是我们很熟悉的代码使用jboss jndi的示例代码:
final Hashtable environment = new Hashtable();
environment.put(Context. INITIAL_CONTEXT_FACTORY , "org.jnp.interfaces.NamingContextFactory" );
environment.put(Context. URL_PKG_PREFIXES , "org.jboss.naming:org.jnp.interfaces" );
final InitialContext ctx = new InitialContext(environment);
ctx.lookup(" java:/jdbc/test1");
但上述代码中,很多人对于Context.URL_PKG_PREFIXES("java.naming.factory.url.pkgs")的用途不是很了解,其实,这个属性主要用在查询url中包括scheme方法id时的创建对应的jndi上下文上,例如查询"java:/jdbc/test1"等类似查询上,即以冒号(":")标识的shceme。
Context.URL_PKG_PREFIXES属性值由多个java 包(package)路径,其中以冒号(":")分隔各个包路径,这些包路径中包括jndi相关实现类。当在jndi上下文中查找"java:"这类包括scheme方案ID的url时,InitialContext类将优先查找Context.URL_PKG_PREFIXES属性指定的包路径中是否存在 scheme+"."+scheme + "URLContextFactory"工厂类(需要实现ObjectFactory接口),如果存在此工厂类,则调用此工厂类的getObjectInstance方法获得此scheme方案ID对应的jndi上下文,再在此上下文中继续查找对应的url,仍以上述示例代码为例,当执行ctx.lookup("java:/jdbc/test1")时,InitialContext类将调用"org.jnp.interfaces.java.javaURLContextFactory"类创建jndi上下文,再在此上下文中查找"jdbc/test1"。
上述执行逻辑主要在NamingManager.getURLContext方法中实现,其javadoc api文档内容如下:
getURLContext
public static Context
getURLContext
(String
scheme, Hashtable
<?,?> environment) throws NamingException
得到的上下文用于解析 scheme
方案的 URL。得到的上下文没有绑定到特定 URL。它能够使用指定方案处理任意
URL。
创建所得上下文的工厂的类名称包含命名约定方案 id URLContextFactory(例如,用于 "ftp" 方案 id 的 "ftpURLContextFactory"),所在的包指定如下。Context.URL_PKG_PREFIXES 环境属性(可能包含从 applet 参数、系统属性或应用程序资源文件中获得的值)包含以冒号分隔的包前缀列表。按指定的顺序尝试该属性中的每个包前缀来加载工厂类。默认包前缀是 "com.sun.jndi.url"(如果指定的包前缀都无效,则尝试使用此默认前缀)。完整的包名称是使用包前缀构造的,并与方案 id 连接在一起。
例如,如果方案 id 为 "ldap",而 Context.URL_PKG_PREFIXES 属性包含 "com.widget:com.wiz.jndi",则命名管理器将尝试加载以下类,直到成功实例化其中的一个:
- com.widget.ldap.ldapURLContextFactory
- com.wiz.jndi.ldap.ldapURLContextFactory
- com.sun.jndi.url.ldap.ldapURLContextFactory
如果某一工厂被实例化,则使用以下参数调用该工厂来产生结果上下文。
factory.getObjectInstance(null, environment);
例如,按上述方式对 LDAP URL 上下文工厂调用 getObjectInstance() 将返回一个可以解析 LDAP url(例如 "ldap://ldap.wiz.com/o=wiz,c=us"、"ldap://ldap.umich.edu/o=umich,c=us" 等等)的上下文。
注意,对象工厂(实现 ObjectFactory 接口的对象)必须是公共的,并且必须有一个不接受任何参数的公共构造方法。
scheme
- 上下文支持的 URL 的非 null 方案
id。environment
- 将在创建对象和对象工厂时使用的环境属性(可能为
null)。scheme
解析 URL 的上下文;如果没有找到用于创建该上下文的工厂,则返回 null
。NamingException
-
如果在创建上下文时发生命名异常。其实现代码如下:
private static Object getURLObject(String scheme, Object urlInfo, Name name, Context nameCtx, Hashtableenvironment) throws NamingException {
ObjectFactory factory = (ObjectFactory) ResourceManager.getFactory (Context. URL_PKG_PREFIXES , environment, nameCtx, "." + scheme + "." + scheme + "URLContextFactory" ,defaultPkgPrefix );
if (factory == null )
return null ;
.......
}
发表评论
-
java:comp/env 解释
2012-07-13 13:40 10849关于获取数据源的语法,大体有(javax.sql.D ... -
解析 HTTP
2010-11-14 18:09 48113、HTTP 请求 客户端通过发送 HTTP 请求向服务器 ... -
Tomcat server.xml 文件
2010-11-07 17:21 1232Tomcat 服务器有一系列可配置的组件构成,这些组件 ... -
Tomcat的体系结构
2010-11-04 21:13 1488Tomcat的体系结构 Tomcat服务器是由一系列可配 ... -
第十四课时: 输入/输出1
2010-10-30 20:48 1327Java 的 IO 支持通过 java.io 包 ... -
第十七课时: 网络编程
2010-10-18 22:00 1156一. 网络编程的基础知 ... -
第十六课时: 多线程
2010-10-07 14:24 989一. 继承 Thread 类创建线程 通过继承 Thread ... -
第十四课时:输入/输出2
2010-09-05 15:54 1260... -
第十三课时:Annotation 注释
2010-08-29 15:55 1140从 JDK 5.0 开始,Java 增加了对元数据 ( ... -
第十二课时:JDBC 编程 (2)
2010-08-28 13:13 881示例: import java.sql.*; impor ... -
第十二课时:JDBC 编程 (1)
2010-08-08 15:52 2109一、SQL 语句基础 SQL 的全称是 Structured ... -
第11课时:异常处理
2010-07-25 16:51 1154一、异常处理机制 1、使用 try...catch 捕获异常 ... -
第十课时:与运行环境交互
2010-07-24 06:03 786一、与用户交互 1、使用 Scanner 获取键盘输入 获 ... -
第九课时:泛型
2010-07-11 17:00 1392一、定义泛型接口、类 JDK 1.5 改写了 ... -
第六课时:面向对象(5)—— 2010年05月22日
2010-07-04 13:45 994一、内部类 在某些情况下,我们把一个类放在另一个类的 ... -
第三课时:面向对象(2)
2010-05-02 23:20 1427一、成员变量与局部变量 二、类的继 ... -
第二课时:数组、面向对象(1)
2010-05-02 23:19 965一、数组 1、 ... -
第四课时:面向对象(3)
2010-05-02 23:17 906一、基本数据类型的包装类 1、 基本数据类型和包装 ... -
第一课时提纲:Java 基础(GC)
2010-03-22 23:22 1193一、Java 命名规范 1、对常量的命名规范: ...
相关推荐
java.naming.factory.url.pkgs=com.sun.jndi.url java.naming.provider.url=jdbc:oracle:thin:@localhost:1521:orcl ``` #### MySQL数据库JNDI配置 MySQL是一款非常流行的开源关系型数据库管理系统。配置MySQL...
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces ``` 此外,还需要将`jndi.properties`文件所在的目录添加到客户端的classpath中。 ##### 2.2 JBoss中部署EJB 部署EJB主要有两种方式: - **...
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces ``` 有了这个配置文件和JBoss的客户端库,客户端就可以访问JBoss提供的EJB服务。 部署EJB在JBoss中有两种主要方法,以下以Session Bean为例,...
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); InitialContext ctx = new InitialContext(props); HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); ```...
- `java.naming.factory.url.pkgs`:指定包含服务器特定的 JNDI 工厂类的包。 - `jnp.socketFactory`:定义客户端套接字工厂。 - `jnp.timeout` 和 `jnp.sotimeout`:设置 JNP 协议的超时参数。 **企业命名上下文 ...
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces ``` 这使得客户端能够利用JBoss提供的EJB服务。 5. JBoss中部署EJB的方法 有两种主要的EJB部署方式: - **方法一**:直接将ejb jar包和web应用...
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces ``` 有了这些配置,客户端就能利用JBoss提供的EJB服务。 **部署EJB**: 在JBoss中有两种基本的部署方式,这里以Session Bean为例,假设客户端...
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); InitialContext ctx; try { ctx = new InitialContext(props); HelloWorld helloworld = (HelloWorld) ctx.lookup("myproject/...
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces ``` #### 三、JBuilder与Sybase数据库的集成配置 **1. 准备工作** - **获取Sybase jConnect驱动:** - 使用JBuilder 6.0自带的 `...
<Parameter name="java.naming.factory.url.pkgs" value="org.apache.naming"> <Parameter name="java.naming.provider.url" value="file:/path/to/classes"> ``` #### 7. Windows平台上的命名服务查询问题 - *...
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost ``` - 第四部分是客户端调用代码,如: ```java InitialContext ctx = new InitialContext(); ...
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); props.setProperty("jnp.disableDiscovery", "true"); InitialContext ctx = new InitialContext(props); return...
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); InitialContext ctx; try { ctx = new InitialContext(props); HelloMinRemote hello = (HelloMinRemote) ctx.lookup("HelloMin/remote...
prop.put("java.naming.factory.url.pkgs", "org.jboss.naming"); InitialContext ctx = null; try { ctx = new InitialContext(prop); FirstEjb helloWorld = (FirstEjb) ctx.lookup("java:global/MyTestEjb/...
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); ctx = new InitialContext(props); return ctx; } public static void main(String[] args) { try { Context ...
配置文件中,`JndiTemplate`指定了JNDI服务的位置(`java.naming.provider.url`),命名上下文工厂(`java.naming.factory.initial`)和URL包(`java.naming.factory.url.pkgs`)。`JmsTemplate`的`...
<entry key="java.naming.factory.url.pkgs" value="com.sun.jndi.cosnaming"/> <entry key="java.naming.factory.initial" value="com.sun.jndi.cosnaming.CNCtxFactory"/> <entry key="java.naming.provider....
8. **jndi.properties**:在 ClassPath 中创建 jndi.properties 文件并设置 `java.naming.factory.url.pkgs` 的包前缀。 9. **自定义 InitialContextFactoryBuilder**:提供自定义的 `javax.naming.spi....