项目实践点点滴滴

DolphinScheduler工作流中ChunJun任务保存失败的深度解析与实战修复 本文深度解析了在DolphinScheduler工作流中创建ChunJun任务时遭遇“parameter invalid”保存失败的普遍问题。其根源在于前端表单的`customConfig`参数默认值与后端校验逻辑不匹配。文章提供了两种实战修复方案:一是修改前端源码并重新编译,二是热更新已部署的JS文件,并对比了其适用场景与风险,帮助用户彻底解决此集成障碍。 阅读详情

1) 先HTML再JSP
web application对客户来说就是一堆html的集合,做出一个html样本既能让客户及早调整需求,也易于将来用html+struts转化

2) Reusable Design
可以把很多共同特性写成可复用系统,它们有超于当前项目的地位,由高手负责设计实现和维护,这样的模块可以找到很多,比如内部搜索(含底层的sql search engine也可复用),角色资源权限系统

3) Don't reinvent the wheel
Jarkata Commons项目拥有众多出色的实用jar,从出名的digester,BeanUtils,DBCP,Collections到Codec,IO,Net,FileUpload,HTTPClient能利用的资源太多了,好好学习非常受用

4) 显式的和分层次的异常声明
如果一个method可能抛出DaoException,NoDataFoundException,AppException,UnexpectedException,那么需要全部列出不能在方法声明出直接写 throw Exception { ... } 另外我觉得j2ee项目,每一个层次需要定义两层exception(在逻辑上,非必要),一层是内部使用,一层与上下层交互,比如java.rmi.RemoteException就是一种较高层次的异常,所有细节层次的异常在出这个层的时候应该用exception的initCause()方法包装再抛出。

以上所说的分层次也并非必需,但在大部分情况下一个完整的exception体系需要建立,如web app有一个叫ApplicationException作为所有被这个application内部抛出的异常的super class,这样在某个层次,如果必要,程序就可以catch appException继而完全避免这些可预见的异常,当然与此对应的unexpectedException当然就不需要application处理。常见的ApplicationException有InvalidParameterException, DaoException, NoDataFoundException, TooLargeResultsetException, OptimisticLockingException等等。为了方便管理和使用(前端报错需要),每个exception最好有一个ID和一个String类型的field用于说明真正出错原因

5) VO/DTO的应用(Value Object, Data Transfer Object)
就我的理解VO/DTO的作用并不在于简化程序,倒在于降低耦合。其实有些时候VO的使用挺烦的,它的好处在接口要改动时才会体现,使得一个人不用通读另一个的代码而只要照着VO/DTO更改即可。我现在的项目VO主要用于Action<-->EJB之间,总的来说没什么大的问题。
我不清楚应用了hibernate后会怎样,只是当前在我们的ibatis实践中,专门加了对于主要entity的VO,让ibatis将数据库获取的结果直接映射进VO entity再返回,用处不小

6) 事务处理
EJB容器可以自行管理事务,那么每个EJB Call都将是一个Transaction,这个特性实在吸引人。
下面是一个ejb-jar.xml的片断
    <session>
      <display-name>AccountCodeMgr</display-name>
      <ejb-name>AccountCodeMgr</ejb-name>
      <home>com.medlog.business.parasetting.AccountCodeMgrHome</home>
      <remote>com.medlog.business.parasetting.AccountCodeMgr</remote>
      <ejb-class>com.medlog.business.parasetting.AccountCodeMgrEJB</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>

在没有ejb的时候,以ibatis为例,可以用以下方法在baseDAO里实现Transaction处理
constructor() { sqlMap = SqlMapUtil.getInstance().getSqlMap(); }
startTransaction() { sqlMap.startTransaction(); }
endTransaction() { sqlMap.commitTransaction(); sqlMap.endTransaction(); }
rollbackTransaction() { sqlMap.endTransaction(); }
剩下的就好处理了。

7) Fast Lane Reader Pattern for DAO 外交快速通道??
EJB的初始化,jndi查找以及事务管理都附带一笔额外的开销,所以在前端只需浏览而不需改变数据库内容的时候,我们应用了Fast Lane Reader模式,action照样把业务交予Business Delegate处理,而BizDelegate根据是否改变数据库做出判断,如果答案肯定,它会将请求交给EJB处理,但若只是view,BizDelegate会直接唤醒dao执行select操作,从而绕过ejb层加快速度

8) BusinessDelegate和EJB的参数检查
还是因为EJB有overhead,经常在bizDelegate层就要进行一次参数检查,如果有错直接返回InvalidParameterException, 不浪费EJB资源,但是还存在这样一种可能,EJB_A called EJB_B with a set of invalid inputs, 这样的情况使得EJB层还需要再复查参数,虽然这样会有重复,但这种overhead毕竟不可避免

9) WebKey的应用
定义一些公用的jsp+actionrequest/session的attributeName,.让程序可读性更高,因为大部分情况下一个请求都不需要用到5个以上的attributes,所以我们可以有:
USER_VO_KEY,USER_ROLE_LIST存用户信息,MENU_ITEM_LIST存菜单项,SEARCH_CRITERIA_ONE(~FIVE)存搜索条件,SEARCH_RESULT_LIST_ONE(~FIVE)存结果,LIST_ONE(~FIVE)和OBJECT_ONE(~FIVE)存其他信息。毫无疑问代码可读性大大提高,只是我还在考虑是否有更好的方法,毕竟webkey还是摆脱不了初级程序员随便乱加/乱给各object赋值的恶梦

10) Optimistic Locking
我现在做的项目也用到了OptLocking的思想,简单说有几点,第一我们假设每一个用户在update前都会查看数据,或者说我们的网页设计使得frontend每一个可能的数据改变之前都有一个相对应的查看(select)操作. 基于此,我们限定了如果某数据D在用户A看后被另一用户B改动,那么用户A接下来对D的更改请求将被退回(with a special exception),而要求A重新查看数据再更新。如果这一个假设和限定都满足,可以有以下方法保证数据的更新是按顺序依次生效的 <1>每个需要的表加入lastUpdatedOn域 <2>每次select时选出该字段供待会儿update使用 <3>update时加入where lastUpdatedOn=#lastUpdatedOn# 这样如果用户B改过了某数据,他一定也改过了lastUpdatedOn,这样用户A用带where lastUpdatedOn=***的update就不可能真正更改到任何数据,frontend也可以根据此(updatedCount=0)用js提醒用户

--==欢迎大家跟贴就该文章和感兴趣的话题和我讨论问题==--

Xilinx FPGA平台DDR3设计保姆式教程(3)MIG IP核使用教程及DDR读写时序 干货来了,用DDR搬砖,只需要会用IP就好,Xilinx官方YYDS! ----------------------------------------------------------------------------------------------------------------- 汇总篇: Xilinx平台DDR3设计保姆式教程(汇总篇)——看这一篇就够了 ----------------------------------------------------------... 阅读详情

相关推荐

应急响应之windows日志分析工具logparser使用

windows日志分析工具logparser使用介绍

u013930899的博客 8123

2021年终总结--量变质变

2021关键词:社会实践、班导生、项目上线、特等奖学金、国家奖学金、数学建模国奖、字节跳动。

ATFWUS的博客 745

(10)Proteus 8.9上的STM32仿真系列(HAL)---freertos

实验设计:通过cubemxide生成freertos工程,然后创建一个 pc13 led灯间隔200ms闪烁的任务。非常遗憾的是proteus8.9仿真失败,实物上没有问题,但还是把流程过一遍。 一、原理图 实物是淘宝上stm32f103 c8t6的核心板,proteus上没有这个芯片,这里图上大概表示一下,用的是核心板自带的pc13引脚的led灯。 二、cubemxide配置 1.RCC如之前工程一样配置 2、配置SYS timebase Source不要使用systick,自己选择一个定时器,我这

qq_35442550的博客 7343

java项目(学习和研究)

  java项目就是研究,不断的对项目进行迭代,把产品做的越来越好,就是research。   自己想着做一个java项目把,可以类似牛客网,想好自己的预期产品,在设计的过程中可以不断改进和扩展,在做这个项目的过程中学习开发中的点点滴滴。可以先想好大致框架,然后再逐步实现,这也是一个创作的过程。谁会知道你会做成什么样子呢?重要的是你发现了问题,解决了问题,这些才是最关键的。让别人和你交流时就觉得...

weixin_34284188的博客 170

张量积曲面:数学原理与Python实现

Suv∑i0m∑j0nPij⋅Bipu⋅BjqvSuvi0∑m​j0∑n​Pij​⋅Bip​u⋅Bjq​v其中PijP_{i,j}Pij​是控制点网格,BipuB_i^p(u)Bip​u和BjqvB_j^q(v)Bjq​v是基函数,分别沿uuu和vvv方向定义。

T20151470的博客 1155

手机流畅的秘密:拆解LPDDR5X在骁龙8 Gen2平台上的电源与信号完整性设计

本文深入解析了LPDDR5X内存与骁龙8 Gen2处理器在旗舰手机中的协同设计,重点探讨了0.5V超低电压下的电源完整性设计以及8.5Gbps高速传输中的信号完整性挑战。通过详细的电源树架构、关键器件选型和布线策略分析,揭示了如何实现高性能与低功耗的完美平衡,为手机流畅体验提供硬件保障。

weixin_30235225的博客 484

蓝的成长记——追逐DBA(20):何故缘起,建库护航 (二次发布-练习使用markdown编辑)

体现本文更好浏览效果请访问源地址: http://blog.youkuaiyun.com/huangyanlong/article/details/48776573原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任。深蓝的blog: http://blog.youkuaiyun.com/huangyanlong/article/details/48776573【前言】 自

深蓝@黄炎龙 1922

基于MATLAB的小波包分解(WPD)算法详解

本文详细介绍了基于MATLAB的小波包分解(WPD)算法。WPD作为信号处理领域的重要技术,继承并发展了小波分析的优点,通过正交镜像滤波器组将信号分解为不同频率子带,形成完整的二叉树结构。相比传统小波变换,WPD具有更精细的频带划分、自适应基选择能力和更高的灵活性,特别适合分析非平稳信号。文章系统阐述了WPD的数学原理、算法实现流程及其在机械故障诊断、生物医学信号处理等领域的应用。通过MATLAB代码示例展示了WPD的具体实现方法,并分析了不同参数设置对分解效果的影响,为工程实践提供了有价值的参考。

qq_42212808的博客 292

2012逝去,2012总结

2013年在新年的鞭炮声中开始了,回首2012年,又一个春夏秋冬从我脚下走过。2012不平凡的一年,这一年发生了很多事……                                                                                     ——题记

信息技术提高班第九期 2355

linux内核学习(八)---摄像头框架移植(上)

本章来开始进行摄像头的移植,同时回顾一下V4L2的整个框架

文艺小少年的博客 113

华为OD机试真题2025双机位C卷 Java&Go 实现【统计员工影响力分数】

华为OD机试真题2025双机位C卷 C语言 实现【统计员工影响力分数】假设你是大型科技公司的数据分析师,负责分析公司内部员工的社交网络。你需要编写一个函数来计算每个员工的影响力分数。影响力分数定义为该员工直接和间接影响的员工数量。 输入描述

MISAYAONE的博客 279

过去五年的点点滴滴,应该值得大家学习分析下

像往常一样,在夜色下插上电源和网线,启动笔记本电脑,登录QQ,找到所有有关公司的群,逐一的申请退出和确认退出。今天,2012年9月7日 终于离开了服务了五年的公司,随着零星记忆片段让我回忆下这五年的点点滴滴。 2007年9月的深圳还是烈日当空,我顶着骄阳,怀揣梦想和希望走进现在这家公司总部,新的环境,新的面孔都等着我去适应和挑战。 2008年3月,公司为了发展需要把整个研发团队迁移到了

java教程 1395

TensorFlow2深度学习实战(十四):目标检测算法 YOLOv4 解析

最易上手的【计算机视觉】小白教程!

不积跬步,无以至千里! 7635

点点滴滴从这里开始

一切都成为过去时,新的一天,新的改变,记录成长中的点点滴滴,欢迎来访!

谁的青春不迷茫 629

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

草根程序员转型做项目管理走过的点点滴滴之三人团队

这个些列的文章只是把我个人的经历记录一下,里面涉及到的观点属于个人观点,如果不妥之处请多多指教。    续接着上篇(一人团队):草根程序员转型做项目管理走过的点点滴滴之一人团队    一个人做完一个项目后,按照时间顺序依次是一个三人团队的项目;一个一人项目;另外一个三人团队的项目。 第一个项目可以说是只做了比较糙的一版就移交给分公司那边去负责了。一个人的项目让我接触了到了公司的水利主

anders lu 的专栏 3530

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

项目中的点点滴滴

在使用Eclipse的时候一定要注意插件的使用,在安装插件前一定看清楚干什么用的以及安装的方法。不要下载非官方提供的链接。今天我就遇到了TOMCAT插件和JOCKY。 在使用eclipse的clean时如果发现不能编译。 主要原因是:编译时eclipse进行了一次错误检查遇到包下错误文件,包以及里面的文件和排序后该文件以下的文件停止编译。 解决办法:把properties属性里的java c...

baiyujie的专栏 257

探索C++的奇妙世界:学习之旅的点点滴滴

在这个信息技术飞速发展的时代,编程语言作为计算机与人类沟通的桥梁,其重要性不言而喻。在众多编程语言中,C++以其高效、灵活和强大的特性,吸引了无数编程爱好者的目光。今天,我将与大家分享我学习C++的历程和心得,希望能为初学者提供一些启示和帮助。

asuf1364的博客 616

研究生的点点滴滴

研究生的点点滴滴

Jarvan_Song的博客 1172

点点滴滴——如何管理一个项目

一、进行中的项目 这是我第一次,以一个小组长的身份来带一个团队开发一个项目,包括前期的框架选择,真真实实的感受到了一个项目,从无到有所经历的一切。现在,这个项目可以说已经到了后期,剩下的工作不是太多,但是也是最关键的时候了,项目的工期一拖再拖,不知其他的项目也是像这样的吗?也许吧。也许前方不远处,就是我拨开迷雾之时,现在的团队可以是处于疲惫状态了,有道是,“一鼓作气,再而竭,三而衰”,诚然如是,

scu_Bao的专栏 611

项目团队转型成产品团队的点点滴滴

  转眼间我的博客已经有将近一年半的时间没有进行更新了,从今以后要重新对博客进行维护了,新时期开始的第一篇文章,来说一说工作上的一些感悟。   刚刚参加工作的时候,进的是一个项目型的团队,主要是通过外包项目来盈利,幸运的是,应公司发展战略的要求,我们的项目团队奉命向产品研发转型,因此我才有了这篇博客中的感悟,本人工作经验不足,说的不合适的地方请大家多多包涵。   首先,一句话总结,项目是客户的,...

陈俊岭的程序员之路(公众号求关注,方便交流) 5350

开源博客项目Blog .NET Core源码学习(15:App.Hosting项目结构分析-3)

学习并分析App.Hosting项目中前台页面的关于本站页面和点点滴滴页面。

gc_2299的博客 712

记录工作中的点点滴滴!

[color=darkblue]ITEYE--记录工作中的点点滴滴![/color][size=x-small][/size][align=left][/align]

yaoyaolingma的专栏 327

Scrum实践路上点点滴滴(一)

大周末在家突发奇想,想总结下这一年的点点滴滴。就从Scrum开始吧。 1.对敏捷,对Scrum要抱有信心。   2011年开始接触敏捷,Scrum概念,最开始报否定态度,看了几本入门的书籍比如《轻松敏捷之旅》,《敏捷无敌》之类的。由否定态度变成怀疑态度。有试试看的想法。到现在来看,实施敏捷之后,解决很多问题,确实收获很多。当然这里不是否定否定瀑布(我曾经是瀑布的卫道士),也不是说瀑布一定解决不...

weixin_30702887的博客 155

记录自己使用GitHub的点点滴滴

使用GitHub的记录 现有项目更换git地址 1.创建的git地址:https://git.new.com/gourd/new.git 进入git_test根目录(可以执行git命令的话,就证明进入了git_test根目录。) 2.查看项目目前的git地址 git remote -v origin https://git.old.com/gourd/old.git (fetch) origin https://git.old.com/gourd/old.git (push) 3.重新设置git的新

面包的博客 9643

草根程序员转型做项目管理走过的点点滴滴之一人团队

这个些列的文章只是把我个人的经历记录一下,里面涉及到的观点属于个人观点,如果不妥之处请多多指教。       一人也要称为团队有些牵强,就当是人格分裂吧,一人饰演多职。       2007年春节后大学最后一个学期开始从事软件开发工作,使用的VB编程语言,经历了一年才算刚刚入行,期间通过自学C#转型到了.Net平台,2008年年初来到北京凭借着自学的C#在北京找到了第一份.Net的软件

anders lu 的专栏 5453

五年程序员人生的点点滴滴

和大家一样,我也是一名普通的程序员,很快工作五年了。现在依然记得大学时软件工程老师曾说过的一句话,大概是这样的:“工作五年之后,就基本可以分出大家的区别了”,这句话大概有两层意思,第一,大家都基本确定了自己的工作或职业方向;第二,一个人的能力如何基本已经确定了。先抛开这句话的真理性,至少它本身是有些道理的,当然随着时间的迁移,当初的五年时间对于现在可能已经不太准确了。但这句话一直陪伴着我,每过一段

编程小丫 1万+

【记录】这次项目的点点滴滴:)

人到中年,心中无法熄灭的是创业的梦想!失败不可怕,跌倒了重新来过。2017年或许给我的时间也就只有十年的黄金时间,我想好好再试一把。 心里已经有了思路想法,并且对项目的整个规划做了PPT,前期的市场调查基本回馈就是只要有浏览量,后续的都不是问题。但是自身除了对网络的一点爱好,对网站程序、安全技术等一窍不通,这就需要找托管方,现在不知道值得信赖的托管方在...

weixin_34162401的博客 152
上一篇: J2EE学习笔记(6) Struts HTML Tags
下一篇: 网页前后端输入校验
smallfox
博客等级 码龄25年 0粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值