- 浏览: 696763 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
java.naming.factory.url.pkgs 的用途
- 博客分类:
- Java 课程
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 10759关于获取数据源的语法,大体有(javax.sql.D ... -
解析 HTTP
2010-11-14 18:09 47823、HTTP 请求 客户端通过发送 HTTP 请求向服务器 ... -
Tomcat server.xml 文件
2010-11-07 17:21 1197Tomcat 服务器有一系列可配置的组件构成,这些组件 ... -
Tomcat的体系结构
2010-11-04 21:13 1450Tomcat的体系结构 Tomcat服务器是由一系列可配 ... -
第十四课时: 输入/输出1
2010-10-30 20:48 1286Java 的 IO 支持通过 java.io 包 ... -
第十七课时: 网络编程
2010-10-18 22:00 1116一. 网络编程的基础知 ... -
第十六课时: 多线程
2010-10-07 14:24 950一. 继承 Thread 类创建线程 通过继承 Thread ... -
第十四课时:输入/输出2
2010-09-05 15:54 1221... -
第十三课时:Annotation 注释
2010-08-29 15:55 1087从 JDK 5.0 开始,Java 增加了对元数据 ( ... -
第十二课时:JDBC 编程 (2)
2010-08-28 13:13 845示例: import java.sql.*; impor ... -
第十二课时:JDBC 编程 (1)
2010-08-08 15:52 2063一、SQL 语句基础 SQL 的全称是 Structured ... -
第11课时:异常处理
2010-07-25 16:51 1108一、异常处理机制 1、使用 try...catch 捕获异常 ... -
第十课时:与运行环境交互
2010-07-24 06:03 750一、与用户交互 1、使用 Scanner 获取键盘输入 获 ... -
第九课时:泛型
2010-07-11 17:00 1355一、定义泛型接口、类 JDK 1.5 改写了 ... -
第六课时:面向对象(5)—— 2010年05月22日
2010-07-04 13:45 956一、内部类 在某些情况下,我们把一个类放在另一个类的 ... -
第三课时:面向对象(2)
2010-05-02 23:20 1368一、成员变量与局部变量 二、类的继 ... -
第二课时:数组、面向对象(1)
2010-05-02 23:19 930一、数组 1、 ... -
第四课时:面向对象(3)
2010-05-02 23:17 872一、基本数据类型的包装类 1、 基本数据类型和包装 ... -
第一课时提纲:Java 基础(GC)
2010-03-22 23:22 1171一、Java 命名规范 1、对常量的命名规范: ...
相关推荐
javax.naming.NamingException: Cannot create resource instance类加载异常,希望可以帮助跟我一样错误的人。
JAVA JNDI免证书修改AD域密码
博文链接:https://yanghaiskys.iteye.com/blog/223317
jlink --module-path 模块地址 --add-modules java.base,java.compiler,java.management,java.naming,jdk.naming.dns,java.datatransfer,java.desktop,java.logging,java.prefs,java.scripting,java.xml,javafx.base...
javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi javax.net javax.net.ssl javax.print javax.print.attribute javax.print.attribute.standard javax.print.event javax....
JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,...
javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi javax.net javax.net.ssl javax.print javax.print.attribute javax.print.attribute.standard javax.print.event javax....
java.util.zip [9 examples] javax.accessibility [7 examples] javax.crypto [14 examples] javax.imageio [6 examples] javax.naming [9 examples] javax.naming.directory [12 examples...
在JBOSS 环境中配置JMS,在程序中可以通过JNDI 获取连接,如消息启动Bean 就可以通过JNDI获取... @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/queue/adaption_notification") })
javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi javax.net javax.net.ssl javax.print javax.print.attribute javax.print.attribute.standard javax.print.event javax....
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); InitialContext ctx = new ...
javax.naming.spi 提供一些方法来动态地插入对通过 javax.naming 和相关包访问命名和目录服务的支持。 javax.net 提供用于网络应用程序的类。 javax.net.ssl 提供用于安全套接字包的类。 javax.print 为 JavaTM ...
Advanced Java Programming is a textbook specially... Java Naming and Directory Interface Chapter 25. Java Message Service Chapter 26. Introduction to J2EE Chapter 27. Java and CORBA 28. Java Server Faces
注:JDK1.3版本或更低的版本支持java.rmi.Naming,JDK1.3以后将命名服务API整合到JNDI中,javax.naming.Context声明了注册、查找,以及注销对象的方法。 三、实验要求 (1) 对关键代码解释清楚; (2) 远程对象...
https://github.com/alibaba/nacos/releases/tag/1.2.1
在部署EJB的消息驱动Bean时遇到了如下的错误: ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2)-2) Unable to reconnect org.jboss.resource.adapter.jms.inflow....
javax.naming.spi 提供一些方法来动态地插入对通过 javax.naming 和相关包访问命名和目录服务的支持。 javax.net 提供用于网络应用程序的类。 javax.net.ssl 提供用于安全套接字包的类。 javax.print 为 JavaTM ...
naming-factory.jar
javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi javax.net javax.net.ssl javax.print javax.print.attribute javax.print.attribute.standard javax.print.event javax....