`
iamxi
  • 浏览: 191566 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[转载]EJB3.0的各应用服务器提供的JNDI接口

    博客分类:
  • Java
阅读更多

原文出自.№爱の冰封 的博客关于JNDI and EJB ,作者:冰封的爱

 

 

JNDI (The Java Naming and Directory Interface Java 命名和目录接口 ) 是一组在 Java 应用中访问命名和目录服务的 API 。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。借助于 JNDI 提供的接口,能够通过名字定位用户、机器、网络、对象服务等。
 
命名服务 :就像 DNS 一样,通过命名服务器提供服务,大部分的 J2EE 服务器都含有命名服务器。
 
目录服务 :一种简化的 RDBMS 系统,通过目录具有的属性保存一些简单的信息。目录服务通过目录服务器实现,比如微软 ACTIVE DIRECTORY 等。
 
JNDI 的好处 :
1 )包含大量命名和目录服务,可以使用相同 API 调用访问任何命名或目录服务。
2 )可以同时连接多个命名和目录服务。
3 )允许把名称同 JAVA 对象或资源关联起来,不必知道对象或资源的物理 ID
4 )使用通用接口访问不同种类的目录服务
5 )使得开发人员能够集中使用和实现一种类型的命名或目录服务客户 API 上。
 
上下文 :由 0 或多个绑定构成。比如 java/MySql java 为上下文( context ), MySql 为命名
 
子上下文 subConext ):上下文下的上下文。比如 MyJNDITree/ejb/helloBean ejb 为子上下文
 
因为 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 树的命名约定:
1 java:copm  这个上下文环境和其子上下文环境仅能被与之相关的特定应用组件访问和使用
2 java : 子上下文环境和绑定的对象只能被 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");
 

分享到:
评论

相关推荐

    EJB3.0无状态SessionBean例子

    在实际应用中,EJB组件需要部署到支持EJB3.0的应用服务器,如GlassFish、WildFly或TomEE等。部署时,Bean类、接口和相关的部署描述符(如果有)会被包含在ejb-jar文件中,然后该文件将被包含在一个更大的应用档案...

    mdb.rar_EJB3.0_ejb3.0 example

    5. **测试和应用服务器配置**:为了运行和测试MDB,可能需要设置应用服务器(如Tomcat、GlassFish、WildFly等)的配置,包括JMS提供者和MDB的部署。 这个"mdb.rar"压缩包可能是开发者为了分享一个简单的EJB 3.0 MDB...

    EJB3.0+weblogic操作文档

    - WebLogic Server是Oracle提供的一个企业级应用服务器,支持Java EE规范,包括EJB3.0。它提供了管理和监控应用程序的工具,以及高度可扩展和高可用性的特性。 通过以上步骤,开发者可以在WebLogic 11g上发布和...

    Ejb3.0 Local Working In Weblogic10.3

    在WebLogic Server 10.3这个流行的Java EE应用服务器上,我们可以方便地部署和运行EJB 3.0应用程序。 首先,我们要理解EJB 3.0中的本地接口(Local Interface)。本地接口是客户端与EJB通信的一种方式,它不涉及...

    EJB3.0入门教程 PDF

    JBOSS是一个开源的应用服务器,支持EJB 3.0。在JBOSS中配置EJB 3.0,你需要完成以下步骤: 1. **安装JBOSS** - 下载并安装适合的JBOSS版本。 2. **创建EJB项目** - 使用IDE(如JBUILDER)创建一个新的EJB项目,并...

    EJB3.0__EJB3.0

    - **JBoss应用服务器**:EJB3.0需要JBoss4.0或更高版本作为运行环境。 - **Java EE版本**:至少需要Java EE5.0或更高版本来支持EJB3.0规范。 - **开发工具集成**:配置JBoss到IDE(如Eclipse)中,便于开发和调试。 ...

    jboss ejb3.0开发介绍

    - EJB 3.0 中的实体 Bean 需要在服务器上配置数据连接池,以便通过 JNDI 访问数据库。 - 在 jBoss 的 `docs\examples\jca` 文件夹下找到相关配置文件(例如 `mssql-ds.xml`),将其复制到 `server\default\deploy`...

    ejb3.0+Weblogic+Jboss安装配置及入门例子

    JBoss Application Server(现称为WildFly)是Red Hat公司的开源Java EE应用服务器,同样支持EJB3.0。JBoss以其灵活性和社区支持而受到青睐。 **Jboss的EJB部署** JBoss的EJB部署流程与WebLogic相似: 1. 安装并...

    EJB3.0

    - **框架设计**: 提供具体的案例分析,展示如何设计一个基于EJB 3.0的轻量级应用框架。 通过以上知识点的详细解释,读者不仅能够掌握EJB 3.0的基本原理和实现细节,还能学会如何有效地利用这些技术构建高质量的企业...

    EJB3.0中文 版

    - **目标读者**:本教程旨在为具备Java基础的初学者提供EJB 3.0的学习资料,无需预先学习EJB 2.0。 - **技术变迁**:随着EJB 3.0的发展,EJB 2.0的相关技术和实践将逐渐被淘汰。 #### 2. 运行环境配置 - **下载与...

    EJB3.0与EJB2.0的区别

    在事务管理方面,EJB3.0提供了更灵活的事务策略。开发者可以通过@Transactional注解在方法级别控制事务,这比EJB2.0中的接口或XML配置更直观。 最后,EJB3.0在安全性、JPA(Java Persistence API)和JSF(Java...

    EJB3.0中文文档

    ### EJB3.0中文文档知识点总结 #### 第一章:EJB知识与运行环境配置 **1.1 什么是ENTERPRISE JAVA BEANS (EJB)** EJB(Enterprise JavaBeans)是一种Java标准,用于构建分布式、健壮的企业级应用程序。它允许...

    ejb3.0实例教程源码

    在ejb3.0中,应用服务器可以直接管理数据库连接,提供JNDI名来供应用程序查找并使用。`mysql-ds.xml`定义了与MySQL数据库的连接参数,如URL、用户名和密码,是数据库连接池的一部分。 2. **CompositePK** - 在ejb...

    EJB3.0学习心得

    - **服务器配置**: 如 jboss-4.0.4.GA 等应用服务器需要配置特定的 JAR 文件,如 jboss-ejb3x.jar 和 jboss-annotations-ejb3.jar 来支持 EJB 3.0。 **7. 示例代码** 下面是一个简单的示例代码,展示了如何定义...

    EJB3.0入门图文教程

    本教程将带你了解EJB3.0的基本概念,主要包括Session Bean、Entity Bean和Message Driver Bean,以及如何在JBoss应用服务器上进行部署和调试。 ### Session Bean Session Bean是EJB中的一种关键组件,主要用于处理...

    weblogic+ejb3.0例子

    **部署和访问**:在Weblogic服务器上部署这个EJB3.0应用时,需要将Bean和相应的接口打包到一个Java EE兼容的档案(如EAR或WAR文件)中。然后,可以在没有安装Weblogic的机器上通过JNDI查找和调用Bean的方法,实现...

    EJB3.0之HelloWorld

    EJB3.0的部署通常通过在应用服务器(如Glassfish、JBoss或WildFly)中部署整个EAR(Enterprise Archive)或WAR(Web Application Archive)文件完成。部署后,其他组件可以通过JNDI(Java Naming and Directory ...

Global site tag (gtag.js) - Google Analytics