如何最好地实现 2002 年时代的 J2EE 应用程序的现代化?
我有这个朋友....
我有一个朋友,他在2000年代初开始的java ee应用程序(j2ee)应用程序上工作。目前,他们在这里和那里添加了一个功能,但具有较大的代码库。多年来,该团队已经萎缩了70%。
[是的,“我有这个朋友是”。是我,试图幽默地将青少年高中辅导员的羞耻感注入其中]
爪哇,2002年
该应用程序使用EJB 2.1,struts 1.x,DAO等直接的jdbc调用(存储过程和预准备语句的混合)。没有 ORM。对于缓存,他们使用OpenSymphony OSCache和自产的缓存层的混合。
在过去几年中,他们一直在努力使用ajax技术和库对UI进行现代化改造。这主要涉及javascript libaries(jquery,yui等)。
客户端
在客户端,缺少从 struts1 到 struts2 的升级路径,这阻碍了他们迁移到 struts2。其他Web框架变得流行(wicket,spring,jsf)。Struts2不是“明显的赢家”。将所有现有的UI从Struts1迁移到Struts2 / wicket / etc似乎并没有以非常高的成本带来太多的边际效益。他们不希望有一个技术拼凑在一起的技术(Struts2中的子系统X,Wicket中的子系统Y等),所以开发人员使用Struts 1编写新功能。
服务器端
在服务器端,他们考虑迁移到ejb 3,但从未有很大的动力。开发人员都对ejb-jar感到满意.xml,EJBHome,EJBRemote,“ejb 2.1原样”代表了阻力最小的路径。
关于 ejb 环境的一大抱怨是:程序员仍然假装“ejb 服务器在单独的 jvm 中运行,而不是 servlet 引擎”。没有应用程序服务器(jboss/weblogic)强制执行这种分离。该团队从未将ejb服务器部署在单独的盒子上,然后再部署在应用程序服务器上。
ear 文件包含同一 jar 文件的多个副本;一个用于“web层”(foo.war/WEB-INF/lib),一个用于服务器端(foo.ear/)。应用服务器仅加载一个 jar。重复性使人模棱两可。
缓存
至于缓存,他们使用几种缓存实现:OpenSymphony缓存和自生缓存。Jgroups 提供集群支持
现在怎么办?
问题:团队目前有空闲的周期来投资实现应用程序的现代化?聪明的投资者会把它们花在哪里?
主要标准:
1)生产力提高。特别是减少了开发新子系统功能的时间并减少了维护。2)性能/可扩展性。
他们不关心时尚或技术上的街头信誉。
你们都推荐什么?
在持久性方面将所有内容(或仅新开发)切换到 JPA/JPA2?
直接冬眠?等待 Java EE 6?
在客户端/Web框架方面:迁移到(部分或全部)到struts2?检票口?jsf/jsf2?
至于缓存:兵马俑?嗯?相干?坚持他们拥有的东西?如何最好地利用 64 位 jvms 提供的巨大堆大小?
提前致谢。