zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    有关 PHP 和 MySQL 时区的一点总结
    PHP CLI模式下的多进程应用
    Linux编程之:五个常见PHP数据库问题
    用php定制404错误页面 并发信通知管理员
    配置PHP站点安全综合教程
    新手必看的PHP学习入门的一些基础知识
    彻底杜绝PHP的session cookie错误
    专家预言:PHP将比Java更受开发人员欢迎
    PHP企业级应用之WebService续篇
    清除 数据库 日志 以 Db_Test 为例
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152653.html
Copyright © 2011-2022 走看看