该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 classHelloWorldBean 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

转载于:https://www.cnblogs.com/yxwkf/p/5042703.html

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

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

        一.为什么使用EJB ? 企业Bean执行在EJB容器中.企业Bean实际上就是一个封装了业务逻辑的Java类,那么我们为什么要使用EJB呢 ? 1.最重要的原因:分布式.简要的说,分布式能够 ...

  2. EJB是什么?EJB的概念分析与理解(copy)

    [说明:转载于http://blog.csdn.net/jojo52013145/article/details/5783677] 1. 我们不禁要问,什么是"服务集群"?什么是& ...

  3. 深入了解EJB (一) EJB在java世界的地位

    对EJB的认识 接触EJB以来有一段时间了,走马观花一样把它所涉及到的东西看了一遍,随着深入了解越来越感觉到ejb的很强大,用了java后觉的java好用.学历SSH觉的比java好用.学了ejb觉的 ...

  4. EJB 3.0中会话Bean,实体Bean,消息驱动Bean的作用和例子

    关键词:EJB 3.0,会话Bean,实体Bean,消息驱动Bean EJB 3.0规范使开发EJB比过去更容易,可能诱惑你考虑开发第一个EJB.如果真是这种情况,那么祝贺你,你已经成功避免了在你以前 ...

  5. 无状态会话的ejb_Java EE状态会话Bean(EJB)示例

    无状态会话的ejb 在本文中,我们将了解如何在简单的Web应用程序中使用状态会话Bean来跟踪客户端会话中的状态. 1.简介 有状态会话Bean通常保存有关特定客户端会话的信息,并在整个会话中保留该信 ...

  6. ejb 示例 2018_Java EE EJB拦截器教程和示例

    ejb 示例 2018 在此示例中,我们将看到如何在EJB中使用拦截器并使用简单的Web应用程序对其进行测试. 1.简介 顾名思义,当您想拦截对EJB方法的调用时,将使用拦截器. 如果为Bean声明一 ...

  7. 关于EJB,为什么用EJB?为什么不用EJB?

    一:什么是EJB 官方说法,EJB就是企业级javaBean,是基于java语言的服务器框架技术,通过EJB我们可以轻松的构建企业级,分布式的构建应用.也就是说EJB提供了一个框架来开发和实施分布式商 ...

  8. “提高一下dotnet程序的效率一”中关于exception的问题

    看了提高一下dotnet程序的效率一中关于exception的部分和相关的评论,我觉得有些知识点可能大家平时没有注意到或没有深入的了解: Exception在没有产生exception的时候,换句话说 ...

  9. 什么样的鼠标对程序员最有用,超级提高开发效率

    目录 学会使用鼠标左边的两个按键,提高开发效率 .今天给大家分享一个鼠标小技巧,先看下图 这两个键非常有用,可能很多人还不知道怎么用他,加上很多公司都配置很普通的鼠标,根本没有这个两个按钮. 那这两个 ...

最新文章

  1. Objective-c在宏里拼接字符串
  2. 临时表 DML 产生redo 问题说明
  3. SAP S/4 Hana On-premise Edition 1511做了哪些简化
  4. 网页全文搜索字符和全局搜索文件名【Edge和谷歌浏览器均适用】
  5. 15件事造就有理想的程序员
  6. CompletableFuture详解~getNow
  7. 在SQL Server中取得操作系统文件的最后修改日期 [Z]
  8. mysql 清空或删除表数据后,控制表自增列值的方法
  9. Eclipse设置Android Logcat输出字体大小
  10. 计算机导航医学应用,计算机导航技术在口腔颌面外科应用中的新发展
  11. 有关vi(vim)的常用命令
  12. PowerDesigner注意事项
  13. mysql的空白值mac,Mac下mysql安装启动遇到的坑,及数据库常用指令
  14. mysql的chakan biao_MySQL_Mysql中文汉字转拼音的实现(每个汉字转换全拼),一、创建拼音对照表 复制代 - phpStudy...
  15. AAC 音频格式详解
  16. 【数据分析实例】 2021年十万条厦门招聘数据分析
  17. 二等水准测量记录数据_二等水准测量外业数据整理(往返测)
  18. spring boot之controller注解与RequestController注解
  19. 信息系统项目管理师必背核心考点(四十九)合同法
  20. 如何在linux centos 环境下运行.exe文件

热门文章

  1. python处理图片隐写分析_Python3简单实现隐写术
  2. 深入理解Flask中的上下文
  3. v-contextmenu的使用(右键菜单)
  4. oracle之trunc(sysdate)
  5. jquery特效(6)—判断复选框是否选中进行答题提示
  6. 宽容与忍耐 忍乃济——这是《尚书》这部中国令世人刮目的奇书告诉我们的真理 保身第一法:谦逊;处事第一法:安详;待人第一法:涵容(宽容);养心第一法:洒脱...
  7. 一步步学习SPD2010--词汇表
  8. MyEclipse2015修改项目部署名称(WebContextRoot)
  9. Android通知点击事件传递参数
  10. MacOS 升级后出现 xcrun: error: invalid active developer path, missing xcrun