EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean

该jboss集成到eclipse

关掉Jboss控制台新闻Ctrl+c,在MyEclipse→Servers→Jboss可配置JBoss。

通过ANT提高EJB应用的开发效率

在HelloWorld 增加ANT,右击项目新建xml:build.xml,右击打开方式选择Ant ..

相应用进行编译、打包、公布、解公布

<?

xml version="1.0" encoding="UTF-8"?

>
<!--basedirz项目所在路径,.代表在build.xml的所在路径-->
<project name="HelloWorld" basedir=".">
	<property name="src.dir" value="${basedir}\src"></property>
	<!--指的是系统变量-->
	<property environment="env"></property>
	<property name="jboss.home" value="${env.JBOSS_HOME}"></property>
	<!--用于指定眼下JBoss使用的配置项-->
	<property name="jboss.server.config" value="default"></property>
	<!--用于编译源文件class类存放的文件夹-->
	<property name="build.dir" value="${basedir}\build"></property>
	<!--ejb依赖的jar文件-->
	<path id="build.classpath">
		<fileset dir="${jboss.home}\client">
			<include name="*.jar"/>
		</fileset>
		<pathelement location="${build.dir}"/>
	</path>

	<target name="prepare">
		<delete dir="${build.dir}"></delete>
		<mkdir dir="${build.dir}"></mkdir>
	</target>

	<target name="compile" depends="prepare" description="编译">
		<!--对源文件进行编译。destdir编译后class存放文件夹-->
		<javac srcdir="${src.dir}" destdir="${build.dir}">
			<!--编译依赖的jar文件-->
			<classpath refid="build.classpath"></classpath>
		</javac>
	</target>

	<target name="EJBjar" depends="compile" description="创建EJB公布包">
		<!--${ant.project.name}就是上面的name HelloWorld-->
		<jar jarfile="${basedir}\${ant.project.name}.jar">
			<fileset dir="${build.dir}" >
				<include name="**/*.class"/>
			</fileset>
		</jar>
	</target>

	<target name="deploy" depends="EJBjar" description="公布EJB">
		<copy file="${basedir}\${ant.project.name}.jar"
			todir="${jboss.home}\server\${jboss.server.config}\deploy"></copy>
	</target>

	<target name="undeploy" description="卸载ejb">
		<delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"></delete>
	</target>
</project>

公布:在servers视图启动Jboss。然后在build.xml的大纲视图右击deploy→run as → Ant ..

(发现编码问题我项目是GBK,把项目改成UTF-8就可以);

卸载EJB,要先停止Jboss在运行undeploy就可以;

开发具有本地接口的无状态bean

之前我们介绍过远程接口。通过一个远程接口调用EJB的过程。首先client须要与EJB建立socket通信。在通信管道上它们须要来回发送IIOP协议信息,由于数据要在网络进行传输,存放数据的Java对象必须要进行序列化。在这个过程。有网络通信的开销、协议解析的开销、对象序列化的开销等。由于EJB是分布式技术。它同意client与EJB应用在不同机器上。所以这些性能开销也是必定的。

可是在实际开发中,client与EJB应用执行在同一个JBoss中。

这时候client訪问EJB是否有必要走上面的网络通信呢?据我们所知,这时候client与EJB是在同一个JVM内,他们之间全然能够通过内存进行交互,这样就能够避免网络通信的性能开销。既然我们都想到了这一点,EJB专家组也想到了这一点,所以引入了本地接口。通过本地接口调用EJB,直接在内存中交互。这样就能避免因网络通信所造成的各种性能开销。可是有一点。大家必须注意,仅仅有client与EJB应用在同一个JVM内执行的时候,我们才干调用本地接口,否则仅仅能调用远程接口。

仅仅要client与EJB公布在同一个JBoss内。我们就觉得他们是在同一个JVM。

client和EJB部署到同机器上面

将HelloWorldBean指定为本地接口(@Remote改动为@Local):

@Stateless

@Local(HelloWorld.class)

public
class
HelloWorldBean implementsHelloWorld {

本地接口的无状态bean已经被开发出来了。

通过Ant的deploy部署到EJB中。

新建一个web Project 做为EJB的client。而且部署到Jboss中,这样client和EJB就在同一个jvm中了。

新建Web Projcet:EJBClient,部署到Jboss。

在用jsp调用EJB。新建test.jsp,将编码格式换成utf-8,这样就能够通过本地接口訪问EJB了(把HelloWorld项目引用进来:右击项目Build Path→Conf…→Projects→add):

<%@
pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@
pageimport="javax.naming.*,cn.hqu.ejb3.*"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPEHTMLPUBLIC
"-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

<head>

<basehref="<%=basePath%>">

<title>My JSP‘test.jsp‘ starting page</title>

<metahttp-equiv="pragma"content="no-cache">

<metahttp-equiv="cache-control"content="no-cache">

<metahttp-equiv="expires"content="0">

<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

<metahttp-equiv="description"content="This
is my page"
>

<!--

<linkrel="stylesheet" type="text/css"href="styles.css">

-->

</head>

<body>

<%

try {

InitialContextctx = new InitialContext();

HelloWorldhelloworld = (HelloWorld) ctx

.lookup("HelloWorldBean/local");

out.println(helloworld.sayHello("本地的苏志达"));

}catch (NamingException e) {

e.printStackTrace();

}

%>

</body>

</html>

client应用开发完了。导出war文件,将war文件复制到Jboss的公布文件夹下,看控制台发现应用公布成功了(能够通过MyEclipse部署项目到Jboss,启动Jboss就可以公布)

http://localhost:8080/EJBClient/test.jsp

通过本地接口调用EJB成功了。web应用和EJB部署到同一个Jboss中的。在同一个jvm中。能够进行訪问。

client和EJB部署到不同机器上面。

新建一个本地接口,在HelloWorld项目新建HelloWorldLocal接口。继承远程接口HelloWorld。

HelloWorldBean实现HelloWorldLocal和HelloWorld接口。

@Stateless

@Remote(HelloWorld.class)

@Local(HelloWorldLocal.class)

public
class
HelloWorldBean implements HelloWorld,HelloWorldLocal {

@Override

public StringsayHello(String name) {

return name+"说:你好!

";

}

}

部署同一个机器上的时候优先调用本地,不同机器上我们仅仅能通过远程接口訪问。

本地调用:部署启动JBoss执行http://localhost:8080/EJBClient/test.jsp

远程调用:

将HelloWorld的EJBClient类改为远程接口:

HelloWorldhelloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

部署公布:执行Ant deploy,启动Jboss执行main方法。

在client通过远程接口调用EJB,如今他们是在不同JVM内的,仅仅能通过远程接口訪问,执行EJBCLient的mian方法。成功訪问到。

在实际应用中我们最好把本地接口和远程借口都实现出来。主要是能够解决能够公布在同一个Jboss或者不同Jboss都能够使用。

开发有状态bean

仅仅须要改动@Stateless为@Stateful就能够标注为有状态bean

@Stateful

@Remote(HelloWorld.class)

@Local(HelloWorldLocal.class)

public
class
HelloWorldBean implementsHelloWorld,HelloWorldLocal {

@Override

public StringsayHello(String name) {

return name+"说:你好。";

}

}

Ant deploy部署

有状态和无状态在代码上需然区别不大。可是採用对bean的管理的技术的不一样的.

Bean实例的两种管理技术

1.无状态bean使用实例池技术管理bean

2.有状态bean使用激活(activation)管理bean

每一个用户都有自己的Bean实例,相当于有多少个用户就有多少个Bean实例为之服务。假设不採取不论什么机制,这样必定会导致server资源严重消耗,最后落个down机罢工。

为了解决问题。EJB引入了激活机系统。该机构的原理来实现,这是,在EJBserver如果有必要,节约资源。从内存中恢复bean示例。将举行它的会话状态序列化到磁盘,他们占用内存释放。如果此时client正确EJB再次发起请求,EJB再次实例化一个容器Bean示例,并从硬盘的状态恢复在先前。

码:http://pan.baidu.com/s/1gdGIi8V

时间: 2024-08-02 22:35:37

EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean的相关文章

EJB通过ANT提高EJB应用的开发效率、开发具有本地接口的无状态bean、开发有状态bean

把jboss集成进eclipse 关闭Jboss控制台按Ctrl+c,在MyEclipse→Servers→Jboss里面可以配置JBoss. 通过ANT提高EJB应用的开发效率 在HelloWorld 加入ANT,右击项目新建xml:build.xml,右击打开方式选择Ant .. 对应用进行编译.打包.发布.解发布 <?xml version="1.0" encoding="UTF-8"?> <!--basedirz项目所在路径,.代表在bui

Java之旅EJB(3)——Ant提高ejb开发效率

前面已经讲过了并且已经演示过了,我们部署一个程序的过程是很繁琐的,不仅仅要手动拷贝生成的jar包,还有将在之前进行jar的生成,好麻烦啊,那么接下来就介绍一个新的小伙伴来帮你一把吧. Myeclipse或者说是eclipse是集成了ant工具的, 1.      简介 关于Ant的简介,这是网上的资料,Ant是一种基于Java的build工具.理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷.目前的最新版本为:Ant1.9.4[1]  . 既然我们已经有了make,gn

5、通过ANT提高EJB开发效率

用ANT工具项目的打包发布 1.build.xml的写法 <?xml version="1.0" encoding="UTF-8" ?><project name="HelloWorld" default="run" basedir="."> <property name="src.dir" value="${basedir}\src"/

JBoss+Ant实现EJB无状态会话bean实例

EJB分为session bean.entity bean.message-driven bean,session bean又分为无状态会话bean和有状态会话bean. session bean负责与客户端交互,是编写业务逻辑的地方,在session bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过entity bean来完成对数据库的操作的. 平常,我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高.正因为一个bean实例被多

深入了解EJB (三)EJB是什么以及规范之间的内在联系

J2EE是一个很大的概念它主要包括了十三个技术规范,除了这十三个外还有一些其他一些规范但不太重要不需要关注,每个规范如果深入研究的话都包括了很多内容,这里不是逐一分析每一个规范的含义,只是谈谈J2EE规范里面几个规范的作用和对企业级开发的一点点理解,如有不恰当支持请指正. 十三个规范的核心是EJB(enterprise java bean),因此有必要重点分析一下ejb规范,以前ejb还没有向今天这么辉煌时,ejb1.0问世的时候里面仅仅有ejb.rmi等几个简单规范,也仅仅解决了当时分布式应用

EJB学习(四)——Enterprise Bean(企业Bean)和Entity Bean(实体Bean)

    一.为什么使用EJB ? 企业Bean运行在EJB容器中,企业Bean实际上就是一个封装了业务逻辑的Java类,那么我们为什么要使用EJB呢 ? 1.最重要的原因:分布式.简要的说,分布式可以将分布在各处的资源综合利用,但是对于用户来说展现的是一个统一的整体:分布式可以动态分配任务,分散物理的和逻辑的资源,从而提高执行效率:分布式技术可以避免由于单个节点失效而使整个系统崩溃的危险. 2.分布式对象之间的事务支持,RMI(Remote Method Invocation,远程方法调用)不支

【进阶EJB】深入探讨三种Bean(三)——MessageDriven Bean

通过前两篇文文章 [进阶EJB]深入探讨三种Bean(一)--Session Bean [进阶EJB]深入探讨三种Bean(二)--Entity Bean 已经介绍了前两种Bean,今天我们继续介绍第三种Bean--MessageDriven Bean. 要说MessageDriven Bean前就先要介绍一下JMS(Java Message Service),JMS是Java消息服务,它是一个与具体平台无关的API(Application Program Interface 应用程序接口),是

【进阶EJB】深入探讨三种Bean(二)——Entity Bean

通过上一篇文章,我们介绍了[进阶EJB]深入探讨三种Bean(一)--Session Bean,这篇文章继续介绍EJB的三种Bean,今天我们重点介绍一下Entity Bean. Entity Bean,通过名字我们就知道是实体Bean是存放数据的.Entity Bean是持久化的数据组件,代表持久存储的商业实体对象.通常情况下,每个Entity Bean对应于关系数据库中的单张表,Entity Bean的单个实例对应于表中的某一条数据.上篇文章中说的Session Bean可作为Entity

Java之旅EJB(2)——三种bean之会话bean

前面我们大致讲过ejb是什么,这里不再对定义进行讲解,主要是讲解内部的组成. 1.      Bean分类 会话bean(session bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作. 实体bean(Entity bean) 它实际上属于java持久化规范(简称JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在hibernate.toplink等框