RichClient: XUL 系技术介绍 (XAML/JDNC/Flex/...)

博客推荐了javaeye论坛上对XUL系技术的分析讨论,介绍了XUL核心思想及衍生技术运作方式,如Thinlet、XAML、Flex等。预测了各技术竞争力,还探讨了下一个界面技术对开发的影响,指出UI层和业务层将进一步分离,更多服务器端开发将出现。

推荐javaeye论坛上一贴,对XUL 系技术非常不错的分析和讨论.

详见:
http://forum.iteye.com/viewtopic.php?t=8655&postdays=0&postorder=asc&start=0

桶子们在热烈的讨论 UI 技术,这是好事啊。

俺来添加,鉴于大家对 XUL 系列不是特别了解,我就谈谈这些技术的运作方式。

观点:目前的 MozillaXUL/Thinlet/SwiXML/JDNC/XAML/Flex/Laszlo... 在我看来,都是一个套路。

先别急,且听俺慢慢说来。

XUL 的核心思想是“用XML来表达界面”,是 Mozilla 的创新, Mozilla 浏览器本身就是一个经典的 XUL 应用。有兴趣的可以研究 Mozilla\Chrome\Browser.jar 中的东西。这的确是个伟大的发明,以至于,现在其他公司纷纷效仿,出现了N个衍生技术。

Mozilla 的内部,有一个 XRE ,即 XUL Runtime Environment,这个 XRE 解析运行所有的 XUL 应用,包括:Browser本身和各种工具,如 LiveHttpHeader, XUL Console 等等。一个 XUL 文件被 Parser 解析,将其中引用的 Widgets 组装,通过 Render 显示给用户,当发生事件时,通过 ScriptEngine 执行相应事件的脚本代码。可惜的是, Mozilla 的这个宝贝似乎“养在深闺人未识”,罕见有哪个项目使用的。但它的思想,衍生出了N多的技术。


Thinlet/SwiXML/JDNC: Java 的 XRE。以 Applet/Swing 来 Render 界面,发生事件时,调用用户自己的事件处理程序(java 程序)。

XAML: Longhorn 内置 Native 的 XRE。以 Windows 的界面组件来 Render 界面,发生事件时,调用用户自己的事件处理程序(.NET 的程序)。

Flex/Laszlo: 基于 Swf 的 XRE。先由 Java 的 Interpreter 将 MXML/LZX 源文件生成为 Swf 文件,该 Swf 可能包含界面构造信息(XUL?)、事件脚本(转换为ActionScript)和经过裁减的WidgetsLib(XUL中用到的widgets)。用 Flash 的界面组件来 Render 界面,发生事件时,调用用户的事件处理程序(用户的代码转换成的ActionScript程序)。


大胆预测一下:

这些技术中,最具竞争力的是 Longhorn/XAML ,它具备平台底层的支持(OS内置),可以想象性能和能力都要比其他要出色。但,这也是弱点,如果没有一个合理可靠的安全机制做保证,它也有可能因为安全问题而败北。

Thinlet/SwiXML已是成熟技术,它们将在各自领域继续发挥作用,但,Sun 目前正在立推 JDNC ,预计这两个产品将不会有更大的作为。而 Sun 的 JDNC 是很有野心的计划,在非 Windows 平台它将可能是唯一的通用标准(如果MozillaXUL的推广仍无起色)。但在 XAML 蓄势待发的情形下,它有可能和目前的 Applet/Swing 一样,处于劣势。

Flex/Laszlo在浏览器领域肯定会占据一席之地,因为它们目前已经比较成熟。而,彼此的竞争会带来更大的利益。Laszlo 现在已经是 OpenSource 的了,走 CPL 协议。Flex 也被迫推出了非商业客户的免费计划。如果 Flex/Laszlo 在 XAML 推出之前能有 Killer 级的应用,可能会形成事实上的 RCP 标准从而取得优势也未可知。


那么,下一个界面技术对我们的开发有什么影响呢?或者,那时的应用会是怎样的?

以 XAML 为例,应用的客户端可能就是一个 XAML 的文件。这个文件可以象现在 JavaWebStart 的 JNLP 一样,从网上下载,本地缓存。运行时,XAML 被运行环境打开,如果需要,Client 从远端的 WebService 上获取功能支持。这意味着基于 XAML 的 Web 应用可以完全脱离浏览器,但仍具备 Web 技术的优势。不依赖于浏览器的界面将有更丰富的表示形式。而 JDNC 如果和 JavaWebStart 结合,则意味着 Java 标准的 RCP 平台(不过几乎可以肯定性能会不如 M$),对于非 Windows 平台意义重大。

可以看到,关键业务逻辑被集中于服务器。依据 SUN 和 M$ 的和解协议,以 webservice/xml 方式提供的服务将具备互操作性(不排除 M$ 违反协议推独立标准的可能)。也就是说,只要遵循 WebService 的标准,任何一种 Client UI 技术都将被支持。对我们而言,这意味着 UI 层和 Business 层的进一步分离。也就是更多的服务器端开发(WithOut HTML)。

获取:1122 http://mirrors.aliyun.com/ubuntu focal/main amd64 libiw30 amd64 30~pre9-13ubuntu1 [17.4 kB] 获取:1123 http://mirrors.aliyun.com/ubuntu focal/main amd64 wireless-tools amd64 30~pre9-13ubuntu1 [108 kB] 获取:1124 http://mirrors.aliyun.com/ubuntu focal/main amd64 xdg-user-dirs-gtk amd64 0.10-3 [10.7 kB] 获取:1125 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 xserver-xorg-core amd64 2:1.20.13-1ubuntu1~20.04.20 [1,342 kB] 获取:1126 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-input-libinput amd64 0.29.0-1 [33.7 kB] 获取:1127 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-input-all amd64 1:7.7+19ubuntu14 [4,016 B] 获取:1128 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-input-wacom amd64 1:0.39.0-0ubuntu1 [91.4 kB] 获取:1129 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg amd64 1:7.7+19ubuntu14 [65.2 kB] 获取:1130 http://mirrors.aliyun.com/ubuntu focal/main amd64 libglu1-mesa amd64 9.0.1-1build1 [168 kB] 获取:1131 http://mirrors.aliyun.com/ubuntu focal/main amd64 xfonts-encodings all 1:1.0.5-0ubuntu1 [573 kB] 获取:1132 http://mirrors.aliyun.com/ubuntu focal/main amd64 xfonts-utils amd64 1:7.7+6 [91.5 kB] 获取:1133 http://mirrors.aliyun.com/ubuntu focal/main amd64 xfonts-base all 1:1.0.5 [5,896 kB] 获取:1134 http://mirrors.aliyun.com/ubuntu focal/main amd64 x11-apps amd64 7.7+8 [657 kB] 获取:1135 http://mirrors.aliyun.com/ubuntu focal/main amd64 x11-session-utils amd64 7.7+4 [69.3 kB] 获取:1136 http://mirrors.aliyun.com/ubuntu focal/main amd64 x11-utils amd64 7.7+5 [199 kB] 获取:1137 http://mirrors.aliyun.com/ubuntu focal/main amd64 xinit amd64 1.4.1-0ubuntu2 [17.9 kB] 获取:1138 http://mirrors.aliyun.com/ubuntu focal/main amd64 xorg-docs-core all 1:1.7.1-1.1 [41.8 kB] 获取:1139 http://mirrors.aliyun.com/ubuntu focal/main amd64 xinput amd64 1.6.3-1 [27.8 kB] 获取:1140 http://mirrors.aliyun.com/ubuntu focal/main amd64 xorg amd64 1:7.7+19ubuntu14 [3,072 B] 获取:1141 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 ubuntu-desktop-minimal amd64 1.450.2 [3,636 B] 获取:1142 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 ubuntu-desktop amd64 1.450.2 [2,848 B] 获取:1143 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 ubuntu-report amd64 1.6.1ubuntu0.1 [2,374 kB] 获取:1144 http://mirrors.aliyun.com/ubuntu focal/main amd64 usb-creator-common amd64 0.3.7 [13.9 kB] 获取:1145 http://mirrors.aliyun.com/ubuntu focal/main amd64 usb-creator-gtk amd64 0.3.7 [21.4 kB] 获取:1146 http://mirrors.aliyun.com/ubuntu focal/main amd64 usbmuxd amd64 1.1.1~git20191130.9af2b12-1 [38.4 kB] 获取:1147 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 vino amd64 3.22.0-5ubuntu2.2 [126 kB] 获取:1148 http://mirrors.aliyun.com/ubuntu focal/main amd64 wamerican all 2018.04.16-1 [210 kB] 获取:1149 http://mirrors.aliyun.com/ubuntu focal/main amd64 xbitmaps all 1.1.1-2 [28.1 kB] 获取:1150 http://mirrors.aliyun.com/ubuntu focal/main amd64 xcursor-themes all 1.0.6-0ubuntu1 [319 kB] 获取:1151 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 xdg-desktop-portal-gtk amd64 1.6.0-1ubuntu1 [148 kB] 获取:1152 http://mirrors.aliyun.com/ubuntu focal/main amd64 xfonts-scalable all 1:1.0.3-1.1 [304 kB] 获取:1153 http://mirrors.aliyun.com/ubuntu focal/main amd64 libxcb-icccm4 amd64 0.4.1-1.1 [10.8 kB] 获取:1154 http://mirrors.aliyun.com/ubuntu focal/main amd64 libxcb-image0 amd64 0.4.0-1build1 [12.3 kB] 获取:1155 http://mirrors.aliyun.com/ubuntu focal/main amd64 libxcb-keysyms1 amd64 0.4.0-1build1 [8,452 B] 获取:1156 http://mirrors.aliyun.com/ubuntu focal/main amd64 libxcb-render-util0 amd64 0.3.9-1build1 [9,912 B] 获取:1157 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 xserver-xephyr amd64 2:1.20.13-1ubuntu1~20.04.20 [917 kB] 获取:1158 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 xserver-xorg-video-amdgpu amd64 19.1.0-1ubuntu0.1 [68.5 kB] 获取:1159 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-radeon amd64 1:19.1.0-1 [153 kB] 获取:1160 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-ati amd64 1:19.1.0-1 [7,112 B] 获取:1161 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-fbdev amd64 1:0.5.0-1ubuntu1 [12.2 kB] 获取:1162 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-nouveau amd64 1:1.0.16-1 [89.4 kB] 获取:1163 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-vesa amd64 1:2.4.0-2 [15.0 kB] 获取:1164 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-vmware amd64 1:13.3.0-3 [73.6 kB] 获取:1165 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-all amd64 1:7.7+19ubuntu14 [4,068 B] 获取:1166 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-intel amd64 2:2.99.917+git20200226-1 [737 kB] 获取:1167 http://mirrors.aliyun.com/ubuntu focal/main amd64 xserver-xorg-video-qxl amd64 0.1.5+git20200331-1 [83.1 kB] 获取:1168 http://mirrors.aliyun.com/ubuntu focal/main amd64 xul-ext-ubufox all 3.4-0ubuntu1.17.10.1 [3,320 B] 获取:1169 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 yaru-theme-gtk all 20.04.11.1 [334 kB] 获取:1170 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 yaru-theme-icon all 20.04.11.1 [13.8 MB] 获取:1171 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 yaru-theme-sound all 20.04.11.1 [411 kB] 获取:1172 http://mirrors.aliyun.com/ubuntu focal/main amd64 brltty amd64 6.0+dfsg-4ubuntu6 [1,164 kB] 获取:1173 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 cups-bsd amd64 2.3.1-9ubuntu1.9 [35.5 kB] 获取:1174 http://mirrors.aliyun.com/ubuntu focal/main amd64 cups-pk-helper amd64 0.2.6-1ubuntu3 [52.1 kB] 获取:1175 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 fprintd amd64 1.90.9-1~ubuntu20.04.1 [80.8 kB] 获取:1176 http://mirrors.aliyun.com/ubuntu focal/main amd64 ippusbxd amd64 1.34-2ubuntu1 [36.0 kB] 获取:1177 http://mirrors.aliyun.com/ubuntu focal/main amd64 libauthen-sasl-perl all 2.1600-1 [48.7 kB] 获取:1178 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 libc6-dbg amd64 2.31-0ubuntu9.18 [20.2 MB] 获取:1179 http://mirrors.aliyun.com/ubuntu focal/main amd64 libcanberra-gtk3-module amd64 0.30-7ubuntu1 [10.1 kB] 获取:1180 http://mirrors.aliyun.com/ubuntu focal/main amd64 liblouisutdml-bin amd64 2.8.0-3 [9,732 B] 获取:1181 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libpam-fprintd amd64 1.90.9-1~ubuntu20.04.1 [13.2 kB] 获取:1182 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 libreoffice-pdfimport all 1:6.4.7-0ubuntu0.20.04.15 [6,336 B] 获取:1183 http://mirrors.aliyun.com/ubuntu focal/main amd64 librygel-core-2.6-2 amd64 0.38.3-1ubuntu1 [99.8 kB] 获取:1184 http://mirrors.aliyun.com/ubuntu focal/main amd64 librygel-db-2.6-2 amd64 0.38.3-1ubuntu1 [22.0 kB] 获取:1185 http://mirrors.aliyun.com/ubuntu focal/main amd64 librygel-renderer-2.6-2 amd64 0.38.3-1ubuntu1 [46.5 kB] 获取:1186 http://mirrors.aliyun.com/ubuntu focal/main amd64 librygel-server-2.6-2 amd64 0.38.3-1ubuntu1 [185 kB] 获取:1187 http://mirrors.aliyun.com/ubuntu focal/main amd64 libsbc1 amd64 1.4-1 [31.9 kB] 获取:1188 http://mirrors.aliyun.com/ubuntu focal/main amd64 mobile-broadband-provider-info all 20190618-3 [61.9 kB] 获取:1189 http://mirrors.aliyun.com/ubuntu focal-proposed/main amd64 pulseaudio-module-bluetooth amd64 1:13.99.1-1ubuntu3.14 [60.4 kB] 获取:1190 http://mirrors.aliyun.com/ubuntu focal/main amd64 rygel amd64 0.38.3-1ubuntu1 [299 kB] 获取:1191 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 shotwell amd64 0.30.10-0ubuntu0.1 [1,796 kB] 获取:1192 http://mirrors.aliyun.com/ubuntu focal/main amd64 usb-modeswitch-data all 20191128-3 [32.3 kB] 获取:1193 http://mirrors.aliyun.com/ubuntu focal/main amd64 usb-modeswitch amd64 2.5.2+repack0-2ubuntu3 [53.1 kB] 获取:1194 http://mirrors.aliyun.com/ubuntu focal/main amd64 xbrlapi amd64 6.0+dfsg-4ubuntu6 [63.8 kB] 获取:1195 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 xserver-xorg-legacy amd64 2:1.20.13-1ubuntu1~20.04.20 [33.7 kB] 已下载 655 MB,耗时 1分 33秒 (7,021 kB/s) E: 无法下载 http://mirrors.aliyun.com/ubuntu/pool/main/libw/libwpg/libwpg-0.3-3_0.3.3-1build1_amd64.deb Undetermined Error [IP: 222.192.187.176 80] E: 有几个软件包无法下载,要不运行 apt-get update 或者加上 --fix-missing 的选项再试试? (base) root@79d153e3ced3:/#
最新发布
11-14
2025/07/31 17:03:30 - 执行SQL脚本.0 - ERROR (version 9.4.0.0-343, build 0.0 from 2022-11-08 07.50.27 by buildguy) : 错误初始化步骤[执行SQL脚本] 2025/07/31 17:03:30 - 执行SQL脚本.0 - ERROR (version 9.4.0.0-343, build 0.0 from 2022-11-08 07.50.27 by buildguy) : java.lang.NoSuchMethodError: com.ctc.wstx.io.StreamBootstrapper.getInstance(Ljava/lang/String;Lcom/ctc/wstx/io/SystemId;Ljava/io/InputStream;)Lcom/ctc/wstx/io/StreamBootstrapper; 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.parse(Configuration.java:3079) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.parse(Configuration.java:3062) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.getStreamReader(Configuration.java:3158) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:3116) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:3089) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.loadProps(Configuration.java:2967) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2949) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.get(Configuration.java:1267) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.getTrimmed(Configuration.java:1321) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.conf.Configuration.getInt(Configuration.java:1547) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.fs.FileSystem$Cache.<init>(FileSystem.java:3658) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.fs.FileSystem.<clinit>(FileSystem.java:205) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.hive.conf.valcoersion.JavaIOTmpdirVariableCoercion.<clinit>(JavaIOTmpdirVariableCoercion.java:37) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.hive.conf.SystemVariables.<clinit>(SystemVariables.java:37) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.hive.conf.HiveConf$ConfVars.<init>(HiveConf.java:5830) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.hive.conf.HiveConf$ConfVars.<init>(HiveConf.java:5811) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hadoop.hive.conf.HiveConf$ConfVars.<clinit>(HiveConf.java:484) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hive.jdbc.Utils$JdbcConnectionParams.<clinit>(Utils.java:220) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hive.jdbc.Utils.extractURLComponents(Utils.java:464) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hive.jdbc.Utils.parseURL(Utils.java:445) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:296) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:284) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:94) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at java.sql.DriverManager.getConnection(DriverManager.java:664) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at java.sql.DriverManager.getConnection(DriverManager.java:208) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.pentaho.di.core.database.Database.connectUsingClass(Database.java:589) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.pentaho.di.core.database.Database.normalConnect(Database.java:481) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.pentaho.di.core.database.Database.connect(Database.java:389) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.pentaho.di.core.database.Database.connect(Database.java:360) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.pentaho.di.trans.steps.sql.ExecSQL.init(ExecSQL.java:297) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at org.pentaho.di.trans.step.StepInitThread.run(StepInitThread.java:69) 2025/07/31 17:03:30 - 执行SQL脚本.0 - at java.lang.Thread.run(Thread.java:748) 2025/07/31 17:03:30 - 转换 1 - ERROR (version 9.4.0.0-343, build 0.0 from 2022-11-08 07.50.27 by buildguy) : 步骤 [执行SQL脚本.0] 初始化失败! 已彻底清除旧版依赖,但我是在windows启动,用的是spoon.bat
08-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值