portlet 实现拖动_如何重构Java Portlet应用程序以实现云原生

portlet 实现拖动

尽管Java社区内部一直一致认为Portlet开发的时机已经过去,但门户服务器并没有死。 但是,事实仍然是,像HCL这样的公司仍在向其门户服务器出售许可证,并且基于服务的供应商仍然签署了庞大的门户服务器支持合同。 这样,从事门户项目的开发人员仍会基于JSR-286或JSR-362 API编写Java portlet应用程序,这对于希望追求云原生未来的组织来说并不是一个好兆头。

如果组织使用Java门户服务器作为其数字体验平台的中心,则他们的开发人员将很想用标准Portlet API编写Java Portlet应用程序。 但是,开发人员应不惜一切代价避免使用此方法。

尽管开发人员以过时的方式编写代码,但是架构团队认识到有更好的选择可用之后,最终将需要重新编写代码并将其移至与现代云原生开发和部署趋势更兼容的工具上。 当前的模型可能会起作用,但是如果组织想要过渡到未来,则将需要重新评估其流程并确定需要更改的区域。

对于当今需要构建和部署Java Portlet应用程序的组织,这里有几种方法可以最大程度地减少对Portlet API的使用并随后创建与基于DevOps的云原生计算环境更加一致的组件。

将Java Portlet应用程序视为微服务

如果必须开发Portlet,请使用客户端渲染框架(例如React,Ember或Angular)来提供UI。 这允许Java Portlet应用程序的呈现方式在很大程度上与Portlet API分离,并且UI可以轻松地重新用于非门户环境。

此外,将逻辑从与后端服务或状态管理功能的任何交互中移出Portlet,移至Spring Boot微服务中RESTful API之后 。 然后,仅将Portlet API用作两者之间的中介。 这样,您仍然可以使用传统的Portlet开发和部署技术将应用程序部署到门户,同时最大程度地减少对Portlet API的依赖,并使您的体系结构更加云化。

最小化特定于Portlet的功能的使用

Portlet API提供对许多非常强大的功能和服务(例如Portlet首选项和Portlet消息传递)的访问,这些功能和服务在Tomcat或Jetty之类的标准应用程序服务器上不可用。 这些功能虽然可以吸引人,因为它们可以极大地改善整体用户体验,但它们却带来了锁定成本。

当您采用云原生方法并迁移到更轻量级,松散耦合的架构时,使用这些功能的所有Java portlet应用程序都将需要完全重新设计。 避免使用特定于Portlet API的功能,这些功能在诸如Struts,JSF或Servlet和JSP API的框架中没有类似的实现。

使用JSF或Spring Portlet桥

如果您无法避免开发Java Portlet应用程序,那么可以使用一个Portlet桥来最大程度地减少技术负担。

Spring和MyFaces是最受欢迎的portlet桥中的两个。 这些软件插件允许您通过抽象底层Portlet API来使用Spring MVC或JavaServer Faces开发Portlet应用程序。 结果是,应用程序使用了更现代的框架,不依赖于底层门户基础结构,并且只需进行少量配置更改即可轻松部署到开源Tomcat或Jetty服务器。

Spring MVC Portlet

Spring MVC Portlet可以帮助抽象出底层Portlet API,并使您的Java Portlet应用程序更具云本机性

使用内容呈现Portlet

所有主要的门户网站服务器都提供一个内容呈现portlet,该portlet可将HTML以及其他Web资源(如JavaScript和CSS)发送到客户端。 如果您的软件开发团队可以通过HTML,JavaScript和CSS将建议的Java Portlet应用程序提供所需的所有交互功能,则可以完全避免针对JSR-286或JSR-362 Portlet API进行任何开发。 此举将使您的应用程序完全从门户网站上解放出来,并使它们可以轻松迁移到任何云原生环境或其他内容交付系统中。

将Portlet API转换为Servlet API

开发人员应不惜一切代价避免使用Portlet API。 另一方面,Servlet和JSP API的前景仍然非常光明,因为所有主要的Java Web应用程序框架都是以API为基础构建的。

实际上,在大多数门户网站服务器实现中,Portlet API只是基础Servlet和JSP API的扩展。 结果,通常可以将Portlet组件转换为它们相应的Servlet组件。 例如,通常可以将PortletRequest转换为HttpServletRequest,或将PortletContext转换为ServletContext,依此类推。

如果您将Java Portlet应用程序当作传统的Servlet和JSP应用程序来编写,则可以将这些应用程序从门户网站服务器移植到标准Java应用程序服务器中,而将这些麻烦最小化。 而且,如果您避免使用不是特别云原生的Servlet API(例如HttpSession),则您的应用程序可以轻松转换为微服务,并可以在Docker容器中部署到Kubernetes集群。

重构Java Portlet应用程序的方法

回顾一下,将Java Portlet应用程序重构为更多云原生友好组件的五种策略包括:

  1. 像微服务一样思考
  2. 最小化特定Portlet功能的使用
  3. 使用JSF或Spring Portlet桥
  4. 使用内容呈现Portlet
  5. 将Portlet API转换为Servlet API

作为组织数字体验平台的核心,Java门户服务器失去了光泽。 这样,那些负责Java Portlet应用程序开发的人员应该意识到在开发和部署新的JSR-286和JSR-362 Portlet时潜在的技术负担。

如果考虑到这五个Portlet重构策略,则在机会最终出现时,在门户网站服务器上托管应用程序的组织将使向云原生环境的迁移变得容易得多。

翻译自: https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/How-to-refactor-a-Java-portlet-application-for-a-cloud-native-future

portlet 实现拖动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值