原文出自.№爱の冰封
的博客关于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");
分享到:
相关推荐
在实际应用中,EJB组件需要部署到支持EJB3.0的应用服务器,如GlassFish、WildFly或TomEE等。部署时,Bean类、接口和相关的部署描述符(如果有)会被包含在ejb-jar文件中,然后该文件将被包含在一个更大的应用档案...
5. **测试和应用服务器配置**:为了运行和测试MDB,可能需要设置应用服务器(如Tomcat、GlassFish、WildFly等)的配置,包括JMS提供者和MDB的部署。 这个"mdb.rar"压缩包可能是开发者为了分享一个简单的EJB 3.0 MDB...
- WebLogic Server是Oracle提供的一个企业级应用服务器,支持Java EE规范,包括EJB3.0。它提供了管理和监控应用程序的工具,以及高度可扩展和高可用性的特性。 通过以上步骤,开发者可以在WebLogic 11g上发布和...
在WebLogic Server 10.3这个流行的Java EE应用服务器上,我们可以方便地部署和运行EJB 3.0应用程序。 首先,我们要理解EJB 3.0中的本地接口(Local Interface)。本地接口是客户端与EJB通信的一种方式,它不涉及...
JBOSS是一个开源的应用服务器,支持EJB 3.0。在JBOSS中配置EJB 3.0,你需要完成以下步骤: 1. **安装JBOSS** - 下载并安装适合的JBOSS版本。 2. **创建EJB项目** - 使用IDE(如JBUILDER)创建一个新的EJB项目,并...
- **JBoss应用服务器**:EJB3.0需要JBoss4.0或更高版本作为运行环境。 - **Java EE版本**:至少需要Java EE5.0或更高版本来支持EJB3.0规范。 - **开发工具集成**:配置JBoss到IDE(如Eclipse)中,便于开发和调试。 ...
- EJB 3.0 中的实体 Bean 需要在服务器上配置数据连接池,以便通过 JNDI 访问数据库。 - 在 jBoss 的 `docs\examples\jca` 文件夹下找到相关配置文件(例如 `mssql-ds.xml`),将其复制到 `server\default\deploy`...
JBoss Application Server(现称为WildFly)是Red Hat公司的开源Java EE应用服务器,同样支持EJB3.0。JBoss以其灵活性和社区支持而受到青睐。 **Jboss的EJB部署** JBoss的EJB部署流程与WebLogic相似: 1. 安装并...
- **框架设计**: 提供具体的案例分析,展示如何设计一个基于EJB 3.0的轻量级应用框架。 通过以上知识点的详细解释,读者不仅能够掌握EJB 3.0的基本原理和实现细节,还能学会如何有效地利用这些技术构建高质量的企业...
- **目标读者**:本教程旨在为具备Java基础的初学者提供EJB 3.0的学习资料,无需预先学习EJB 2.0。 - **技术变迁**:随着EJB 3.0的发展,EJB 2.0的相关技术和实践将逐渐被淘汰。 #### 2. 运行环境配置 - **下载与...
在事务管理方面,EJB3.0提供了更灵活的事务策略。开发者可以通过@Transactional注解在方法级别控制事务,这比EJB2.0中的接口或XML配置更直观。 最后,EJB3.0在安全性、JPA(Java Persistence API)和JSF(Java...
本教程旨在帮助开发者快速掌握如何使用 JBoss 应用服务器来部署和管理基于 EJB 3.0 的应用。 #### 二、运行环境配置 ##### 2.1 下载与安装 1. **下载 JBoss AS**: 从 JBoss 官方网站下载最新版本的 JBoss 应用...
### EJB3.0中文文档知识点总结 #### 第一章:EJB知识与运行环境配置 **1.1 什么是ENTERPRISE JAVA BEANS (EJB)** EJB(Enterprise JavaBeans)是一种Java标准,用于构建分布式、健壮的企业级应用程序。它允许...
在ejb3.0中,应用服务器可以直接管理数据库连接,提供JNDI名来供应用程序查找并使用。`mysql-ds.xml`定义了与MySQL数据库的连接参数,如URL、用户名和密码,是数据库连接池的一部分。 2. **CompositePK** - 在ejb...
- **服务器配置**: 如 jboss-4.0.4.GA 等应用服务器需要配置特定的 JAR 文件,如 jboss-ejb3x.jar 和 jboss-annotations-ejb3.jar 来支持 EJB 3.0。 **7. 示例代码** 下面是一个简单的示例代码,展示了如何定义...
本教程将带你了解EJB3.0的基本概念,主要包括Session Bean、Entity Bean和Message Driver Bean,以及如何在JBoss应用服务器上进行部署和调试。 ### Session Bean Session Bean是EJB中的一种关键组件,主要用于处理...
**部署和访问**:在Weblogic服务器上部署这个EJB3.0应用时,需要将Bean和相应的接口打包到一个Java EE兼容的档案(如EAR或WAR文件)中。然后,可以在没有安装Weblogic的机器上通过JNDI查找和调用Bean的方法,实现...
EJB3.0的部署通常通过在应用服务器(如Glassfish、JBoss或WildFly)中部署整个EAR(Enterprise Archive)或WAR(Web Application Archive)文件完成。部署后,其他组件可以通过JNDI(Java Naming and Directory ...