技术开发 频道

Canoo发起Java.net上的ULCXML项目


【IT168 技术文档】

    新的ULCXML项目发布了可以在XML富客户端中定义Swing用户接口一个工具。生成的UI基于Canoo的瘦客户结构。Artima与Canoo CEO--Marc Domenig谈论了带给服务器的Swing编程模块如何在理服务器与客户端开发之间的分隔之间搭建一个桥梁.

    Java.net的ULCXML项目发布了用于瘦客户端Java应用的UI设计工具的最初版本。由Canoo发起的这个项目是基于SwiXML的想法,但是目标是Canoo的超瘦的客户平台。Canoo市场主管Sandra Wendland做了解释,这个工具允许你从一个XML文件产生一个用户接口。你可以有一个从你的应用的Java类里分离出来的XML文件,为你的Canoo超轻型客户端做你的UI原型或ULC。你可以使用任何的提供schema 验证的XML编辑器来改变你的UI,而不必触动你的Java代码。

    ULCXML工具产生的UI种类既不是纯Swing也不是JSF或Ajax。Canoo的瘦客户端UI结构为Swing提供了一个服务器端编程模块。为了对这个有一个更好的理解,Artima与Canoo CEO--Marc Domenig进行了交谈:利用Canoo的瘦客户端,应用部属是属于服务器端的,大部分的执行是在服务器端。商业逻辑,甚至是表现层逻辑在服务器端执行。

    在客户端,界面被移交给本地的Swing来完成。但是Swing客户端并不运行一个单独的应用,而是一个应用中立基于Swing的表现引擎。你一旦在客户端安装了那个引擎,那么你就能执行任何数量的应用,就象利用一个浏览器,与成熟的富客户端Swing应用的不同就是你不必安装新的应用版本[在客户端],因为应用会在服务器端运行。Canoo的瘦客户端与成熟的富客户端Swing应用最大的差别是前者能利用一个服务器端编程模块。Marc Domenig:你的程序象在服务器端有了Swing。你不必考虑在服务器端与客户端的对象进行同步与通信。你有和Swing相同的API,但是编程模块是你在服务器端获得的。

    The [Canoo] API严格地讲并不是Swing,但是与Swing相似。ULCButton代替了Jbutton,ULCFrame代替了JFrame,控件的名字是不同的,但是API是相同的。移植由从Swing API到ULC API的转移,你可以不必担心客户端或者服务器端的分离。

    ULC是一个库,并没有自己的应用服务器。利用ULC,你开发Servlet,可以与现有的Web平台整合,对整个的J2EE 接口起到杠杆作用。你甚至可以与一个生成的 HTML实现共享Servlet上下文,部署你的应用,将其作为一个Session bean。 如果你需要cluster你的应用,你可以使用任何的J2EE的clustering工具。同时,在客户端你正在开发功能完备的富客户端Swing应用。

    Domenig解释ULC库为Swing组件提供更多的远程控制:当一个客户端启动时,客户端发送一个消息给服务器。然后服务器发送一个用户接口描述给客户端的控制引擎。描述仅包括UI的可视部分,并不是整个的UI。UI模型存储在服务器端。客户端实现代理实例化相应的Swing对象来显示UI的可视部分。当用户执行点击鼠标,服务器端就发送要求显示的数据,假设,一个不同的标签或一个请求的窗体。

    X11或Citrix的主要不同之处是那些技术工作于Frame buffers和Pixels级别上。URL要求更少的通信量,因为你有了更高级别的抽象客户端运行Java和Swing,客户端知道一个按钮是什么,能够实现那个按钮的功能。客户端也知道外壳,等等,我们可以利用客户端能够处理所有信息。

    Domenig强调了在具有一个大型的支持数据模型的Jtable上下文里,服务器端编程模块所带来的好处,你可以在服务器上实例化一次,然后在ULC里的内嵌逻辑就会负责加载数据,客户端的缓存,以及在客户端和服务器端的同步状态。

    在客户端和服务器端,你拥有每个Session的状态,这个模型并不是完全无状态的,与一个纯无状态基于HTML的解决方案相比,在服务器端你有一个小的存储。同时,你不会和HTML应用一样产生很多垃圾,因为所有的这些都不会产生新的HTML文件,然后将其扔掉。除了Session,事件模型也要同步,但是仅仅高级的事件被转到在服务器上。例如鼠标跟踪事件不会被传送。

    Domenig相信ULC为在J2EE技术中投入很大的企业级提供了一个途径,很容易地将富客户性能加入到他们的应用中。那是因为即使开发者掌握了Swing API,脱离ULC的Swing不能提供管理客户端—服务器端代码分离的解决方案,使用服务器端模型的开发者并没有一个容易的途径来扩展服务器端概念,比如Session到客户端。

    如果你用Swing开发企业应用,你如何应对客户端—服务器端的代码分离呢?例如,你如何在一个Swing UI模型和支持数据的服务器端模型之间做到数据同步呢?

0
相关文章