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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

该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/csshref=”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://javaforall.net/116682.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android之ViewPager的简单使用[通俗易懂]

    Android之ViewPager的简单使用[通俗易懂]AndroidViewPager的简单使用Android3.0后引入的一个UI控件——ViewPager(视图滑动切换工具)功能:通过手势滑动可以完成View的切换,一般是用来做APP的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4兼容包ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager设置切换时

    2022年7月22日
    8
  • cmd命令ping不是内部或外部命令_ping命令次数

    cmd命令ping不是内部或外部命令_ping命令次数介绍ping命令是一个用来测试能不能与另一台主机交换数据包的命令,通常我们会用ping命令测试域名可达性。1.语法:ping+ip(v4)或者域名实例一:通过ping百度域名,以此来看网络是否正常连接@echooffpingwww.baidu.com>nuliferrorlevel0(echo网络连接正常)elseecho网络连接异常pauseexit2.参数,可调出cmd窗口输入ping/?列出具体的参数介绍几个常用的参数:1.ping/t一直ping一

    2022年9月22日
    5
  • Windows10 系统下cuda安装教程,小白教程 !很详细!!「建议收藏」

    Windows10 系统下cuda安装教程,小白教程 !很详细!!「建议收藏」Windows10系统下cuda安装教程1.查看适合自己电脑的cuda版本1.点击Windows+R输入nvidia-smi看一下自己电脑支持的conda版本是:根据下图白框标出的地方可以看出我的conda版本是10.02.下载cuda地址:https://developer.nvidia.com/zh-cn/cuda-toolkit下载好了以后,根据下列图示依次进行安装2.1点击下载好的文件。2.2点击运行2.3选择文件存储位置,然后点击ok2.4等待安装完成

    2022年5月29日
    92
  • 2011年全国电子设计大赛综合测试题_全国大学生英语竞赛 C类

    2011年全国电子设计大赛综合测试题_全国大学生英语竞赛 C类系统方案总体设计方案本系统主要由电位器模块、直流减速电机模块、电源模块、电机驱动模块、单片机最小系统班组成。电位器与主控芯片STM32F407ZGT6相连,通过电位的测算实时向MCU发送摆杆的状态,MCU通过控制LM298N电机驱动模块来控制直流减速电机,进而控制摆杆的状态,并使用LCD显示相关参数。方案的比较与选择2.1传感器的选择方案一:采用三轴陀螺仪测量摆杆的偏转角度。当选用三轴陀螺仪检测摆杆的偏转角度时,虽然可以计算摆杆的偏转角度,但是传感器必须要固定在摆杆上,同时需与M…

    2022年8月18日
    7
  • 腾讯课堂金牌机构靠谱吗_讲护肤品课怎样讲

    腾讯课堂金牌机构靠谱吗_讲护肤品课怎样讲雷军的风口飞猪论,伴随着小米的现象级成功,已经深入创业者之心。以至于,不少创业者都在极力说明,他已站在风口,风马上来。其实,对于正在设计、打磨、运营初创产品的团队,“风口…

    2025年11月5日
    3
  • 初次使用Rubymine

    初次使用Rubymine在 Windows 上配置 Redmine 环境后 上一篇有介绍 准备阅读源码 用单纯的文本编辑器阅读代码实在太低下了 非常需要一个类似 VisualStudio 或 SourceInsigh 等高效的代码分析工具 调查了一番 最后决定使用 Rubymine 使用 Rubymine 遇到了一些问题 如何把现有 Rails 项目导入到 Rubymine 中 尝试用 Rubymine 6 3 版本 新建

    2025年10月31日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号