百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

java程序员的业务场景基础知识,JBPM,ANT,FreeMarker

yuyutoo 2024-10-12 00:27 1 浏览 0 评论

本文是上一篇文章的后续文,具体请回顾上文

八、JPBM业务场景

首先进行请假的流程定义,我们流程的定义是(员工提交请假单---》经理审批---》总监审批---》总经理审批---》结束),通过repositoryService将其发布部署到jbpm4_lob表中,

之后获取流程定义列表,选中请假的流程定义,员工开始进行请假单的填写,保存并通过executionService开启流程实例,然后用taskService获取经理的待办任务列表,选中待办任务,进行审批,通过调用taskService.completeTask()进入到总监审批环节,然后用总监进行登录,同样获取待办任务列表,然后调用taskService.completeTask()进入总经理审批环节,总经理审批之后,结束流程。在这个过程中我们还可以根据historyService查看当前登录人已办的任务列表。

九、Ant描述

Ant是apache旗下的对项目进行自动打包、编译、部署的构建工具,他主要具有 轻量级并且跨平台的特性,而且基于jvm,默认文件名为build.xml

Ant主要的标签:

Project 根标签,

target 任务标签,

property 属性标签,自定义键/值 供多次使用,

java 执行编译后的java文件

javac 编译java文件

war 打成war包

其它标签:copy,delete,mkdir,move,echo等。

十、FreeMarker描述

FreeMarker是一个用Java语言编写的模板引擎,它是基于模板来生成文本输出的通用工具。Freemarker可以生成HTML, XML,JSP或Java等多种文本输出。

工作原理:定义模板文件,嵌入数据源,通过模板显示准备的数据

(数据 + 模板 = 输出)

  我们在使用模板中发现freemarker具有许多优点,它彻底的分离表现层和业务逻辑,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,所以使得开发过程中的人员分工更加明确,作为界面开发人员,只需专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。

如果使用jsp来展示,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换,浪费了大量时间,FreeMarker模板技术不存在编译和转换的问题,在开发过程中,我们在不必在等待界面设计开发人员完成页面原型后再来开发程序。由此使用freemarker还可以大大提高开发效率。

十一、webService描述

(主动说)

webservice是SOA(面向服务编程)的一种实现,

主要是用来实现异构平台通信也就

是不同平台不同项目之间的数据传输,从而避免了信息孤岛的问题,

它之所以能够

进行异构平台通信是因为它是完全基于xml的,

所以说,webService是跨平台,

跨语言,跨框架的,在java中通常有三种技术框架分别是xfire,cxf,axis2。

我们为了保证

webservice的安全性,采用了基于

WS-Security标准的安全验证(使用回调函数)。

(没必要主动说)

webservice的三要素分别是:

wsdl(webservice description language)

用来描述发布的接口(服务)

soap(simple object access protocol)

是xml和http的结合,是webservice数据通信的协议

uddi 用来管理,查询webService的服务

(没必要主动说)

webservice的具体三种实现方式(框架)或者三种实现框架的区别

1. Axis2:可以用多种语言开发,

是一个重量级框架,功能非常强大,

但是它的性能比较低。

2. Xfire:它相比Axis2来说是一个轻量级框架,

它的性能要比Axis2高。

3. cxf:是Xfire的升级版,就好比是,

struts2是webwork的升级,

然后cxf和spring集成起来非常方便,简易,

性能方面也要比Xfire高。

【注】jdk6 自带的webservice jws

(主动说)

业务场景

我在以前做项目的时候,其中遇到一个功能,

需要进行两个项目之间的数据的传输,

项目经理让我去完成这个任务,我根据以往的项目经验,

想到两种解决方案,第一种

就是开放另外一个项目的数据库的权限给我,

然后我直接通过访问另外一个项目的数据

库,来得到需要的信息,但后来我分析了下,觉的这种方式不安全,

而且因为当时

这个项目是另外一家公司负责在做,所以数据库里面的表结构,

以及以后牵涉

到的责任问题都很多,所以我就采用了第二种方案,

即通过webservices的方式,进行

异构系统之间数据信息的传递,webservices的具体实现,

有xfire,cxf,axis2,

我根据以往的项目经验,了解到cxf是xfire的升级版本,适用于java语言,

xfire/cxf 性能比axis2要高,并且和spring整合起来也比较方便,

而axis2支持更多的语言,

性能相对于cxf要低,通过上面分析,

结合我们目前的两个项目都是基于java

语言的,所以我采用cxf这种方式实现了两个项目之间数据的传递,

我们为了保证

webservice的安全性我们采用了基于

WS-Security标准的安全验证(使用CXF回调函数)。

(没必要主动说)

webservice服务端配置流程

首先在web.xml中引入cxfServlet核心类,

指定对以/cxf开头的url路径提供webservice服务,

之后我们在要发布成webservice接口上添加@Webservice 注解,

而且还要在实现类上添加同样的webservice注解并且要说明实现了哪个接口,

之后在spring-webservice.xml中发布webservice服务,

通过jaxws:endpoint这个标签,

并且在标签配置implementor和address来表明实现服务的类,

以及发布的地址,

最后在浏览器中输入相关的webservice地址?wsdl来验证服务是否发布成功。

(没必要主动说)

webservice客户端的配置

首先通过wsdl2java根据发布的webservice服务端地址的wsdl

生成客户端调用的中间桥梁java类,

将生成的java类拷贝到客户端项目中,

配置spring-client.xml文件,

通过jaxws:client定义一个bean,

并通过address属性指明要访问的webservice的服务地址,

通过serviceClass指明充当中间桥梁的服务类,之后获取该bean,

就可以通过它来访问发布的webservice接口中的方法。

十八、oracle索引概述

索引呢 是与表相关的一个可选结构,可以提高sql语句的检索效率,相当于我们的字典目录 ,可以快速进行定位 ,所以可以减少磁盘I/O, 但是因为索引在物理与逻辑上都是独立于表的数据 它会占用一定的物理空间(额外磁盘空间) 所以并不是索引越多越好,而我们应该根据业务需求去创建索引,而且进行增删改操作时 oracle又要自动维护索引 所以在一定程度上也降低了维护速度,而且我们在创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加,我们一般创建索引呢 是这样创建的 create index 索引名 on 表名(字段),索引又分为普通索引 唯一索引(unique) 单个索引 复合索引(又叫组合索引,在索引建立语句中同时可包含多个字段名),顺序索引,散列索引,位图索引。

十九、oracle存储过程

存储过程就是封装一些sql的集合,也就是一条条的sql语句,过程的优点就是简化了sql命令加上它是预编译的,所以它的执行效率和性能较高,再者,如果不调用过程的话就要和数据库发生多次交互,调用过程只需传一个命令所有的那些执行逻辑都在数据库端执行,所以说它降低了网络的通信量,其次,存储过程大大提高了安全性,这就是优点

缺点呢,就是不同的数据库对过程支持的关键字支持的关键字都是不一样的,所以它的移植性是非常差的,再者,它的维护性难度也比较大,因为它没有专业的调试和维护工具,所以说它维护起来比较麻烦,这就是存储过程的基本概述.

二十、Junit 业务场景

在我们开发项目的时候为了提高代码的性能和保证逻辑正确性,在我们编写代码后往往都要进行单元测试,来验证代码,当时我们公司开发人员全部使用的main方法来进行验证,但是使用mian的最大缺点就是不能将多个类同时进行验证,验证的结果不直观,测试复杂(每个类都要写main方法,单个运行),一定程度上浪费时间,所有我和项目经理提议使用专业测试工具Junit来进行测试,因为Junit是一个Java语言的单元测试框架 ,测试简单,不仅可以提供工作效率和代码的质量,也提高团队的合作能力,我提议后我们进行了Junit的培训使用Junit4加注解的方式来测试。

二十一、Apache+Tomcat 实现负载均衡及seesion复制

当我们tomcat访问量大,线程连接数不够时,我们考虑到了tomcat的负载均衡来分担过多的访问.性能方面负载均衡也能利用多台tomcat来增大内存量,

流程,准备工作apache,Jk_mod,tomcat,在apache的conf/httpd.conf文件中 使用include 标签引入我们自定义的一个mood_jl.conf,在modules中引入下载的k_mod-apache-X.X.XX.so文件,在其中引入我们的.so,及work.properties文件,及指定负载分配控制器controller,在work.properties文件中worker.list=controller,tomcat1,tomcat2指定service,worker.tomcat1.port Ajp端口号,type 是ajp,host为指定ip,lbfactor 指定分配权重值越大分担请求越多,worker.controller.type=lbworker.controller.balanced_workers=tomcat1,tomcat2 指定分担请求的tomcat Session的复制在tomcat中service.xml中Engine标签加入 jvmRoute 值为work,properties中指定的tomcat名称,然后打开<Cluster标签的注释,最后在应用中程序的web.xml文件中增加<distributable/>。

我们在做这个项目时,我们考虑到服务器性能的问题,我们最开始想到使用纵向扩展,来增加硬件的配置提高其性能,但这样做比较耗费资金,而且服务器内存空间也是有限的;所以后来就想到使用横向扩展来达到这一目的

当时我们的apache是通过jk借助于ajp协议与tomcat进行通信的,在我们不进行负载均衡之前,那所有的请求都由一台tomcat进行处理,这样会使我们的tomcat所承受的压力增大,而我们进行负载均衡之后,同样数量的请求经过apache和jk将其分发到多台tomcat进行处理,从而降低每台tomcat所承受的压力,而且当其中一台机器宕机时,其他机器还可以继续提供服务,保证服务不间断。

在这个过程中,我们遇到了session问题,然后我此昂到用session复制来解决这个问题;

在apache的配置文件中增加session粘带特性:

worker.lb.sticky_session=1

worker.lb.sticky_session_force=0

Tomcat的配置

修改server.xml文件:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

增加jvmRoute=”tomcat2” *. jvmRoute赋的值为worker.properties中配置的相应的server名一致

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 将此配置的注释去掉

修改应用的web.xml文件

在应用中的web.xml文件中增加<distributable/>。

如果这样做,当第一次访问的时候,会把所以数据全部缓存到第一台服务器上,通过web配置文件,会把第一台缓存的数据全部复制到第二胎服务器上,这样做就加大网路通信量,导致阻塞,所以我们就想到了可以通过memcached分布式缓存来存取session从而解决上述问题。

二十二、Ant业务场景

Ant是基于java语言编写的,因此具有跨平台的特性,此外还具有简洁方便,灵活

配置的特性,因此我就在XX项目中使用ant进行项目的编译,打包,部署操作。使用ant

之后,如果我们在客户那里修改代码后,就可以直接使用ant进行编译,打包,部署,而不需要为了编译,打包,部署专门在客户那里安装eclipse.此外使用ant也可以直接和svn进行交互,下载源码的同时进行编译,打包,部署。

二十三、maven业务场景

maven业务场景

前段时间在研究maven,知道maven是一个项目管理工具,其核心特点就是通过

maven可以进行包的依赖管理,保证jar包版本的一致性,以及可以使多个项目共享

jar包,从而能够在开发大型j2ee应用的时候,减小项目的大小,并且和ant

比起来,maven根据“约定优于配置”的特性,可以对其项目的编译打包部署进行了

更为抽象的封装,使得自己不需要像ant那样进行详细配置文件的编写,直接使用

系统预定好的mvn clean,compile,test,package等命令进行项目的操作。于是我就

在XX项目中采用了maven,为了保证团队中的成员能够节省下载jar包所需要的时间,

于是我就采用nexus搭建了在局域网内的maven私服,然后通过配置settings.xml中

建立mirror镜像,将所有下载jar包的请求都转发到maven私服上,之后通过在pom.xml

即(project object model)中配置项目所依赖的jar包,从而达到在构建项目的时候,

先从本地仓库中查找,如果不存在从内部私服查找,如果不存在最后再从外网central

服务器查找的机制,达到了节省下载带宽,提高开发效率,以及jar包重用的目的。

ant业务场景

ant是基于java语言编写的,因此具有跨平台的特性,此外还具有简洁方便,灵活

配置的特性,因此我就在XX项目中使用ant进行项目的编译,打包,部署操作。使用ant

之后,如果我们在客户那里修改代码后,就可以直接使用ant进行编译,打包,部署,

而不需要为了编译,打包,部署专门在客户那里安装eclipse.此外使用ant也可以

直接和svn进行交互,下载源码的同时进行编译,打包,部署。

maven的常用命令

mvn eclipse:clean eclipse:eclipse -Dwtpversion=2.0

mvn clean package

maven的生命周期是独立的,但是生命周期下的阶段是相互关联并且延续的。

maven的生命周期

clean(清理):clean;default(默认):compile,test,packageinstall;site(站点)

二十四、Servlet的概述:

Servlet是一个web容器,我们通常用的servlet是httpservlet,而httpservlet又是继承于genericservlet,而genericservlet又实现了servlet接口

servlet的生命周期是 :先进行实例化,然后是初始化,然后是提高服务,然后销毁,最后不可用,在这五个生命周期,其中,初始化是调用的init方法,这个方法只有一个,而提高服务的时候调用的是service方法,而我们具体在我们所写的这个方法中,因为我们继承了httpservlet,其实就是对应了doGet(),doPost(),这种方法,然后据我了解,servlet是单例的。非线程安全的,我们通常有一下几种方案来解决:

第一种,继承SingleThreadModel但是这样每次都会创建一个新的servlet实例,但这样消耗服务器的内存,降低了性能,并且这个接口现在已经过时了,不推荐使用。

第二种:我们尽量避免使用全局变量,就我个人而言,我比较喜欢使用这种方法。

第三种,我们可以通过使用ThreadLocal, 内部结构是一个Map结构,用当前线程作为key,他会创建多个副本。get,set方法

第四种,我们当然还可以来加锁,进行解决线程问题。

而且我还知道,向我们这种常用的MVC框架,struts1,spring这些MVC框架,都是基于servlet发展而来的,就比如struts1 的核心总控制器是ActionServlet,而springMVC的前端总控制器是dispatchServlet,在项目我们曾经用serlet来生成 图片验证码的,防止用户进行暴力破解

servlet的配置文件 web.xml

<servlet>

<servlet-name>ImageCodeServlet</servlet-name>

<servlet-class>org.leopard.code.ImageCodeServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ImageCodeServlet</servlet-name>

<url-pattern>/d</url-pattern>

</servlet-mapping>

描述:

我在web.xml中,我首先需要写一个servlet标签,servlet标签中有两个子标签,一个叫servlet-name,这个name可以随便起,但是要保证唯一性,除此之外,在这个servlet-name下有一个servlet-class,这个servlet-class对应的就是我后台提高服务的servlet,除此之外还有一个servlet-mapping,这个里边首先有一个servl-name。,这个servl-name首先要保证和上边的servlet-name保持一致,除此之外还有一个url-pattern,这是一个虚拟路径,是用来发送请求的url地址

业务场景篇未完待续,敬请关注期待

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: