Apusic OperaMasks――开箱即用的Web Framework,它以JSF为基础引擎,辅以独创的原生Ajax技术,同时提供丰富的组件和集成开发环境,使Web开发变得简单方便。无论是后台的事务、存储、分布式计算等基础服务,还是前端的UI展现与用户交互,以及后台与前端的会话过程,Apusic OperaMasks都提供了完整的解决方案,有效解决Web开发所面临的问题。
1.Standard & Open!
J2EE是一个开放的社区,是一个允许各种技术百花齐放、百家争鸣的社区,同时,也是一个遵循标准、推崇标准的社区。与.net相比,J2EE的标准是开放的标准,它并不是掌握在少数人或者少数厂商的手里,而是允许并鼓励人们参与标准的制定,并通过标准来规范与约束不同厂商的实现,从而有效保护客户的IT投资。
Apusic OperaMasks首先是标准的,它遵循并实现JSF规范,任何基于JSF技术构建的Web应用,都能够平滑移植到Apusic OperaMasks上;同时,它又是开放的,所有的源码,以及OperaMasks整个开发过程,全部通过开源社区OperaMasks.org进行。
那么,作为底层支持技术,JSF是否能够承担起“下一代J2EE Web开发框架”之重任?同样,有了标准与开放,是否就意味着Apusic OperaMasks能够引领Web开发技术的新潮流呢?
2.From the earth to the moon, and ready for Mars!
Apusic OperaMasks是一种不依赖任何具体展现技术的解决方案,它支持现有的Web标准,譬如Html与WML,同时也为将来可能出现的新技术、新标准做好了准备。在Apusic OperaMasks中,所有的UI元素被封装成Component,而Component通过Render Kit进行界面的渲染,当系统需要支持其它展现层技术时,只需要替换Render Kit即可实现。
当AJAX出现之后,人们意识到Web应用可以更加丰富多彩,于是各种RIA技术方案层出不穷,目的是要在AJAX这种“过渡”技术的思想指引之下完成下一代Web技术的变革。面对未来可能的新技术,很多用户和开发者在迷茫中观望,对JSF并没有抱多大的热情,认为JSF也是行将被淘汰的技术。事实上这种概念是错误的,JSF是一种和具体展现技术无关的技术。在Apusic OperaMasks中唯一和具体展现相关的部分是Render Kit,而Render Kit的可插拔的性质决定了Apusic OperaMasks可以适应目前和将来的大多数RIA技术。每当一种新的RIA技术出现时,只需要针对这种RIA技术编写一个Render Kit,这种新的RIA技术立即就能在Apusic OperaMasks中获得支持,而以前所写的应用不需要做任何修改。
Apusic OperaMasks为任何新的展现层技术做好了准备!
3.Ajax Everything!
Ajax是当今红得发紫的技术,它改变了人们对传统Web应用的不佳印象,但同时,它的开发成本与维护成本过高。于是乎,各种各样的Ajax组件与框架应运而生。与Apusic OperaMasks相比,这些Ajax组件与框架所解决的问题,是简化Ajax的开发;Apusic OperaMasks则是使Ajax变得透明,是“干掉”了Ajax,用户甚至不需要知道Ajax的存在,而应用是自然而然的Ajax Enable的应用。
3.1 与其它JSF引擎相比
Apusic OperaMasks是世界上第一个“原生支持Ajax”的JSF引擎。其它常规JSF引擎(譬如MyFaces)往往是通过提供一些特殊组件库来完成对Ajax的支持,而Apusic OperaMasks则在引擎级别提供了对Ajax的原生支持。
举个简单的例子,在MyFaces中,为了达到Ajax效果,需要利用Sandbox子项目或者其它扩展组件,常规的标准JSF组件永远无法具备Ajax特性。但这些标准JSF组件,却可以在Apusic OperaMasks引擎上获得截然不同的效果:任何利用标准JSF组件构建的应用,只需要配置一个参数,就能够在Apusic OperaMasks引擎上获得完整的Ajax特性,包括与服务器端的异步交互、页面的局部刷新等。
<application>
<default-render-kit-id>AJAX</default-render-kit-id>
</application>
换言之,仅仅将上述参数中的default-render-kit-id置成AJAX,Apusic OperaMasks就能够让标准的JSF应用具备Ajax特性!
有点像变魔术?Apusic OperaMasks是如何做到的?
我们说过:Apusic OperaMasks is “from earth to the moon, and ready for Mars”。Apusic OperaMasks不仅提供了默认的HTML_BASIC的Render Kit,还提供了内置的Ajax Render Kit。因此,我们只需要将系统默认Render Kit置成Ajax Render Kit,整个应用就自动变成Ajax Enable的应用!
3.2 与其它Ajax组件库的区别
Ajax组件库是为了简化Ajax的开发(譬如ajax4jsf),而Apusic OperaMasks则是“干掉了”Ajax。对OperaMasks的用户来说,应用对Ajax的支持是透明的,你所写的任何一个JSF应用都支持AJAX,但不需要编写任何javascript代码,甚至不需要了解AJAX的原理。举个简单的例子,用户希望点击一个按钮,web页面产生一次Ajax请求与响应并更新某个text文本框时,通过ajax4jsf,我们需要在页面中指定:
< h:outputText id="dup" value="#{bean.text}" />
< a4j:commandButton reRender="dup" value=" Submit"/>
用户不仅需要记住额外的tag用法,还需要知道此Ajax请求需要更新页面哪个控件的值。而通过Apusic OperaMasks技术,用户只需要采用标准JSF组件的写法:
< h:outputText value="#{bean.text}" />
< h:commandButton value="Server Submit" />
然后,用户只需要指定此form的Render Kit是Ajax,或者在配置文件faces-config.xml中,将全局Render Kit置成Ajax即可。用户无需记住其它tag的用法,也无需了解更新哪些控件,甚至根本就不必要关心什么是Ajax!
3.3 与其它Ajax开发框架的区别
同样,这个世界还存在许多Ajax Framework,譬如dojo。我们并不否认这些Ajax开发框架的优秀,但是,与它们的优点同样明显的局限之处是:dodo之类的Ajax开发框架仅仅解决了客户端的问题,对任何服务器端逻辑,dojo无能为力。J2EE是一个整体,它不仅需要解决表现层问题,也要解决数据层和逻辑层的问题,JSF是JavaEE 5.0的一个重要组成部分,这就使得Apusic OperaMasks不仅可以创建丰富的客户端体验,同时可以和JavaEE应用服务器结合,从而建立强大的服务器端逻辑绑定。
3.4 组件对Ajax的支持:
与此同时,Apusic OperaMasks提供了部分特殊组件,以更有效的支持Ajax特性,譬如:
renderGroup:能够改造过时的应用,使其支持AJAX。在AJAX出现之前或基于其他JSF框架所编写的组件或应用有时并不能很好地运行在OperaMasks中,renderGroup能够为这些组件提供一个AJAX的渲染环境,使其达到AJAX的运行效果。
updater:装载和刷新页面的一小部分,使页面变成桌面。我们可以将页面的某些区域定义成一个独立刷新区,这些区域具有独立的交互环境和生命周期,当在这些独立区域中进行交互操作时他们被单独刷新,页面的其他部分不受影响。你可以单独开发和调试一些小应用,然后用updater将这些小应用组装成一个完整的应用。使用这样的技术将不再需要购买昂贵的Portal Server,在运行的时候和Portal没有什么区别。
event binding:如果必要,可以在服务器端处理客户端事件(譬如当某个客户端事件需要从服务器中获取数据进行响应);
client validator:本该由服务器处理的数据校验可以在客户端执行。JSF默认提供了许多数据验证器,常规JSF引擎的实现总是在服务器端进行验证,这样的话,每次与服务器的交互总是会带来一定的性能损失,而Apusic OperaMasks能够在不更改代码的情况下,在客户端进行数据验证。
总而言之,Apusic OperaMasks对Ajax的支持是原生的,是从引擎级别予以支持的,在Apusic OperaMasks中,Ajax is Everything!
4.Rich Components!
Apusic Operamasks提供了许多丰富的组件,我们称之为“Rich Components”。无须赘述的是,这些Rich Components从骨子里提供了Ajax的支持。在这里我们没有重新发明一次车轮,而是采用了广受好评的Ext JS(http://extjs.com)来实现Rich Components,但OperaMasks和Ext JS之间的联系并不紧密,如果必要,完全可以通过更换Render Kit的方式用其他的富客户端组件库来代替。这些组件都是面向数据的,可以用JPA、Hibernate、或直接用JDBC将数据准备好,交给这些组件去展现。同一组数据可以用不同的组件来展现,无论是DataGrid, DataView还是Chart,对数据的展现过程都是一样的。当数据需要更新时,通过AJAX和JSON完成与服务器的交互。我们有:
TreeView:用来组织你的数据
DataGrid:用表格展现你的数据
Chart & Report:以图表形式展现数据
DataView:用任何你能想到的方式展现你的数据
5.Rich Form
OperaMasks 提供的Rich Components提供了许多额外的特性,除了原生的Ajax支持以外,还具备自定义风格、换肤功能等,这是对JSF常规标准组件的一种有益扩展。
那么,标准JSF组件是否能够通过Apusic OperaMasks获得这些能力?让我们再变一次魔术。
左图是一个常规的标准JSF组件的样态,当我们修改这个form的属性rich=”true”时,或者在web.xml中配置一个全局环境变量:
<context-param>
<param-name>org.operamasks.faces.FORM_RICH</param-name>
<param-value>true</param-value>
</context-param>
然后我们可以发觉,左边的JSF组件全部变成了右边的形态。甚至不仅仅是样式风格的变化:如果一个文本框需要显示的是一个日期,那么,会变成一个带日历选择器的输入框;如果是一个只能够输入数字的文本框,那么,会变成一个带计算器辅助输入的文本框。
又是一个魔术?事实上,这里的原理与Ajax Render Kit大同小异,我们只是更改了组件的Render Kit而已。
6.Apusic Studio!
Apusic OperaMasks是基于JSF规范的, JSF从规范中便对工具预留了支持的空间。同样,ApusicOperaMasks不仅提供了引擎、组件,我们还有与之相辅相承的集成式开发工具:Apusic Studio。
作为集成式Web开发工具,什么是其最主要的核心功能?可视化设计?重要,但又不是全部。对Web开发初学者来说,可视化的页面设计器是能够降低Web开发学习曲线的有力武器,但真正有经验的人,却绝不依赖于设计器。真正熟练的、富有经验的Web开发人员,所需要的是一款细节考虑完善、开发过程流畅的工具。他们通过可视化去了解工具,但通过细节与开发流畅性去决定是否喜爱这款工具。
Apusic Studio提供了世界一流的可视化Web设计界面,同时,Apusic Studio又是世界上第一款将开发、配置、部署、监控等过程完美的衔接在一起的集成式开发环境!J2EE的Web开发原本是一个比较繁琐的过程,即便整个过程你很熟悉,但其复杂度也足以让人望而生畏,采用Apusic Studio,将使这一过程变得有如行云流水一般,除了每一阶段有向导帮助你快速实现以外,过程中的一些细节也自有Studio帮你照料得无微不至,当你需要完成什么功能时,你会发现它就在你手边,使你感觉开发Web应用不再是一种负担,而是一种充满成就感的过程!
7.And More...
7.1 布局
布局是Web应用中的常见问题,Apusic OperaMasks优雅的解决了此类问题。我们有布局管理器。
如图所示的BorderLayout能够将页面分割成多个部分,不同部分之间能够进行拖动、隐藏等操作。
同样,我们还提供了类Tiles的模版布局技术,解决Web页面的代码复用问题,并且,与Tiles相比,我们的解决方案更优雅,我们采用标准的JSF语法来完成页面布局的定义,使用户更易于上手,同时又避免了xml配置文件的繁琐。
7.2 基于Annotation的Managed Bean的定义
Managed Bean是JSF中非常重要的概念,它是界面层与业务层之间的粘接器。JSF规范规定,必须在faces-config.xml文件中声明Managed Bean。如同EJB 3.0通过Annotation来简化ejb的配置一样,Apusic OperaMasks提供了以Annotation形式来配置Managed Bean的功能,包括提供支持Managed Bean声明、Managed PRoperty注入等一系列的Annotations以避免维护faces-config.xml文件,极大的简化了应用的开发过程。
如果运行在Apusic应用服务器上,我们还可以在Managed Bean中通过Annotation进行资源注入,从而将Managed Bean与ejb/jpa等编程模型更好的融合在一起。
7.3 组件开发人员之利器
组件技术是解决软件复用问题的有效方案,Web开发同样如此。但我们却缺乏Web组件的构建基础。因为我们需要为其设定很多假设:它的技术是先进的吗?它的规范是标准的吗?它的实现是开放的吗?
无庸置疑,Apusic OperaMasks满足您的所有要求。并且,针对组件开发人员,它提供了若干基础服务,包括:
Ajax Engine:引擎级的Ajax支持,简化组件开发人员Ajax开发
Resource Manager:解决组件的资源管理问题
SKIN Manager:提供组件的皮肤管理功能
OperaMasks.org是一个鼓励创新、鼓励分享的社区,任何用户都可以在Apusic OperaMasks上进行扩展,并形成自己的组件库,从而有效解决Web软件开发复用问题。
8.构建完整解决方案
回顾OperaMasks相关技术,包括Ajax特性、Rich Components等,不难发觉,我们解决了界面展现层问题,以及展现层与业务逻辑层的粘接器Managed Bean,但我们缺少业务逻辑层所应该必备的一些基础服务,包括事务、安全、存储、分布等,而这些,是Managed Bean所无法带给我们的。
幸运的是,就像 JSF 只是JavaEE的组成部分一样,我们不仅有 Apusic OperaMasks,还有久经考验的Apusic应用服务器。
Apusic OperaMasks是开放的技术,它可以运行在任何支持Servlet 2.5/jsp 2.1的Web容器上,但无疑,它与Apusic应用服务器的结合是最紧密的,而Apusic应用服务器也为其平添许多额外特性。
1) Managed Bean 与 ejb3/jpa 的结合:
在 Apusic 应用服务器上运行 Apusic OperaMasks时,支持在Managed Bean里面通过Annotation进行资源注入,从而能够将Managed Bean与ejb3/jpa很好的融合在一起,形成统一的编程模型,并由ejb3/jpa为Managed Bean提供事务、安全、存储、分布式计算等基础服务。
2) JSF状态的传递
JSF技术需要在客户端与服务器端之间进行状态的维护,这就意味着双方之间的交互可能更频繁,数据量更大。Apusic应用服务器为其提供了许多额外的特性增强,包括基于NIO的多路复用技术提升并发处理能力;基于gzip形式的状态压缩技术降低网络流量等。
Apusic OperaMasks是建立在 Apusic 应用服务器之上的,并与Apusic应用服务器一起构成了Web开发完整解决方案!
(出处:http://www.knowsky.com/)