- 浏览: 239687 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
akka_li:
学习了!但是为什么后续的没有了?!
EJB4:RMI和RMI-IIOP -
springaop_springmvc:
apache lucene开源框架demo使用实例教程源代码下 ...
Lucene学习笔记(一)Lucene入门实例 -
qepipnu:
求solr 客户端 jar包
Solr学习笔记(三)Solr客户端开发实例 -
zhangbc:
是这问题,赞!
Oracle Start Up 2 Oracle 框架构件、启动、解决一个问题 -
feilian09:
查询 select hibernate jdbc 那个效率快
Hibernate,JDBC性能探讨
说三个方面问题:Ant的使用(对Dev1的补充)写一个例子:如何将一个项目打包发送到指定位置,JNDI和JMS是理解EJB非常重要的两个方面。
本文所有例子是基于JBoss5.1,JBoss5.1安装及Home变量的配置,参见我的上篇博客EJB Dev1。
1. Ant
Ant的官方定义:"Ant is a Java library and command-line tool. Ant's mission is to drive processes described in build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications. Ant supplies a number of built-in tasks allowing to compile, assemble, test and run Java applications."
从定义可以看出build files是Ant工作的主要描述文件,targets,dependent,compile等描述Ant的主要工作过程,下面从一个例子说明Ant工作过程
Eclipse下建立工程com.home.ant,在src目录下建立package com.home.ant,在com.home.ant下建立类ANTTest.java,在工程根目录下建立文件build.xml,如下图:
编辑build.xml
(1)定义property,定义完后写一个target测试如下所示:
<?xml version="1.0"?> <project name="com.home.ant" default="test" basedir=".."> <property environment="env" /> <property name="app.dir" value="${basedir}\com.home.ant" /> <property name="src.dir" value="${app.dir}\src" /> <property name="jboss.home" value="${env.JBOSS_HOME}" /> <property name="jboss.server.config" value="default" /> <property name="build.dir" value="${app.dir}\build" /> <property name="build.classes.dir" value="${build.dir}\classes" /> <target name="test" > <echo>app.dir: ${app.dir}</echo> <echo>src.dir: ${src.dir}</echo> <echo>jboss.home: ${jboss.home}</echo> <echo>jboss.server.config: ${jboss.server.config}</echo> <echo>build.dir: ${build.dir}</echo> <echo>build.classes.dir: ${build.classes.dir}</echo> </target> </project>
上述文件定义了六个变量,工程位置,工程src位置,JBossHome位置,JBoss Config 位置,build完结果存放位置等。
完成后运行ANT,可以直接在Eclipse中运行,也可以在磁盘上进入相应项目运行运行。这里我直接在Eclipse中运行:在过程根目录下运行build.xml,如下图:
运行结果:
Buildfile: D:\workbench\com.home.ant\build.xml test: [echo] app.dir: D:\workbench\com.home.ant [echo] src.dir: D:\workbench\com.home.ant\src [echo] jboss.home: C:\jboss-5.1.0.GA [echo] jboss.server.config: default [echo] build.dir: D:\workbench\com.home.ant\build [echo] build.classes.dir: D:\workbench\com.home.ant\build\classes BUILD SUCCESSFUL Total time: 381 milliseconds
(2)将build过程中用到的jar添加到classpath
<path id="build.classpath"> <fileset dir="${jboss.home}\client"> <include name="*.jar" /> </fileset> <pathelement location="${build.classes.dir}" /> </path>
如上JBoss的client面临下包含大量jar文件
(3) 定义target prepare和clean,target prepare依赖于clean,如下
<target name="prepare" depends="clean"> <mkdir dir="${build.dir}" /> <mkdir dir="${build.classes.dir}" /> </target> <target name="clean"> <delete dir="${build.dir}" /> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\antTest.jar" /> </target>
clean的目的删除之前build的结果
(4)加入项目编译的描述
<target name="compile" depends="prepare" > <javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="com/**"> <classpath refid="build.classpath" /> </javac> </target>
编译依赖一prepare,所以编译之前先运行target prepare
(5)加将项目打包描述到build.xml
<target name="ejbjar" depends="compile" > <jar jarfile="${app.dir}\antTest.jar"> <fileset dir="${build.classes.dir}"> <include name="com/**/*.class" /> </fileset> </jar> </target>
显示打包的target依赖于编译,打包完的包名是antTest.jar,存放于项目根目录下
(6)将上述jar发布到指定目录的描述
<target name="deploy" depends="ejbjar"> <copy file="${app.dir}\antTest.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" /> </target>
发布依赖于打包,实质是将上述生成的antTest.jar复制到C:\jboss-5.1.0.GA\server\default\deploy位置
修改build.xml的默认target为deploy,则可以完成将项目编译,打包,发布到JBoss工作目录的任务,完整的build.xml内容如下:
<?xml version="1.0"?> <project name="com.home.ant" default="deploy" basedir=".."> <property environment="env" /> <property name="app.dir" value="${basedir}\com.home.ant" /> <property name="src.dir" value="${app.dir}\src" /> <property name="jboss.home" value="${env.JBOSS_HOME}" /> <property name="jboss.server.config" value="default" /> <property name="build.dir" value="${app.dir}\build" /> <property name="build.classes.dir" value="${build.dir}\classes" /> <path id="build.classpath"> <fileset dir="${jboss.home}\client"> <include name="*.jar" /> </fileset> <pathelement location="${build.classes.dir}" /> </path> <target name="prepare" depends="clean"> <mkdir dir="${build.dir}" /> <mkdir dir="${build.classes.dir}" /> </target> <target name="clean"> <delete dir="${build.dir}" /> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\antTest.jar" /> </target> <target name="compile" depends="prepare" > <javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="com/**"> <classpath refid="build.classpath" /> </javac> </target> <target name="ejbjar" depends="compile" > <jar jarfile="${app.dir}\antTest.jar"> <fileset dir="${build.classes.dir}"> <include name="com/**/*.class" /> </fileset> </jar> </target> <target name="deploy" depends="ejbjar"> <copy file="${app.dir}\antTest.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" /> </target> </project>
同样在Eclipse下运行build.xml,可以完成发布任务,到JBoss工作目录(C:\jboss-5.1.0.GA\server\default\deploy)下查看,antTest.jar存在于此目录下,说明测试成功;
注意:
当然Ant不止是可以将项目打成jar包,也可以编译打包web项目war或企业项目等
当然Ant不止可以编译java文件,还可以编译C,C++等;
2.JNDI
摘几句官网上JNDI的定义
“The Java Naming and Directory Interface (JNDI) is part of the Java platform, providing applications based on Java technology with a unified interface to multiple naming and directory services. ” 这句说明首先JNDI是一个Java标准,事实上JDK1.3版本中就已经公布了这一标准;其次JNDI的功能是为基于Java知识的应用程序访问命名和目录服务提供统一的接口;
那么什么是命名和目录服务?
"A Naming Service provides a mechanism for giving names to objects so you can retrieve and use those objects without knowing the location of the object. Objects can be located on any machine accessible from your network, not necessarily the local workstation.” 这句话对命名服务给出了一个很好的定义,即命名服务是一种根据名字检索出实体的机制,检索出的实体可以在任何位置,只要你的机器可以访问的到;
"A Directory Service also associates names with objects but provides additional information by associating attributes with the objects." 即目录服务是扩展了的命名服务,在这个检索出的实体上增加了一些属性;
"Naming and directory services play a vital role in intranets and the Internet by providing network-wide sharing of a variety of information about users, machines, networks, services, and applications." 这句说明命名和目录服务的重要性。
从一个图来理解JNDI
结合上图,推荐一句非常到位的JNDI的官方定义:
"JNDI is a Java API that defines an interface to Naming and Directory Services for Java programs. JNDI is just an API and not, in itself, a Naming and Directory Service. To use JNDI, an implementation of a Naming and Directory service must be available. JNDI provides a service-independent interface to the underlying Service Provider implementation."
理解这句话:
JNDI仅仅是一个API。
JNDI定义的接口供Java程序访问命名和目录服务。
要使用JNDI访问命名和目录服务,命名和目录服务必须要有一个实现。
JNDI和底层的服务实现是接口独立的。
上图还可以看出,在结构上,JNDI由两部分组成客户API和服务提供商接口(Service Provider Interface SPI) ,应用程序通过客户API访问目录服务,服务提供接口用于供厂商创建命名和目录服务的JNDI实现。
常见命名服务:
名称 | 简介 |
LDAP | Lightweight Directory Access Protocol s the approved standard for an Internet naming service |
DNS |
Domain Name System is the Internet naming service for identifying machines on a network |
NDS | Novell Directory Services from Novell provides information about network services, such as files and printers. |
NIS | Network Information Service from Sun Microsystems provides system-wide information about machines, files, users, printers, and networks |
CORBA | for distributed component programming |
RMI | for distributed Java programming |
JNDI编程:JBoss绑定了一个JNDI的实现,这里通过JBoss简单分析JNDI编程;
启动JBoss,http://localhost:8080/jmx-console/,点击service=JNDIView,可以查看JBossJNDI相关明细。
下面演示向Jboss注册一个对象,访问这个对象,销毁这个对象:
直接给出一段代码:
//Part one Properties properties = new Properties(); properties.setProperty(Context.INITIAL_CONTEXT_FACTORY , "org.jnp.interfaces.NamingContextFactory"); properties.setProperty(Context.PROVIDER_URL, "jnp://localhost"); Context ctx = new InitialContext(properties); //Part two String str = "Kylin Soong Test"; ctx.rebind("JNDITESTStr", str); User obj = new User(); obj.setId("100"); obj.setName("Kobe bryant"); ctx.rebind("JNDITESTSObj", obj); //Part three String lookUpStr = (String) ctx.lookup("JNDITESTStr"); System.out.println(lookUpStr); User user = (User) ctx.lookup("JNDITESTSObj"); System.out.println(user);
这段代码分三个部分:
Part One:JNDI初始化,初始化时需要引入JBoss client段jar包,这在Jboss 目录下client文件夹中可以找到;
Part two : 绑定 (向JBoss注册对象),注册的对象必须实现java.io.Serializable接口,如PartTwo中的User:
public class User implements Serializable { private String id, name; public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public String toString() { return "[" + id + ", " + name + "]"; } }
注册完毕可以在Jboss控制台查看到刚注册的信息:
可以看到刚注册的JNDITESTStr和JNDITESTObj在JNDI View的列表中;
Part Three:查询,上段代码运行结果:
Kylin Soong Test [100, Kobe bryant]
当然也可以对注册的对象进行销毁:
ctx.unbind("JNDITESTSObj"); ctx.unbind("JNDITESTStr");
3. JMS
JMS是中间件技术的基础,由于我现在公司是一家中间件公司,所以对JMS我很早就有所了解,这里我不想多做解释,等以后有时间,我在对JMS做一研究。
more detail:
http://kylinsoong.iteye.com/blog/848713
发表评论
-
Oracle - Add Exist Validation Before Create Table
2011-11-07 13:49 1451Usually we need to check the ta ... -
JMX Architecture & "Hello Word" the JMX way
2011-10-25 20:07 1810JMX Architecture Overview: JMX ... -
Jboss-eap-5.1 Messaging
2011-08-02 21:50 2469This section I will concertate ... -
Jboss-eap-5.1 starting up note
2011-07-26 22:46 2577Jboss enterprise platform 5 hav ... -
EJB Security & JAAS Demo
2011-05-21 19:39 1609PROLOGUE: When deploying ... -
JBoss LoginInitialContext Factory Implementation
2011-05-15 16:05 1527Jboss has a series of imp ... -
Jboss Reference Exception Gallery
2011-04-27 14:08 28881. Unable to locate a login con ... -
Hibernate Annotation 的一个问题,给点意见
2011-03-10 12:43 22问题:org.hibernate.annotations. ... -
大家说说BBC的网站用的是什么技术做的
2011-02-22 05:01 1432最近在英国出差,发现这里的一些网站做的相当有特色,有些网站不是 ... -
Hibernate OneToMany 单向和双向配置对数据存取性能的比较
2011-02-08 17:06 22991. 开篇说明:今天是春 ... -
对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究
2010-12-26 15:45 16653本文列出几个“EJB 学习阶段总结:JBoss下发布一个Toy ... -
EJB 学习阶段总结:JBoss下发布一个Toy企业应用
2010-12-25 12:11 2618解释题目:为什 ... -
EJB7: Message Driven Bean
2010-12-21 22:42 2143在企业系统中需要使用 ... -
EJB6: EntityBean例子
2010-11-26 14:48 1486本例子描述向EJB容器(JBoss)部署http: ... -
JPA dev: 几个问题总结(续)
2010-11-25 18:02 24592. 如何由PoJo类生成数据库中的表 首先可以根据实体间关 ... -
JPA dev: 几个问题总结
2010-11-25 16:56 3400最近工作中遇到几个与JPA相关的问题,本文通过一个例子总结一下 ... -
JAXB学习
2010-11-24 22:35 01 什么是JAXB? JAXB全称Java Ar ... -
EJB5: JPA扩展-J2SE环境下使用EntityManager
2010-11-10 19:07 2704好久没有写博客了,最近比较忙,今天抽时间写点,最近 ... -
EJB4:RMI和RMI-IIOP
2010-11-02 21:14 4127计划提纲:引入→RMI概念→RMI HelloWorld程序→ ... -
EJB3: JBOSS 企业版、JBOSS服务器构架、EJB2.0 HelloWrold实例
2010-10-26 22:43 6470本文的研究基于jboss-eap- ...
相关推荐
**EJB Dev 1: EJB入门例子** Enterprise JavaBeans(EJB)是Java平台企业版(Java EE)的一部分,用于构建可扩展、安全且事务处理能力强大的分布式应用程序。EJB提供了一种标准的方式来实现业务逻辑,使得开发人员...
在标题"**EJB例子包含client以及jndi配置**"中,我们可以理解这是一个关于EJB应用的实例,它不仅包括了EJB服务器端的实现,还包含了客户端(client)的代码以及JNDI(Java Naming and Directory Interface)的配置。...
2. **EJB与JNDI的结合**: 在EJB中,JNDI主要用于查找EJB的引用。客户端首先通过JNDI查找EJB的Home接口,然后通过Home接口创建远程或本地的Session Bean实例。EJB的JNDI名称通常由服务器配置,包括企业bean的名称、...
通过上述分析,我们可以看到EJB的工作原理涉及到了多个层次的概念和技术,包括EJB容器、客户端和服务端代理对象、远程调用技术(RMI)、网络通信(Socket)以及命名和目录服务(JNDI)。这些元素共同协作,使得EJB...
2. 使用`lookup()`查找EJB:提供EJB的JNDI名称,通常由EJB的部署描述符决定。 ```java MyRemoteBean remoteBean = (MyRemoteBean) context.lookup("java:global/my-app/MyBean!com.example.MyRemoteBean"); ``` 这里...
1. **编译源代码**:ANT可以自动编译Java源代码,确保所有EJB类都被正确处理。 2. **创建JAR/WAR文件**:通过ANT的`jar`或`war`任务,可以将编译后的类打包成适合部署的格式。 3. **数据库脚本执行**:如果项目...
- 定义JNDI名称:在EJB部署描述符(ejb-jar.xml或web.xml)中,开发者会为每个EJB组件指定一个JNDI名称。 - 查找EJB:在客户端代码中,使用`InitialContext`类的`lookup`方法,传入JNDI名称来查找EJB引用。 - ...
在EJB 2.x时代,EJB主要包括三种组件:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-Driven Beans)。会话Bean用于处理客户端请求,通常代表业务逻辑;实体Bean则用于持久化数据,...
揭示高级设计模式和关键的特定于EJB的实现问题,如源代码所示。 还包含二十种高级EJB模式的目录。
【EJB to JMS:理解消息传递与JMS Topic】 在企业级Java应用程序中,有时我们需要在不同组件之间传递信息,而无需它们直接相互依赖。这就是Java消息服务(Java Message Service,简称JMS)发挥作用的地方。JMS允许...
2. **创建初始上下文(Initial Context)**:客户端首先需要创建一个初始上下文,这是所有JNDI操作的起点。 3. **执行查找**:使用初始上下文和EJB的JNDI名称执行lookup方法,获取到EJB的引用。 4. **调用EJB方法**...
- **在Java技术中的角色**:JNDI在EJB、JDBC、JMS等技术中扮演关键角色,比如在EJB中用于查找和绑定EJB组件。 通过JNDI,开发者可以方便地在分布式环境中查找和使用资源,如EJB组件、数据库连接、消息队列等,而...
这个压缩包"基于java的EJB中JNDI的使用源码例子.zip"包含了使用JNDI进行EJB查找的代码示例,下面将详细介绍JNDI在Java EE中的应用以及EJB的相关知识点。 1. JNDI简介: JNDI提供了一种统一的方式来管理和查找资源...
2. **发布EJB3**:当EJB3应用部署到应用服务器时,服务器会自动将其注册到JNDI上下文中,使得它们可以通过JNDI查找服务找到。 3. **查找EJB3**:客户端代码使用Java的`InitialContext`类来初始化JNDI上下文,并通过...
### 实战EJB知识点解析 ...EJB2.0支持与JMS的集成,本节将介绍如何在EJB组件中使用JMS进行消息传递。 通过上述章节的学习,开发者可以全面掌握EJB的基本概念和技术细节,为实际项目开发打下坚实的基础。
2. **JNDI查找**:在Java EE应用中,通过JNDI查找可以获取到EJB的引用。首先,我们需要创建一个NamingContext对象,然后调用其lookup()方法,传入EJB的JNDI名称。这个名称通常由两部分组成:全局上下文名(如"java:...
2. EJB与JNDI的结合 在EJB应用中,客户端通常不直接与EJB组件交互,而是通过EJB的接口。为了获取EJB的接口引用,客户端需要使用JNDI查找机制。EJB容器会在部署时自动为每个EJB组件创建一个唯一的JNDI名称,这个名称...