`

JNDI & EJB

阅读更多
JNDI (The Java Naming and Directory InterfaceJava 命名和目录接口) 是一组在Java 应用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。借助于JNDI 提供的接口,能够通过名字定位用户、机器、网络、对象服务等。
 
命名服务:就像DNS一样,通过命名服务器提供服务,大部分的J2EE 服务器都含有命名服务器。
 
目录服务:一种简化的RDBMS 系统,通过目录具有的属性保存一些简单的信息。目录服务通过目录服务器实现,比如微软ACTIVE DIRECTORY 等。
 
JNDI 的好处:
1)包含大量命名和目录服务,可以使用相同API 调用访问任何命名或目录服务。
2)可以同时连接多个命名和目录服务。
3)允许把名称同JAVA 对象或资源关联起来,不必知道对象或资源的物理ID
4)使用通用接口访问不同种类的目录服务
5)使得开发人员能够集中使用和实现一种类型的命名或目录服务客户API 上。
 
上下文:由0 或多个绑定构成。比如java/MySqljava 为上下文(context),MySql 为命名
 
子上下文subConext):上下文下的上下文。比如MyJNDITree/ejb/helloBeanejb 为子上下文
 
因为JNDI 是一组接口,所以我们只需根据接口规范编程就可以。要通过JNDI 进行资源访问,我们必须设置初始化上下文的参数主要是设置JNDI 驱动的类名(java.naming.factory.initial) 和提供命名服务的URL (java.naming.provider.url)
 
因为Jndi 的实现产品有很多。所以java.naming.factory.initial 的值因提供JNDI 服务器的不同而不同java.naming.provider.url 的值包括提供命名服务的主机地址和端口号。
 
访问Jboss 服务器的例子代码:
Properties props = new Properties();
props.setProperty(
"java.naming.factory.initial""org.jnp.interfaces.NamingContextFactory");
props.setProperty(
"java.naming.provider.url""localhost:1099");
InitialContext 
= new InitialContext(props);
HelloWorld helloworld 
= (HelloWorld) ctx.lookup("HelloWorldBean/remote");

 

访问Sun 应用服务器的例子代码:
Properties props = new Properties();
props.setProperty(
"java.naming.factory.initial",
"com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty(
"java.naming.provider.url""localhost:3700");
InitialContext 
= new InitialContext(props);
HelloWorld helloworld 
= (HelloWorld) ctx.lookup("com.foshanshop.ejb3.HelloWorld");

 

访问Weblogic10 应用服务器的例子代码:
Properties props = new Properties();
props.setProperty(
"java.naming.factory.initial""weblogic.jndi.WLInitialContextFactory");
props.setProperty(
"java.naming.provider.url""t3://localhost:7001");
InitialContext 
= new InitialContext(props);
HelloWorld helloworld 
= (HelloWorld) ctx.lookup("HelloWorldBean#com.foshanshop.ejb3.HelloWorld");

 

JBOSS 环境下JNDI 树的命名约定:
1java:copm 这个上下文环境和其子上下文环境仅能被与之相关的特定应用组件访问和使用
2java: 子上下文环境和绑定的对象只能被Jboss 服务器虚拟机内的应用访问
3)其他上下文环境 只要实现序列化就可以被远程用户调用。

 

 

当你把EJB发布到JBOSS后,你就可以jboss 的管理平台查看她们的JNDI ,输入下面URL http://localhost:8080/jmx-console/点击“service=JNDIView” link,在出现的page里找到“List of MBean operations:”栏的“list()”方法,click “Invoke”button,就会看到下面的界面
在上图中可以看见HelloWorld 会话Bean JNDI路径,JNDI 路径名的组成规则是“上层名称/下层名称每层之间以”/”分隔HelloWorld 会话Bean JNDI路径名是:HelloWorldBean/remote
 
 
下面要重点说明一下Jboss EJB JNDI 名称默认的命名规则,命名规则如下:
1> 如果EJB 打包进后缀为*.ear J2EE 发布文件,默认的JNDI 路径名称是
访问本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
访问远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote
例:EJB HelloWorld 打包进名为 HelloWorld.ear J2EE 应用,访问她远程接口的JNDI 名是:HelloWorld/HelloWorldBean/remote
 
2> 如果EJB 应用打包成后缀为*.jar 的发布文件, 默认的JNDI 路径名称是
访问本地接口:EJB-CLASS-NAME/local
访问远程接口:EJB-CLASS-NAME/remote
例: HelloWorld 应用打包成HelloWorld.jar 文件,访问她远程接口的JNDI 名称是:HelloWorldBean/remote
 
注意:EJB-CLASS-NAME 是不带包名的com.foshanshop.ejb3.impl.HelloWorldBean 只需取HelloWorldBean
 
目前网上很多教材获取JNDI 路径名的方式不适用在jboss 下,如:
HelloWorld helloworld = (HelloWorld) ctx.lookup(HelloWorld.class.getName());
这种方式适用于Sun Application Server glassfish
 

 

  

自定义JNDI 命名
默认的JNDI 命名规则上面已经介绍过,但有些情况下需要自定义名称。Jboss 要自定义JNDI 名称,可以使用@LocalBinding @RemoteBinding 注释
 
关键代码(只需要在bean interface前加binding注释):
import org.jboss.annotation.ejb.RemoteBinding;
...
@Remote
@RemoteBinding (jndiBinding
="testbinding/myAccount")
publicinterface MyAccount 
extends Serializable {
    publicint Add(
int a, int b);
    publicint getResult() ;
}

 
那么在client端调用上面的EJB的代码为:
InitialContext ctx 
= new InitialContext(props);
MyAccount bean1 
= (MyAccount) ctx.lookup("testbinding/myAccount");
 
分享到:
评论

相关推荐

    JNDI调用分布式EJB3 通用接口

    标题“JNDI调用分布式EJB3 通用接口”意味着我们将探讨如何使用JNDI来查找和调用分布在不同节点上的EJB3组件。EJB3中的一个重要特性是它可以跨网络进行分布,这使得应用程序能够利用多台服务器的资源,提高可伸缩性...

    ejb-jndi

    【ejb-jndi】章节主要讲解了Java Naming and Directory Interface (JNDI)的相关概念、问题以及架构。JNDI作为一个Java平台的标准接口,它为开发者提供了通过名字查找和访问各种命名服务和目录服务的能力。 1. **...

    WebLogic v9.2 EJB和JNDI Demo

    WebLogic v9.2 EJB和JNDI Demo

    使用eclipse通过weblogic开发简单的ejb应用(weblogic 10.x & ejb3.x)

    客户端可以使用JNDI查找来获取远程或本地Bean的引用,以便调用其方法。在EJB 3.0中,我们可以通过如下方式查找Bean: ```java InitialContext ic = new InitialContext(); MyBeanRemote myBean = (MyBeanRemote) ic...

    EJB中JNDI的使用源码例子

    在EJB中,JNDI(Java Naming and Directory Interface)扮演着重要的角色,它是一种服务接口,用于查找和绑定分布式系统中的对象。JNDI使得开发者可以在应用中通过名字来访问资源,如EJB组件、数据源、邮件会话等。...

    基于java的EJB中JNDI的使用源码例子.zip

    这个压缩包"基于java的EJB中JNDI的使用源码例子.zip"包含了使用JNDI进行EJB查找的代码示例,下面将详细介绍JNDI在Java EE中的应用以及EJB的相关知识点。 1. JNDI简介: JNDI提供了一种统一的方式来管理和查找资源...

    EJB例子包含client以及jndi配置

    在标题"**EJB例子包含client以及jndi配置**"中,我们可以理解这是一个关于EJB应用的实例,它不仅包括了EJB服务器端的实现,还包含了客户端(client)的代码以及JNDI(Java Naming and Directory Interface)的配置。...

    EJB中JNDI的使用源码例子.7z

    在EJB中,JNDI经常用于查找和实例化远程或本地的EJB组件。本文将深入探讨EJB中JNDI的使用,并通过源码示例来解释其工作原理。 1. JNDI基础知识 JNDI的核心概念是命名和目录服务。它提供了一个统一的接口来访问不同...

    基于Java的实例源码-EJB中JNDI的使用源码例子.zip

    6. **JNDI与EJB的关系**:JNDI在EJB中的作用相当于一个“服务目录”,客户端通过JNDI查找找到EJB的服务,而EJB则通过JNDI注册自身,使得其服务可以在整个应用中被发现和使用。 7. **安全性考虑**:在使用JNDI查找...

    EJB中JNDI的使用源码例子.rar

    这个名为“EJB中JNDI的使用源码例子.rar”的压缩包,很显然是一个包含了具体示例代码的资源,可以帮助我们理解如何在EJB环境中运用JNDI。 首先,让我们来深入了解一下JNDI。JNDI提供了一种统一的方式来查找和管理...

    java源码:EJB中JNDI的使用源码例子.zip

    EJB使用JNDI(Java Naming and Directory Interface)进行服务查找和绑定,这是一种在分布式环境中定位对象的机制。本压缩包包含了一个EJB中JNDI使用源码的例子,可以帮助开发者深入理解这两者之间的交互。 在Java ...

    POJO javaBean EJB JNDI 理解及区别

    ### POJO、JavaBean、EJB与JNDI的理解及区别 #### POJO:Plain Old Java Object POJO,即“纯旧式Java对象”,它指的是最基础的Java类对象,没有任何框架约束,也不实现任何特定接口。POJO的主要特征是拥有私有...

    EJB MDB JNDI配置信息

    ### EJB MDB JNDI配置信息详解 #### 一、引言 在Java企业级应用开发中,EJB(Message Driven Bean, MDB)是用于处理异步消息传递的关键技术之一。而Java Naming and Directory Interface (JNDI)则是Java平台提供的一...

    Eclipse开发EJB_3.0

    在 EJB 3.0 中,JNDI 查找 EJB 通过 EJB 中的 Bean 的名称中的 Remote 注释所指向的远程接口名称来找到该 EJB。该方法可以理解为 EJB 2 中的 ejb-jar 配置文件中的 JNDI-Name 标签中的值。 EJB 3.0 中的 ejb-jar ...

    基于Java的实例开发源码-EJB中JNDI的使用源码例子.zip

    EJB提供了许多服务,如事务管理、安全性、生命周期管理等,而Java Naming and Directory Interface(JNDI)是EJB中不可或缺的一部分,它在Java应用中用于查找和绑定资源。本实例将通过源代码的形式,深入解析EJB中...

    基于java的开发源码-EJB中JNDI的使用源码例子.zip

    基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的...

    基于Java的源码-EJB中JNDI的使用源码例子.zip

    - EJB的注入(@EJB注解):在Java EE 5及以上版本,可以使用`@EJB`注解将EJB直接注入到客户端或另一个EJB中,这样就不再需要显式使用JNDI查找。 - CDI(Contexts and Dependency Injection)与JNDI:在更现代的...

Global site tag (gtag.js) - Google Analytics