下面开始我的EJB之旅

学习任何一门技巧之前,都定然容易的打听一下该技巧的用处的优缺点。因而率先我们来看一下摘自百度百科上面对EJB的定义和解释

==========================================================================

EJB是sun的服务器端组件模型,最大的用处是安排散布式利用过程当然,还有众多措施能够告终散布式利用,相仿微软的.net技巧。依靠java跨平台的优势,用EJB技巧安排的散布式系统能够不限于特定的平台。EJB (Enterprise JavaBean)是J2EE的一局部,定义了一个用于开发基于组件的企业多重利用过程的规范。其个性包括网络服务扶持和中心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的中心代码,离别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。

一个技巧规范:EJB 从技巧上而言不是一种"产品" ,EJB 是一种规范描写了发生利用组件要处理的:

可伸展 (Scalable)

散布式 (Distributed)

事务处理 (Transactional)

数据存储 (Persistent)

平安性 (Secure)

===========================================================================

里面说得许多wh.whflsc.com,其实我会意和关怀的却并不多。率先EJB是一个服务器端的组件模型,能够安排散布式利用过程。我重要比拟关怀安排散布式利用过程。说实话,什么是散布式利用过程,我也是似懂非懂的,因而渴望穿越学习EJB更深入的打听一下。然后即便关怀EJB要处理的问题了:可伸展、散布式、事务处理、数据存储和平安性。我可信,学习完后能够把这几个局部搞懂就差不多了

说起散布式组件,我可信大家会想到微软的DCOM技巧,它们的差异在哪呢?跨平台问题?其他?不懂!

长途调用,和webservice有什么差异呢?摸索中

还有一点,可信许多人和我有共同的疑问。都说EJB是重量级的混杂的,然后又有许多声音说spring将会轮换它(当然我们这里学习的EJB3.0以上版本的,对于老版本我们这里就不关怀了),我不懂得这是怎么回事。

带着这么多疑问,我们开始EJB吧

隔了这么久,总认留难以下手。哈哈,其实也不是那么混杂。下?**颐蔷涂才乓桓鑫奘绿墓└镜亟涌诤统ね窘涌诘腟ession Bean吧。

率先开发服务端,服务端定然依靠Ejb的API,率先定义本地接口ILocalCalculator.java

package stateless.ejb;public inte***ce ILocalCalculator {double add(double x,double y);double minus(double x,double y);double mutilply(double x,double y);double devide(double x,double y);}

长途拜会接口,IRemoteCalculator.java,继承自本地接口

package stateless.ejb;public inte***ce IRemoteCalculator extends ILocalCalculator {double power(double x,int n);}告终一个无事态的Session Bean,CalculatorBean.java

package stateless.ejb;import javax.ejb.Local;import javax.ejb.Remote;import javax.ejb.Stateless;@Stateless@Remote({IRemoteCalculator.class})@Local({ILocalCalculator.class})public class CalculatorBean implements IRemoteCalculator {@Overridepublic double add(double x, double y) {return x+y;}@Overridepublic double devide(double x, double y) {if(y==0){return 0;}return x/y;}@Overridepublic double minus(double x, double y) {return x-y;}@Overridepublic double mutilply(double x, double y) {return x*y;}@Overridepublic double power(double x,int n) {double result=1;for(int i=1;i<=n;i++){result*=x;}return result;}}

接下来时安排,打包这以上三个文件EjbService.jar,放到JBOSS_HOME\server\default\deploy目录下,然后打包一份接口供客户端利用,包括两个接口文件,EjbServiceInte***ce.jar.

接下来即便客户端调用了,开发EjbBean.java

package bean;import java.util.Properties;import javax.naming.InitialContext;import javax.naming.NamingException;import stateless.ejb.ILocalCalculator;import stateless.ejb.IRemoteCalculator;public class EjbBean {/** * 穿越调用ejb服务计算收获 * @param x * @param y * @param operator * @param type 1-local,2-remote * @return */public double Calc(double x,double y,String operator,int type){Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "org.jnp.inte***ces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); InitialContext ctx =null;try {ctx = new InitialContext(props);if(type==1) {ILocalCalculator calculator=(ILocalCalculator)ctx.lookup("CalculatorBean/local");if(operator.equals("+")){return calculator.add(x, y);}else if(operator.equals("-")){return calculator.minus(x, y);}else if(operator.equals("*")){return calculator.mutilply(x, y);}else if(operator.equals("/")){return calculator.devide(x, y);} } else if(type==2) { IRemoteCalculator calculator=(IRemoteCalculator)ctx.lookup("CalculatorBean/remote"); if(operator.equals("+")){return calculator.add(x, y);}else if(operator.equals("-")){return calculator.minus(x, y);}else if(operator.equals("*")){return calculator.mutilply(x, y);}else if(operator.equals("/")){return calculator.devide(x, y);}else if(operator.equals("power")){return calculator.power(x, (int)y);} }} catch (NamingException e) {e.printStackTrace();}return 0.0001;}}

这里定然增加EjbServiceInte***ce.jar依靠emi7.com,

然后即便开发service,EjbService.java

package service;import java.io.IOException;import java.io.PrintWriter;import java.util.Vector;import javax.mail.MessagingException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import bean.EjbBean;import bean.EmailBean;import entity.Email;public class EjbService {private HttpServletRequest req;private HttpServletResponse res;public HttpServletRequest getReq() {return req;}public void setReq(HttpServletRequest req) {this.req = req;}public HttpServletResponse getRes() {return res;}public void setRes(HttpServletResponse res) {this.res = res;}public EjbService(){}public EjbService(HttpServletRequest req,HttpServletResponse res){this.req=req;this.res=res;}public void calc(double x,double y,String operator,int type){EjbBean bean=new EjbBean();double result = bean.Calc(x, y, operator, type);try {PrintWriter out =this.res.getWriter();out.print(result);} catch (IOException e) {e.printStackTrace();}}}

然后即便哀求处理,EjbServlet.java

package servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import service.EjbService;import service.EmailService;public class EjbServlet extends HttpServlet {private EjbService service;/** * Constructor of the object. */public EjbServlet() {super();}/** * Destruction of the servlet.
*/public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/** * The doGet method of the servlet.
* * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");service=new EjbService(request,response);String action="";action=request.getParameter("action");if(action==null || action.equals("")){return;}//凑近处理哀求种类if(action.toUpperCase().equals("CALCRESULT")){double x=Double.parseDouble(request.getParameter("x_value"));double y=Double.parseDouble(request.getParameter("y_value"));String operator=request.getParameter("operator");String method=request.getParameter("method");int type=1;if(method.equals("remote")){type=2;}service.calc(x, y, operator, type);}}/** * The doPost method of the servlet.
* * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}/** * Initialization of the servlet.
* * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code here}}

最后即便出现层的in.intkb.com入口

EJB客户端

+-*/power

ajax哀求

function calc(){var x=$("#x").val();var y=$("#y").val();//定然引入扶持select标签的jquery伸展 jquery.select.jsvar oper=$("#operator").getSelectedValue();var type="local";if(oper=="power"){type="remote";}$.get("EjbServlet",{action:"CALCRESULT",x_value:x,y_value:y,operator:oper,method:type},function(data){$("#calc_result").val(data);});}

好,到这里就开发好了。启用jboss服务器,输入数据测验穿越。

归纳:

1、在开发中遭到一个问题,报错消息为msg:javax.naming.NameAlreadyBoundException: remote

精细琢磨了一下,发目前导出jar文件给客户端利用时,不能包括告终进去,只能包括供给的接口。在切实开发安排中也正是这么,提供给客户端利用确乎定只有接口,否则EJB就错过了它的含义。而且依据这个讹谬提醒,该当是服务器和客户端在统一台电脑上安排厉行才会揭示这个讹谬。猜想是这么的,不懂得是否准确

2、这里开发的无事态的Session Bean。那有事态的Session Bean和这个有什么差异呢。

其实有事态的即便会记拨取户的事态。举个例子。例如警?**穸薊JB中有一个成员变量total,告终的功能是每次登陆时加1垄断,无事态的即便每个用户登陆顺次都会对这个数据举行加1,而有事态的是会离别登记每个用户登陆的次数,而不是所有用户的总登陆次数,现有会意的它们的差异就在这里。其它的待挖掘。万一你有什么更好的会意,请不吝赐教。一个java版本的“Helloworld”过程就很OO。但把过程写得极其有“面向对象”的风格,

java ejb开发_Java实践之路——EJB(一)相关推荐

  1. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

  2. 谈一个普通211计算机研究生学渣的Java后端开发的面试之路

    谈一个普通211计算机研究生学渣的Java后端开发的面试之路 为什么写这篇博客? 2020年是特殊的一年,新冠肺炎肆虐全球,疫情造成的影响远比人们想象的严重,所产生的蝴蝶效应让很多不可能变成可能,奥运 ...

  3. java jni开发_Java JNI开发实践记录

    当使用到JNI的时候,基本可以肯定Java的平台移植性注定减弱,接下来记录一次使用Java JNI开发的经历. 关于Java JNI的相关资料参见: 下面是使用JNI常见三种场景: 1.在Java应用 ...

  4. java自动化开发_Java自动化开发指南

    一.背景 在Java web开发中,虽然Spring boot已经帮助我们简化了很多工作,但项目中庞杂的业务仍然需要自己去编写较多的 entity,vo,Mapper,Service, Control ...

  5. java api 开发_Java开发人员应该知道的前20个库和API

    java api 开发 优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库. 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edit ...

  6. php前端java后端开发_java是前端还是后端

    java是前端还是后端 对于java来讲那个以后发展的会更好 java是前端还是后端这个问题问的其实并没有什么技术含量,但是出于还有很多的朋友对于java还不是很熟悉,对于在作java后端还要懂前端的 ...

  7. java开发cs项目_本硕机械转行cs(java后端开发)上岸之路

    秋招转眼就结束了,将近一年的努力,总算给了自己一个比较满意的结果.写下这篇贴子记录自己的转行以及秋招经历. 其实在转行初期,就无数次幻想着秋招结束,然后写一篇长长的经验贴的那种满足感.下面我尽量把我知 ...

  8. java 注解开发_Java中的注解到底是如何工作的?

    作者:人晓 www.importnew.com/10294.html 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Over ...

  9. java 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建

    历史演变: 以前我们都是一个war包,包含了很多很多的代码,反正我开始工作的时候做的就是这样的项目,一个金融系统,代码具体多少行记不清楚了,内部功能超多,但是实际能用到的不多,代码冗余超大,每次部署大 ...

  10. c java 系统开发_java开发系统内核:使用C语言开发系统应用程序

    更详细的讲解和代码调试演示过程,请参看视频 用java开发C语言编译器 如果你对机器学习感兴趣,请参看一下链接: 机器学习:神经网络导论 我们的操作系统通过增添内核接口导出机制后,已经可以作为平台,运 ...

最新文章

  1. Windows Phone 7编程学习点滴一——页面切换、返回键重载和工具栏
  2. EF lamda表达式模糊查询关键字字符串数组
  3. load和initialize
  4. EF创建上下文对象HttpContext和CallContext
  5. qpython3编辑器怎么用_Python快速入门系列:Pyqt5界面开发好帮手-Qss样式编辑器介绍...
  6. python 列表 mysql in_关于mysql:内嵌要在python MySQLDB IN子句中使用的列表
  7. 2017-08-14 前端日报
  8. asp.net 2.0 防止密码框被清空的解决方案
  9. win 7 ×××自动拨号设置
  10. 算法与数据结构1800题 之字符串(一)
  11. 机器学习(二)——贝叶斯算法
  12. 如何使android应用开机时自动启动,如何使APP开机自启动
  13. httpd安装、配置、编译三种访问模式控制https证书的安装访问实例及排错
  14. 计算机二级主要是学什么,计算机二级考试内容是什么
  15. cvte java_cvte一面——java开发工程师
  16. 大写字母转小写(及scanf中的间隔符号的影响)
  17. 3DM:phase wrapping
  18. 2023年“科学探索奖”申报启动及指南
  19. 编译chrome for android,Chrome for Android 编译了两天终于在师傅指导下搞定
  20. python区间分布统计_常见概率统计分布及Python实现

热门文章

  1. 解决前端跨域的八种方案
  2. python写电影推荐系统_Netflix电影推荐系统Python实现(协同过滤+矩阵分解)
  3. chrome插件-Web开发者助手 FeHelper
  4. python航空订票系统_航空订票系统
  5. Matlab画直线、圆、球
  6. Keil5的安装破解,包含MDK-ARM和C51
  7. 计算机网络投标书质量保证措施,计算机网络标书模板.doc
  8. scrapy 爬虫之爬取CSDN博客(一)
  9. SQL注入漏洞-SQL盲注
  10. 国家社科基金项目清单、申报书填写指南和课题申报书模板