- 浏览: 1031039 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (675)
- ios (214)
- android-course (5)
- unity3d (7)
- cocos2d (36)
- html5 (3)
- game (5)
- android (42)
- java (57)
- php (12)
- 创业 (10)
- SEO (3)
- 架构 (2)
- 数据库 (3)
- 产品设计 (9)
- 操作系统 (10)
- Web前端 (11)
- 其他 (50)
- GAE (1)
- mac os (8)
- Open Source (2)
- 序列号 (10)
- C (2)
- database (2)
- 算法 (6)
- 设计模式 (1)
- photoshop (1)
- 3dmax (1)
- maya (1)
- opengl (3)
- 游戏设计 (1)
- 趋势 (1)
- cocos2d-x (4)
- shell (3)
- c++ (30)
- lua (5)
- flash (1)
- spring (3)
- mysql (4)
- Git (6)
- xmpp (1)
- cocos2dx (14)
- mac (2)
- 编程规范 (2)
- windows (1)
- linux (5)
- coocs2dx (1)
- ubuntu (2)
- aws (1)
- OPENGLES (1)
- 原画 (1)
最新评论
-
jlees:
Best mobile app testing tool pc ...
iOS + XCode 4 + GHUnit = Mobile TDD+Continuous testing -
ipanda:
楼主,能否给一个Micro CloudFoundry的虚机或者 ...
Cloud Foundry使用及开发向导 -
love_zongming:
谢谢分享。。
visio2007序列号 -
雨花台舞水:
你这才是枪文把
套在 360 黑匣子外面的黑盒子:你被技术型枪稿吓到了么? -
hugh.wang:
改天试试
Mac版魔兽争霸3 1.24e下载
NDI就是为JAVA中命名和目录服务定义的JAVA API,是命名服务的抽象机制。在J2EE中,JNDI的目的是用来查找J2EE服务器的注册资源。只要该对象在命名服务器上注册过,且你知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。这样你就可以在无需知道对象位置的情况下获取和使用对象。SUN对JNDI只提供接口,使用JNDI只需要用到JNDI接口而不必关心具体实现。 在RMI中绑JNDI的限制是,绑定的对象必须是Remote类型,所以就需要自己扩展一个。其实JNDI还有两个Context.SECURITY_PRINCIPAL和Context.SECURITY_CREDENTIAL,如果访问JNDI需要用户名和口令,这两个也要提供,不过一般用不上。下面是两个使用JNDI的简单例子的代码,可以直接运行。
使用main方法做JNDI的demo时出现NoInitialContextException是因为无法从System.properties中获得必要的JNDI参数,在服务器环境下,服务器启动时就把这些参数放到System.properties中了,于是直接new InitialContext()就搞定了。但是在单机环境下,可没有JNDI服务在运行,那就需要手动启动一个JNDI服务。在JDK 5的rt.jar中一共找到了4种SUN自带的JNDI实现:LDAP,CORBA,RMI,DNS。
这4种JNDI要正常运行还需要底层的相应服务。一般我们没有LDAP或CORBA服务器,也就无法启动这两种JNDI服务,DNS用于查域名的,以后再研究,唯一可以在main()中启动的就是基于RMI的JNDI服务。
现在我们就可以在main()中启动基于RMI的JNDI服务并且绑一个对象到JNDI上。注意,我直接把JNDI的相关参数放入了System.properties中,这样,后面的代码如果要查JNDI,直接new InitialContext()就可以了
package com.ellen.jndi;
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.util.Date;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
//在RMI中绑JNDI的限制是,绑定的对象必须是Remote类型
class Person implements Remote, Serializable {
private static final long serialVersionUID = -8592182872966400365L;
private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String toString() {
return "name=" + this.getName() + "&pass=" + this.getPass();
}
}
// 在RMI中绑JNDI的限制是,绑定的对象必须是Remote类型
// 外部扩展,可以内部扩展也可以外部扩展
class RemoteDate extends Date implements Remote {
};
public class Demo {
public static void initDate() throws NamingException, RemoteException {
// 设置参数
LocateRegistry.createRegistry(1099);
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
InitialContext ctx = new InitialContext();
// 在RMI中绑JNDI的限制是,绑定的对象必须是Remote类型
// 内部扩展,可以内部扩展也可以外部扩展
class RemoteDate extends Date implements Remote {
}
;
ctx.bind("java:comp/env/systemStartTime", new RemoteDate());
ctx.close();
}
public static void initDate2() throws NamingException, RemoteException {
// 设置参数
LocateRegistry.createRegistry(1099);
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
InitialContext ctx = new InitialContext();
// 自己扩展,可以内部扩展也可以外部扩展
// class RemoteDate extends Date implements Remote {
// }
// ;
ctx.bind("java:comp/env/systemStartTime", new RemoteDate());
ctx.close();
}
public static void findDate() throws NamingException, RemoteException {
// 直接使用
InitialContext ctx = new InitialContext();
Date startTime = (Date) ctx.lookup("java:comp/env/systemStartTime");
System.out.println("+++++++++++++++++++++++" + startTime.toString());
ctx.close();
}
public static void jndiDate() throws NamingException, RemoteException {
// Demo.initDate();
Demo.initDate2();
Demo.findDate();
}
public static void initPerson() throws NamingException, RemoteException {
// 设置参数
LocateRegistry.createRegistry(1099);
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
InitialContext ctx = new InitialContext();
// Person person = new Person();
// person.setName("ellen");
// person.setPass("000727");
ctx.bind("java:comp/env/person", new Person());
ctx.close();
}
public static void initPerson2() throws NamingException, RemoteException {
// 设置参数
LocateRegistry.createRegistry(1099);
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
InitialContext ctx = new InitialContext();
Person person = new Person();
person.setName("ellen");
person.setPass("000727");
ctx.bind("java:comp/env/person", person);
ctx.close();
}
public static void findPerson() throws NamingException, RemoteException {
// 直接使用
InitialContext ctx = new InitialContext();
Person person = (Person) ctx.lookup("java:comp/env/person");
System.out.println("------" + person.toString());
System.out.println("------" + person.getName());
System.out.println("------" + person.getPass());
ctx.close();
}
public static void jndiPerson() throws NamingException, RemoteException {
// Demo.initPerson();
Demo.initPerson2();
Demo.findPerson();
}
public static void main(String[] args) throws NamingException, RemoteException {
// 为什么两个jndi的例子不能同时运行
// internal error: ObjID already in use
// Demo.jndiDate();
Demo.jndiPerson();
}
}
发表评论
-
Java反射获取属性
2016-03-21 19:44 973import java.lang.reflect.Field ... -
JetBrains注册码计算(IntelliJ IDEA 15.0注册码激活)
2016-02-01 00:51 936安装前修改时间为2099年等很多年后的时间点,安装后选择免费 ... -
Memcached客户端简介
2014-05-22 11:56 795Memcached客户端性能评测报告 本次memcache ... -
IntelliJ IDEA 的 20 个代码自动完成的特性
2014-04-29 13:43 859在这篇文章中,我想向您展示 IntelliJ IDEA 中最 ... -
Openfire 性能优化
2013-07-26 00:04 1363Openfire 是一个XMPP协议的IM Server ... -
javamd5实例
2013-05-31 11:07 879import java.io.*; import java ... -
网络爬虫之网页更新的判断策略
2012-12-11 09:41 2093摘要:做搜索引擎的时候,网络爬虫(WebSpider)对 ... -
搭建Nexus
2012-12-05 00:43 6321. 首先下载Nexus 从官网htt ... -
从Maven私服获取依赖
2012-12-05 00:23 1078转自:http://blog.csdn.net/shei ... -
创建你的首个Maven项目
2012-12-03 23:56 928要创建你的首个项目,你需要使用Maven的Archet ... -
MyEclipse10.0(Mac)离线下线安装
2012-11-29 22:49 1090离线安装: http://downloads.myeclips ... -
cocosd-android原来是个山寨货
2012-06-13 09:25 9791、技术团队无优势:Cocos2D-Android版本与iPh ... -
正则表达式中问号等特殊字符的转义
2010-11-05 00:09 1628正则表达式中问号等特殊字符的转义 在.NET Framewor ... -
Spring 中 AOP 特性详解
2010-11-02 16:46 1554动态代理的实现原理 ... -
Spring 框架的设计理念与设计模式分析(2)
2010-10-29 14:33 1125如何创建 BeanFactory 工厂 正如图 ... -
Spring 框架的设计理念与设计模式分析(1)
2010-10-29 14:09 1044Spring 的骨骼架构 ... -
删除ie cookie
2010-10-26 11:33 1349Cookie[] cookies = request.g ... -
Spring with Tomcat 中文编码问题的解决方案
2010-10-26 09:55 1309由于各种原因,Java 应用中有关中文编码的问题总是层出不穷, ... -
MyEclipse 8.5 优化实例
2010-10-21 21:26 1689第一步: 取消自动validationvalidation ... -
cookie共享(单点登录)
2010-10-13 17:59 1135正常的cookie只能在一个应用中共享,即一个cooki ...
相关推荐
在“jndi.rar_jndi_site:www.pudn.com”这个压缩包中,包含了学习JNDI的基础材料,特别适合初学者入门。** 首先,让我们详细了解一下JNDI的核心概念和功能: 1. **命名服务**:命名服务允许我们将对象绑定到一个...
**EJB(Enterprise JavaBeans)**是...通过这个入门例程,你将学习到如何创建和配置EJB组件,如何在Java EE环境中部署和测试它们,以及如何编写客户端代码来调用EJB服务。这将为你进一步深入Java EE开发打下坚实基础。
【标题】"一个简单的J2EE入门系统"指的是基于Java 2 Platform, Enterprise Edition (J2EE)技术构建的基础教学项目。J2EE是Oracle公司(原Sun Microsystems)推出的企业级应用开发平台,用于构建分布式、多层的、面向...
Seam 是一个强大的Java EE框架,它主要起到了EJB3和JSF(JavaServer Faces)...它通过注解驱动的编程模型,使得组件之间的通信变得简单,同时也保留了对传统Java EE模式的灵活性,使得在需要时依然可以使用这些模式。
以上就是JSP快速入门教程的主要内容,包括JSP与Java的关系、JSP涉及的技术、运行环境、开发环境、Tomcat目录结构、简单的JSP实例、JSP的运行原理以及HTML表格的语法。这些基础知识构成了JSP学习的基石,为进一步深入...
此外,熟悉Java EE的其他组件,如JMS(Java Message Service)、JNDI(Java Naming and Directory Interface)等,也是提高开发效率的关键。 总之,《EJB 3.0从入门到精通》教程是一本全面覆盖EJB 3.0及其相关技术...
2. **熟悉JNDI查找** - EJBs通过Java命名和目录接口(JNDI)被客户端查找和引用。 3. **异常处理** - 学习如何正确地处理和抛出EJB相关的异常。 4. **事务管理** - 了解EJB的自动事务管理机制,以及何时需要手动控制...
- **创建ConnectionFactory**:使用JNDI(Java Naming and Directory Interface)查找或直接实例化ConnectionFactory。 - **创建Destination**:根据项目需求,创建队列或主题。 - **创建Session**:配置事务支持...
ibatis提供了多种数据源类型,包括简单的数据库连接池(`SIMPLE`)和基于JNDI的容器数据源(`JNDI`)。开发者可根据应用环境和需求选择合适的数据源类型。 4. **SQL Map**:引用具体的SQL映射文件,这些文件包含了...
JSP 与 Java 标准版(Java SE)不同,它属于企业级Java平台(Java EE),在这个平台上,还可以找到其他组件如EJB(Enterprise JavaBeans)以及各种服务,如JNDI(Java Naming and Directory Interface)、JDBC(Java...
### Java入门核心知识点详解 #### 一、JDK概述与安装 **JDK**(Java Development Kit)作为Java开发的基础工具包,对于学习Java编程语言至关重要。它包含了Java运行环境(Java Runtime Environment, JRE)、Java...
例如,数据源的配置既可以在环境配置中直接设置,也可以通过JNDI数据源来管理。此外,还可以配置自动数据库移植功能,它会在应用启动时根据域类(domain class)结构自动创建数据库表。 Grails的命令行工具非常强大...
- **其他服务**: JNDI (Java Naming and Directory Interface)、JDBC、RMI (Remote Method Invocation)、JAA (Java Authentication and Authorization Service)、JavaMail等。 #### 二、JSP与Servlet的基本原理 - ...
其他还有一些特点不是Spring的核心,这里只做简单陈述,如:对JDBC的封装与简化,提供事务管理功能,对O/R mapping工具(hibernate、iBATIS)的整合;提供MVC解决方案,也可以与其他web框架(Struts、JSF)进行整合...
- **1.2.1 简单、安全可靠** - Java吸取了C和C++的优点,同时去除了它们的一些复杂特性,比如运算符重载和多重继承。此外,Java不支持指针,从而避免了内存非法访问的问题。 - Java具有自动内存管理机制,能够有效...
本教程将带你逐步了解如何利用Tomcat、Spring和JMS(Java Message Service)构建一个简单的异步消息传递入门实例。 首先,让我们来理解一下核心组件: 1. **Tomcat**:这是一个流行的开源Java Servlet容器,用于...
### Java Web快速入门——全十讲 #### 一、Java与Web开发的融合:JavaEE标准框架 在探讨Java Web开发之前,我们首先要理解Java在Web领域的定位。Java不仅仅是一种编程语言,它还是一套完整的生态系统,适用于各种...
在这个"spring jms tomcat 异步消息传递入门实例"中,我们将探讨如何在Spring框架下利用JMS和Tomcat实现异步消息传递,以提高系统性能和可扩展性。 首先,理解异步消息传递的概念至关重要。在同步通信中,发送方...