java ejb开发_Java实践之路——EJB(一)
下面开始我的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入口
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(一)相关推荐
- 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目
课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...
- 谈一个普通211计算机研究生学渣的Java后端开发的面试之路
谈一个普通211计算机研究生学渣的Java后端开发的面试之路 为什么写这篇博客? 2020年是特殊的一年,新冠肺炎肆虐全球,疫情造成的影响远比人们想象的严重,所产生的蝴蝶效应让很多不可能变成可能,奥运 ...
- java jni开发_Java JNI开发实践记录
当使用到JNI的时候,基本可以肯定Java的平台移植性注定减弱,接下来记录一次使用Java JNI开发的经历. 关于Java JNI的相关资料参见: 下面是使用JNI常见三种场景: 1.在Java应用 ...
- java自动化开发_Java自动化开发指南
一.背景 在Java web开发中,虽然Spring boot已经帮助我们简化了很多工作,但项目中庞杂的业务仍然需要自己去编写较多的 entity,vo,Mapper,Service, Control ...
- java api 开发_Java开发人员应该知道的前20个库和API
java api 开发 优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库. 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edit ...
- php前端java后端开发_java是前端还是后端
java是前端还是后端 对于java来讲那个以后发展的会更好 java是前端还是后端这个问题问的其实并没有什么技术含量,但是出于还有很多的朋友对于java还不是很熟悉,对于在作java后端还要懂前端的 ...
- java开发cs项目_本硕机械转行cs(java后端开发)上岸之路
秋招转眼就结束了,将近一年的努力,总算给了自己一个比较满意的结果.写下这篇贴子记录自己的转行以及秋招经历. 其实在转行初期,就无数次幻想着秋招结束,然后写一篇长长的经验贴的那种满足感.下面我尽量把我知 ...
- java 注解开发_Java中的注解到底是如何工作的?
作者:人晓 www.importnew.com/10294.html 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Over ...
- java 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建
历史演变: 以前我们都是一个war包,包含了很多很多的代码,反正我开始工作的时候做的就是这样的项目,一个金融系统,代码具体多少行记不清楚了,内部功能超多,但是实际能用到的不多,代码冗余超大,每次部署大 ...
- c java 系统开发_java开发系统内核:使用C语言开发系统应用程序
更详细的讲解和代码调试演示过程,请参看视频 用java开发C语言编译器 如果你对机器学习感兴趣,请参看一下链接: 机器学习:神经网络导论 我们的操作系统通过增添内核接口导出机制后,已经可以作为平台,运 ...
最新文章
- Windows Phone 7编程学习点滴一——页面切换、返回键重载和工具栏
- EF lamda表达式模糊查询关键字字符串数组
- load和initialize
- EF创建上下文对象HttpContext和CallContext
- qpython3编辑器怎么用_Python快速入门系列:Pyqt5界面开发好帮手-Qss样式编辑器介绍...
- python 列表 mysql in_关于mysql:内嵌要在python MySQLDB IN子句中使用的列表
- 2017-08-14 前端日报
- asp.net 2.0 防止密码框被清空的解决方案
- win 7 ×××自动拨号设置
- 算法与数据结构1800题 之字符串(一)
- 机器学习(二)——贝叶斯算法
- 如何使android应用开机时自动启动,如何使APP开机自启动
- httpd安装、配置、编译三种访问模式控制https证书的安装访问实例及排错
- 计算机二级主要是学什么,计算机二级考试内容是什么
- cvte java_cvte一面——java开发工程师
- 大写字母转小写(及scanf中的间隔符号的影响)
- 3DM:phase wrapping
- 2023年“科学探索奖”申报启动及指南
- 编译chrome for android,Chrome for Android 编译了两天终于在师傅指导下搞定
- python区间分布统计_常见概率统计分布及Python实现