- 浏览: 289906 次
- 性别:
- 来自: 龙城
最新评论
-
redey:
这垃圾东西,1.6以上JDK不支持
Jocky混淆JAVA代码(保护你的JAVA项目) -
u012907473:
水电费是否是否
js页面缓存的一个解决办法 -
jackson200:
讲解的很详细!
Jocky混淆JAVA代码(保护你的JAVA项目) -
jamesqq79:
下载解压缩后,不知是何文件格式,用PDF阅读器打不开。
Java程序员的推荐阅读书籍之十《Agile Java》 -
meimei727:
<!-- 给页面文件中的js和css引用增加版本号 -- ...
利用ant进行项目发布
原帖地址:http://blog.csdn.net/qhmao/archive/2008/10/19/3097753.aspx
在J2SE下使用JNDI下就显得困难一些,首先,我们没有单独的JNDI服务器可以用,JBoss提供了一个免费的JNP服务,通过配置可以作为 单独的JNDI服务器启用。不过这里就不这么麻烦了,如何使用JBOSS作为JNDI服务器,以后将单独撰文讲述,这里我使用sun提供的 com.sun.jndi.fscontext.RefFSContextFactory作为JNDI服务器,其实这是使用文件系统来存储JNDI对象。 至于如何存储后文还将专门描述。
为了在J2SE下使用JNDI,我们首先得到sun的网站上下载3个包,jndi.jar、fscontext.jar和providerutil.jar,前者提供了JNDI服务的接口,后两者是我们要使用的文件系统作为JNDI服务器的支持包。
使用RefFSContextFactory,要求绑定的对象必须实现javax.naming.Referencable接口,否则在绑定时将报如下错误:
Can only bind References or Referenceable objects
各个JDBC驱动提供商提供的DataSource类都实现了Referencable接口,可以直接使用。不过本着学习的态度,我还是在这里演示一下如何实现Referencable接口。
这个如何实现将在后文结合代码详细介绍。本例包括4个类,说明如下:
- BindedClass:自定义的实现Referenceable接口的类
- BindedClassFactory:工厂类,能够把一个Reference对象转换为BindedClass对象
- Bind:测试类,用于在JNDI中绑定对象
- Loopup:测试类,用于从JNDI中获取对象
3.1 BindedClass和BindedClassFactory
3.1.1 BindedClass
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.Referenceable;
import javax.naming.StringRefAddr;
public class BindedClass implements Referenceable
... {
public String value;
public BindedClass()
... {
}
@Override
public Reference getReference() throws NamingException
... {
Reference r = new Reference( this .getClass().getName(), BindedClassFactory. class .getName(), null );
r.add( new StringRefAddr( " value " , this .getValue()));
return r;
}
public String getValue()
... {
return value;
}
public void setValue(String value)
... {
this .value = value;
}
}
3.1.2 BindedClassFactory
import java.util.Hashtable;
import javax.naming. * ;
import javax.naming.spi. * ;
public class BindedClassFactory implements ObjectFactory
... {
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx,
Hashtable <? , ?> environment) throws Exception
... {
if (obj instanceof Reference)
... {
Reference ref = (Reference)obj;
String val = (String)ref.get( " value " ).getContent();
BindedClass o = new BindedClass();
o.setValue(val);
return o;
}
return null ;
}
}
3.1.3 代码解释
Referenable接口只有一个方法,就是getReference(),返回一个Reference对象,BindedClass只设了一个 示例成员变量Value,存储一个字符串值,在创建Refernce对象时,要指定它引用的类名以及创建该类的工厂对象,JNDI Context在绑定该对象时就会将这些信息都存到文件中,将来从JNDI中取对象时可就全靠工厂对象根据文件中的内容重建BindedClass对象 了。我这里提前把绑定后生成的文件内容说一下,大家会更有一个直观的印象,其内容如下所示:
bind1/RefAddr/0/Type=value bind1/ClassName=lld.test.jndi.BindedClass bind1/RefAddr/0/Encoding=String bind1/FactoryName=lld.test.jndi.BindedClassFactory bind1/RefAddr/0/Content=abcdefg
大家看到了,前面在BindedClass.getReference()方法中使用了如下语句:
r.add(new StringRefAddr("value", this.getValue()));
就是定义要将这些信息存储到JNDI中呢,至于最后的“bind1/RefAddr/0/Content=abcdefg”,那是因为我在后面的示 例Bind.java中将其值设成了“abcdefg”而已,呵呵。而BindedClassFactory.getObjectInstance()方 法中
String val = (String)ref.get("value").getContent();
就是用来取到存储的值呢。
3.2 Bind.java
本例用来绑定一个BindedClass对象
import java.util.Properties;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class Bind
... {
public static void main(String[] args) throws Exception
... {
Properties ps = new Properties();
ps.setProperty(Context.INITIAL_CONTEXT_FACTORY, " com.sun.jndi.fscontext.RefFSContextFactory " );
ps.setProperty(Context.PROVIDER_URL, " file:JNDI_REF " );
DirContext ctx = new InitialDirContext(ps);
String key = " bind1 " ;
BindedClass b = new BindedClass();
b.setValue( " abcdefg " );
ctx.rebind(key, b);
System.out.println( " Binded successfully! " );
ctx.close();
}
}
3.3 Lookup.java
本例用来从JNDI中获取绑定的BindedClass对象
import java.util.Properties;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class Lookup
... {
public static void main(String[] args) throws Exception
... {
Properties ps = new Properties();
ps.setProperty(Context.INITIAL_CONTEXT_FACTORY, " com.sun.jndi.fscontext.RefFSContextFactory " );
ps.setProperty(Context.PROVIDER_URL, " file:JNDI_REF " );
DirContext ctx = new InitialDirContext(ps);
String key = " bind1 " ;
BindedClass o = (BindedClass)ctx.lookup(key);
System.out.println(o.getValue());
ctx.close();
}
}
发表评论
-
autochk program not found 蓝屏重启问题解决
2012-04-17 10:54 13841起因: 因为硬盘空间不够,所以把原来的双系统中的ubu ... -
IOS开发一些资源
2012-02-06 16:07 1366从别的地方看到的,多谢作者,现贴在这里备忘。 在线教程 ... -
发现一个好东东,可以让浏览器跟本地桌面交互,哈哈
2011-09-08 17:35 1248http://gears.google.com/ -
nodejs开发运行环境搭建
2011-08-18 15:03 4404一. geddy 开发运行环境搭建 geddy是基 ... -
javascript来势凶猛
2011-08-15 17:22 1215引子 java编程弄了7,8个年头了,也 ... -
Oracle驱动包装
2011-07-06 17:06 2036见附件。 -
javaeye域名变了
2011-04-01 10:31 1280javaeye域名变了,才发现,哈哈,mark下。 -
拥抱敏捷
2011-01-15 17:27 1100前言 有关项目管理和软件开发方 ... -
重温设计模式
2011-01-13 10:27 1165策略模式: 定义了算 ... -
jsoup,html解析的利器
2011-01-07 09:21 1208http://jsoup.org/download -
关于html表格复制到excel
2010-09-09 14:04 5875刚才一个朋友问我这个事情,我拍脑袋想了一下,给他答复不可能,因 ... -
Java 路径 System.getProperty("key")的参数key
2010-09-02 14:37 1291java.version ... -
这种需求,大家看看有没有比较好的解决方案
2010-06-25 09:47 2350在我们的应用中,碰到了如图所示的一种网络结构。 重新描 ... -
java中singleton的几种实现方式
2010-06-24 15:08 1476传统的最简单的方式 这种模式有一个缺点就是不能实现延 ... -
oracle分页查询数据重复问题的解决
2010-06-24 11:00 3429在oracle分页查询中,我们采用类似以下所示的公认的比较高效 ... -
ubuntu10.04中安装使用IE6
2010-06-21 09:55 2598在用ubuntu910的时候,已经装了一遍IE了,但是升级到1 ... -
今天发现的两个有价值的东东
2010-06-17 15:45 1521其一,iRedMail,开源邮件解决方案。 其 ... -
ubuntu 10.04 中安装mysql5.1.4
2010-06-17 15:28 1839自从升级到10.04以后,mysql就不正常,卸载装了n次,均 ... -
升级到ubuntu 10.04,wine中的ie不正常了
2010-06-11 10:01 1709ubuntu上也折腾了半年了,日常工作生活基本没有太多的障碍了 ... -
升级到ubuntu10.04,mysql不能用了
2010-06-11 09:53 18799.10版本用了半年了,10.04发布了,看了10.04的宣传 ...
相关推荐
#### 三、JNDI的工作原理 1. **JNDI架构**:JNDI的核心概念包括**JNDI管理器**、**服务提供者接口(SPI)**和**应用程序接口(API)**。其中,**JNDI管理器**负责管理命名空间和目录信息;**SPI**定义了服务提供者必须...
这篇“DBCP 数据库连接池JNDI连接 学习笔记”主要探讨了如何结合JNDI(Java Naming and Directory Interface)来使用DBCP进行数据库连接管理。JNDI提供了一种标准的方式来查找和绑定资源,如数据源,在企业级应用中...
### JNDI (Java Naming and Directory Interface)学习笔记 #### 一、JNDI简介 JNDI(Java Naming and Directory Interface),即Java命名和目录接口,是在分布式计算环境中使用的一种标准化接口,它允许Java应用...
【标题】"Tomcat学习笔记 - 使用JNDI数据源" 在Java应用服务器如Tomcat中,使用JNDI(Java Naming and Directory Interface)数据源是一种标准的方式,它允许我们集中管理和配置数据库连接,提高应用的可移植性和可...
笔记可能涉及JNDI的基本操作和在J2EE应用中的应用场景。 6. **JTA(Java Transaction API)**:JTA为分布式事务处理提供了标准接口,确保在多组件环境中的数据一致性。笔记可能会讲解事务的ACID属性和JTA的使用方法...
【JAVA WEB学习笔记】——Tomcat中数据源的配置与使用 在Java Web开发中,数据源(DataSource)是管理数据库连接的关键组件。它提供了一种高效、灵活的方式来获取和管理数据库连接,尤其是在大型企业级应用中。...
7. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一种标准的方式来查找和访问各种命名和目录服务,常用于在JavaWeb应用中查找数据库连接池、邮件服务器配置等资源。 8. **DAO(Data Access Object...
5. **Java EE相关技术**:包括JNDI(Java Naming and Directory Interface)、JTA(Java Transaction API)和JMS(Java Message Service)等,这些在企业级Java应用中广泛使用,笔记可能涉及这些技术的基本概念和...
这份"java web 笔记整理"涵盖了该领域的关键概念和技术,包括Servlet、JSP、MVC模式、JNDI、JTA以及EJB等核心内容。以下是根据笔记内容整理出的知识点详解: 1. **Servlet**:Servlet是Java平台上的服务器端组件,...
这个压缩包很可能包含了多个文件,如HTML、PDF或Markdown格式的笔记文档,它们可能分别对应J2EE的不同组件和技术,如Servlet、JSP、EJB、JNDI、JTA、JMS、JPA等。这些文件可能按照课程章节或主题进行组织,以便读者...
8. **JNDI(Java Naming and Directory Interface)**:JNDI为Java应用提供了一种查找和管理资源的接口,如EJB、数据源等。 9. **JAX-RS(Java API for RESTful Web Services)**:JAX-RS是JavaEE中的RESTful服务...
6. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一个统一的接口来查找和管理网络资源,如EJB、数据库连接等。 在"达内笔记(达内助教整理的)"中,你可能会发现以下内容: - **基础篇**:Java...
3. JNDI(Java Naming and Directory Interface):服务发现和绑定,用于查找和访问各种资源。 通过学习《魔乐科技 J2EE详细笔记》,开发者可以深入了解J2EE的各个层面,掌握企业级应用开发的必备技能。这份笔记...
本笔记主要涵盖了Java EE的基础知识,包括Servlet、JSP、JNDI、JPA等方面的内容。 一、Servlet概述 Servlet是Java EE中的一种服务器端组件,用于处理HTTP请求并返回响应。Servlet的生命周期包括初始化、提供服务和...
### Servlet学习笔记3:深入理解Servlet...综上所述,本学习笔记涵盖了Servlet技术的核心概念、Tomcat服务器配置、JNDI和数据源管理以及Java EE架构的概览,是Java Web开发者深入理解和掌握Servlet技术的重要参考资料。
3. **JNDI**:命名和目录服务,用于查找和管理资源。 4. **EJB**:企业JavaBean,提供分布式计算,事务管理,安全性等功能。 5. **JMS**:Java消息服务,实现异步通信和解耦。 6. **JTA**:Java事务API,处理分布式...
在韩顺平老师的教学笔记中,首先提到了J2EE平台下的十三种核心技术,这些技术对于理解JSP及其相关的Web开发环境至关重要。 1. **Java数据库连接(JDBC)** - **JDBC-ODBC桥**:早期的一种解决方案,通过ODBC(开放...
学习笔记会讲解如何通过JNDI查找和管理这些服务。 5. **JTA(Java Transaction API)和JPA(Java Persistence API)**:JTA提供了一种统一的事务管理机制,确保多操作的原子性。JPA则简化了对象关系映射(ORM),...