JPublish简介

【Python】Python 发布订阅模式实现松耦合 发布订阅模式(publish/subscribe或pub/sub)是一种编程模式,消息的发送者(发布者) 不会发送其消息给特定的接收者(订阅者), 而是将发布的消息分为不同的类别直接发布,并 不关注订阅者是谁。 而订阅者可以对一个或多个类别感兴趣.且只接收感兴趣的消息,并且 不关注是哪个发布者发布的消息。 这种发布者和订阅者的解耦可以允许更好的可扩放性和更 为动态的网络拓扑,故受到了大家的喜爱。 阅读详情

最近研究opentaps (基于apache的ofbiz),里面用到了Jpublish

看了不少Jpublish相关内容,现摘录如下:

JPublish is a Java web publishing framework which merges the Velocity, FreeMarker, StringTemplate or WebMacro templates with a content repository and application control framework. JPublish is designed to ensure a clean separation of developer roles.

JPublish is loosely based on the FreeEnergy methodology. FreeEnergy was originally created by Leon Atkinson and others as described in his self-authored article Harnessing PHP's FreeEnergy. Essentially the FreeEnergy methodology was designed to handle page development in an object oriented fashion so that common objects could be reused. Much of JPublish's initial development ideas were obtained while documenting J.J. Berhens implementation of FreeEnergy in Python, called Aquarium.

This project is a continuation of the design and work started by Anthony Eden few years ago.

Like all good web frameworks, JPublish provides a clean separation of code, content, and layout. JPublish has the following features:

Flexible actions - actions which are programmatic elements which can be attached globally to a site, to a path (with wildcards) or to a page. Actions can be written in Java or any Bean Scripting Framework supported language (such as JavaScript(Rhino), Python(Jython), BeanShell,Groovy or JRuby.)

Templates for layout - the Velocity template engine from the Apache group has been chosen as JPublish's default template engine because of its straightforward syntax as well as its solid and simple design.

Repository abstraction layer - JPublish provides a method for binding concrete repository implementations to a site for easy and controlled access to content.

Content which can include nested content - content pulled from repositories can be parsed by the Template engine in order to include nested dynamic elements.

Automatically reloading configuration - a centralized configuration file which will automatically reload when modified makes it easy to make changes at runtime without restarting the web server.

Search-engine friendly URLs - JPublish URLs look just like static URLs, even though they are not.

Flexible character encoding - flexible character encoding control – character encoding can be specified for both input and output for specified paths.

Pluggable page manager - JPublish page definitions, which define page properties such as the title and page actions, can be loaded from any class which implements the PageManager interface. Current implementation include two: a file-based system which map one XML file to one page definition and one which pulls all page definitions from a single XML file.

Custom error handling - multiple custom error handlers can be assigned globally or by path.

Utilities - JPublish includes several utility classes which can be used to build URLs, format dates and numbers, and perform other common web tasks.

JPublish can be easily extended through Modules or Components. Examples are provided to demonstrate the smooth integration with Spring, Lucene, Hibernate, AJAX (through DWR), etc.

Welcome to the world of JPublish and ... Develop with Fun!

The JPublish Team

   JPublish 是一个功能强大的web发布系统. 它的目的也是最大的特点是将web开发人员的角色严格并清晰的区分开来.

   JPublish支持多种模版引擎, 包括Apache Velocity, FreeMarker 和WebMacro.   

   JPublish也支持各种脚本语言, 如: Python, BeanShell, and JavaScript. JPublish是绝对是一个经典的"合成器", 平滑的扩展性让人赞叹.

   JPublish 定义了多种角色用户:
    应用程序设计师(Application designer)-- 主要是通过模板来为一个网站和这个网站的不同部分进行统一的设计, 构架.
    内容策划(content producer)-- 负责处理内容库(content repository)中的文档或其他信息.内容策划在板面设计中通常使用一套有限的设计元素(比如粗体或斜体).
    特定业务领域的程序员(Domain-specific programmer)-- 负责build 特定领域的Java代码,这可能是JavaBeans,或者与Web应用程序相关的普通Java类.
    集成程序员(Integration programmer ) -- 负责新建一个将特定代码和Web site连接起来的逻辑,该逻辑体现为JPublish的用于scripts自动化任务的action system.

    有了这种用户角色的清晰分离,实际上做到了内容, 程序逻辑,和表示逻辑的分离.
    大多数开发者往往会将所有的任务放在一起,而没有将它们更好地组织起来.笔者之前所在的项目组也遇到了此类的问题:项目开始时,似乎已经做了很好的设计.然后将功能化成很多块,每个人负责一块.但是到了项目后期发现,需求无奈变更,代码变得很糟糕.程序员往往为了解决一个问题,乱塞代码.导致原有的设计变形.结果项目难以维护,不停地refactor.导致这样的后果是因为在开发阶段没有将开发人员的职能清晰的分离开来.调试程序时,总是将表示逻辑和程序逻辑,整合过程一同考虑.这样代码的质量必然下降.导致最后为解决问题牺牲了代码的质量.
    而使用这种基于角色的工具会使你不得不将这些任务分开并重新合成,我相信这一点一定会使你的程序变得更好更高效.


JPublish-开源 JPublish是一个功能强大的Web发布系统,旨在确保开发人员角色的完全分离。 JPublish包括对多个模板引擎的支持,包括Velocity,FreeMarker和WebMacro以及几种用于动作的脚本语言。 立即下载

相关推荐

MATLAB实战:手把手教你实现Gardner环路位同步(附完整代码)

本文通过MATLAB实战,详细讲解了Gardner环路位同步算法的原理与实现。内容涵盖插值滤波器、定时误差检测、环路滤波器与数控振荡器等核心模块,并提供完整代码和调试技巧,帮助读者掌握数字通信中关键的符号定时同步技术。

weixin_29048775的博客 175

Java开源框架一览表

[size=medium]Open Source Web Frameworks in Java [list=1] [*][b][url=http://jakarta.apache.org/]Struts[/url] [/b]Struts Frame work is the implementation of Model-View-Controller (MVC) design patt...

快乐每一天 314

高德地图JS API私有化部署实战:从数据爬取到内网集成

本文详细介绍了高德地图JS API私有化部署的完整流程,涵盖从地图瓦片数据爬取、JS API离线化改造到内网项目集成的实战步骤。重点解决了在封闭内网环境中实现地图功能的核心难题,并提供了Vue.js项目中的具体集成代码与调试技巧,帮助开发者在离线环境下构建稳定可靠的地图应用。

weixin_29062255的博客 319

我的学习记录

When you are tracing pages, make sure you follow the page description XML file and see what actions are called. 99.9% of the time variables in a page were placed there by an action. Either the page ac

hj12的专栏 1103

MacX DVD Ripper Pro for Mac(DVD解码器) 6.2.120190416免激活版

只需要5分钟即可转档一张DVD光碟!并允许我们在编码之前预览、编辑、裁剪、修剪或扩展视频。第一款也是唯一一款能够支持DVD到MP4,H.264,MOV,FLV,MPEG4等所有格式DVD(新DVD,99-标题DVD,损坏和无法播放的DVD)和翻录DVD / ISO映像的工具,AVI,QT,MP3等。借助350多种预设配置文件MacX DVD Ripper Pro for Mac(DVD解码器) 6...

llhf688的博客 891

【人工智能AI】是什么?

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟延伸和扩展人的智能的理论方法技术及应用系统的一门新的技术科学。(百度百科)人工智能的基本原理:机器从「特定的」大量数据中总结规律,形成某些「特定的知识」,然后将这种「知识」应用到现实场景中去解决实际问题。在这个基本原理的基础上,有3个特征:1、人工智能本质上是一种工具2、人工智能技能只能解决特定的问题,而不是什么都能做3、人工智能属于归纳逻辑,可以告诉你是什么,但是不能告诉你为什么。

KJCZ.AK的博客 2万+

转载:Java框架二

TapestryTapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是JavaWebComponent。Tapestry使得java代码与html完全分离,利用这个框架开发大型应用变得轻而易举。并且开发的应用很容易维护和升级。Tapestry支持本地化,其...

185

SAP公司间STO业务解析(包含主数据解析、后台配置解析、前台业务演示)

SAP公司间STO业务解析

ww114784的博客 1021

ofbiz的架构设计

1.数据层 在数据层中,OFBIZ使用ENTITY ENGINE作为其工具,并且能够满足99%与数据库交互的功能.有时在某些地方Entity Engine并不是有效的.这时就需要编写自定义的JDBC代码来与数据库交互. 2.逻辑层 OFBIZ 使用Service Engine作为调用逻辑的工具.几乎所有的业务逻辑都被实现成服务,以便提高重用和使基于组件的开发更便利.我们可以同步或者异步调用我...

jiasudu 193

120、ISP 驱动架构解析:从 V4L2 请求到 ISP 硬件的配置下发流程

本文以实际案例解析ISP驱动架构的V4L2到硬件配置下发流程。作者通过一个因内存共享导致画面闪烁的bug案例,详细剖析了用户空间参数通过V4L2结构体传递、驱动层拆包与硬件寄存器映射、时序同步机制等关键环节。特别强调深拷贝、dirty flag增量更新、shadow register等实现要点,并给出多路并发隔离、寄存器写入失败等典型问题的排查方法。文章建议开发者深入理解参数到寄存器的转换过程,推荐通过debugfs实时监控寄存器状态,避免过度依赖自动调试工具。全文以实践为导向,对ISP驱动开发具有直接指导

sundong_81的博客 160

强化学习与行为树的融合在游戏编程中的应用

在游戏中,我们可以将游戏的状态作为智能体的状态,将游戏的奖励作为强化学习中的奖励信号,从而训练智能体在游戏中做出最佳决策。强化学习通过试错学习来优化角色的决策策略,而行为树提供了一种灵活的方式来组合和调整不同的行为。行为树可以灵活地调整和组合不同的行为,以适应游戏中不同的情境和目标。在游戏开发中,强化学习和行为树是两种常见的技术,它们被广泛应用于游戏智能的实现。接下来,我们可以定义一个具体的行为树(BehaviorTree),该行为树由一系列节点组成,每个节点代表一个特定的行为或决策。

TechO_O的博客 683

你知道多少Java Web Framework?

EchoCocoonMillstoneOXFStrutsSOFIATapestryWebWorkRIFESpring MVCCanyamoMaverickJPublishJATOFoliumJucasVergeNiggleBishopBarracudaAction Framework

Rain Zhao的专栏 585

YOLOv5改进 | 低照度检测 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。

Snu77的博客 2224

Oracle UDT Collections as IN and OUT parameters...

This is one solution for sending Oracle UDT (user defined types) collections as IN and OUT parameters using iBatis. After spending a great deal of ...

175

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

为什么*模版语言

现在有很多模版语言,什么Velocity,JPublish等等等等,都可用于页面展示,但我觉得实在没必要用,JSP才是最强大最方便的。 为什么这么说呢? JSP本身嵌入java代码,而java语法和功能大家都清楚,访问对象和属性不在话下;if跳转,for,while循环等一应俱全,更有强大的计算能力,完全能胜任复杂的页面逻辑。 而脱离java再搞一套所谓的模版语言实在没有必要,一则增加学习时...

Ddog 113

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

用五个步骤轻松替代 JSP Struts 与 Velocity 的集成

searchwebservices.techtarget.com.cn/tips/258/2166758.shtml

zengjinliang的专栏 147

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

基于Ofbiz的Web框架

1       Web开发概述 随着互联网的广泛普及,越来越多的企业应用采用了B/S的交互模式。在开发基于B/S的企业应用中,如何把表示逻辑与业务逻辑分离开来,一直都是人们关注的一个焦点问题。 在Web开发中引入MVC设计模式,是一个有效地解决办法,目前看来是一个成功的办法,也是人们仍然在做的事。MVC设计模式起源于Smalltalk语言,它由以下三个部分组成:模型(model),视图

孟令杰 559

一个接口设计模式的探讨

我在设计一个UI时,采用了模版引擎实现,为了隔绝和各模版引擎实现的依赖性,我对模版引擎进行了包装,抽象出一层接口层: Template public interface Template {           public void merge(Context context)throws MergeException;    }    Context ja...

leadyu 166

ofbiz框架以及核心原理介绍

1. 什么是Ofbiz Ofbiz(Open for business)是一个开源的,基于J2EE和XML规范的,用于构建大型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架(Framework)。 Ofbiz几乎实现了所有的J2EE核心设计模式,各个模块之间的耦合比较松散,用户能够比较容易的根据自己的需要进行拆卸。 Ofbiz内置了许多其它开源项目,如JB

diyagea的博客 8225

Web开源框架大汇总

Struts 项目简介信息 Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的...

weixin_34240520的博客 1324

Jenkins 之插件 Publish JUint test result reports 的使用

前提: 下载插件:JUnit (https://plugins.jenkins.io/junit) 一、安装 安装好JUnit 之后,会在新建或者编辑项目时,在【增加构建后操作步骤】出现【Publish JUnit test result reports】的选项。如下: 二、配置 点击上面构建步骤后,在这里会出现配置项目: 提示:我上面填写之后,最终的输出目录...

半僧 1万+

opentaps介绍

opentaps是一个基于ofbiz基础开发的完全开源的企业级应用系统。它包括了完整的ERP和CRM解决方案和内建的企业智能工具。opentaps现在在国内应用面不象sugarcrm/vtigercrm这些企业应用那样普遍,我想很大程度是由于JavaEE应用的逻辑结构严谨与复杂度决定其不象PHP应用那样容易拆分按需阅读切入。了解一个JavaEE的应用需要先了解其构造的框图、分层结构、每层实现的

zhangbo_java的专栏 783
上一篇: Java 多应用服务器Session共享问题
下一篇: opentaps 研究资料汇总
努力突破
博客等级 码龄17年 36粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值