`
yipsilon
  • 浏览: 246261 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

OSGi + XML = XML应用程序?

阅读更多

最近将N久以前的项目整理了一下,发现我很早之前搁置的项目,现在已经是时机重新启动了,它就是 XMLX 项目。

 

XMLX项目建立之初本想使用Java的一些模块特性,来动态把XML解析成应用程序,例如图形界面等。但是当时由于没有成熟的模块机制,所涉及出来的功能模块开发时非常繁琐,直接导致入门门槛很高(主要是因为是自己设计的API,文档没有及时跟上),于是乎,就被搁置了。

 

如今,OSGi技术已经成熟了,使用OSGi作为XMLX的模块平台,可以说是极爽的一件事情。

 

对于我的想法,可以从下面的代码中展示出来:

<?xml version="1.0" encoding="utf-8"?>
<!-- com.cmspad.xmla.swt 为支持SWT核心部件标记的Bundle -->
<!-- com.cmspad.xmla.swt.layout 为支持SWT布局部件标记的Bundle -->
<!-- com.cmspad.osgi 为系统核心功能标记,提供各种有用的功能 -->
<Shell xmlns="com.cmspad.xmla.swt:(1.0.0,2.0.0]" xmlns:t="com.cmspad.osgi" xmlns:l="com.cmspad.xmla.swt.layout:1.0.0"
  t:id="hello" 
  text="Hello World" 
  style="DIALOG_TRIM,MAX,MIN" 
  size="300,200"
  l:layout="grid"
  l:numColumns="3"
  defaultButton="aButton">
<button text="Button 1"/>
<button text="Button 2"/>
<button t:id="aButton" text="Button 3" l:horizontalAlignment="FILL" l:grabExcessHorizontalSpace="yes"/>
<button text="Button 4"/>
<button>Button 5</button>
<button text="Button 6" l:horizontalAlignment="FILL" l:grabExcessHorizontalSpace="yes"/>
</Shell>

 以上的代码,用过SWT的同学应该不难理解。XML与OSGi结合之处,就是通过XML的命名空间,来区分不同Bundles的功能。 看看效果图吧:

 

这样,我们只要在开发相应的Bundles,就可以实现各种应用,当然,在这过程中还需要有一个API规范来指导开发。

 

这只是一个想法,距离完整实现还有一段时间,大家可以发表一下自己的想法和建议~~

  • 大小: 5.5 KB
分享到:
评论
29 楼 pufan 2009-09-24  
鱼言风语 写道
carydeepbreathing 写道
鱼言风语 写道
carydeepbreathing 写道
看不下去了。。。你们这些人不要来侮辱OSGI。。。



OSGI只是实现了部分.net framework已经实现的功能


我想请教你 osgi 跟 .net framework 有什么关系


哎 我连osgi是什么都不懂了。。。。。。。。



.net framework = jdk + osgi


你也不怕闪掉了牙,你查查Java什么时候出来的,OSGI又是什么出来的,.net除了抄袭还会什么?
这里是 Java编程和Java企业应用版,你该回哪回哪里去吧。
28 楼 pufan 2009-09-24  
to lz:

不建议将UI生成与OSGI相关联,原因很简单,不够专注。你既无法与专注UI生成的JFormDesginer、Netbeans等等竞争,也将在OSGI模块化、可插拔化上丧失太多。

如果实在要做,我建议你分成两个无关的独立框架来设计:

1)一个专注于UI生成,可以用XML描述,但必须生成JAVA code(因为以个人的经验看大部分UI生成的代码都需程序员手工修改,这样做也更灵活)。框架设计前功能建议参考一下竞争对手,如果你认为没能力比他们做的好那还是放弃吧(出于兴趣练手除外)。
2)一个专注于基于OSGI的Swing插件应用快速程序开发(也可以包括SWT等其他实现方式)。OSGI热插拔特性我认为在桌面应用中极为重要,新插件插入,非Core插件的更新,这些都可以做到不重启应用。基于OSGI的框架设计不应仅仅包括UI机制(不是UI生成,可以为View生命周期管理、docking支持等等其他特性),Plugin机制、Resource机制、Event机制、I18N机制、异常处理机制、数据库机制、皮肤机制等等也是必不可少的。另外如果要支持企业级的CS架构开发,Net访问机制(包括数据的推与拉,还要考虑穿越防火墙)、插件自动下载与升级机制、权限机制、缓存机制甚至离线浏览机制也要必须提供。

目前框架2的swing开源实现比较少,个人认为还是可以一做的。
27 楼 鱼言风语 2009-09-24  
carydeepbreathing 写道
鱼言风语 写道
carydeepbreathing 写道
看不下去了。。。你们这些人不要来侮辱OSGI。。。



OSGI只是实现了部分.net framework已经实现的功能


我想请教你 osgi 跟 .net framework 有什么关系


哎 我连osgi是什么都不懂了。。。。。。。。



.net framework = jdk + osgi
26 楼 yipsilon 2009-09-24  
<p> </p>
<div class="quote_title">carydeepbreathi 写道</div>
<div class="quote_div">运用XML 配置 后 OSGI 还能热插热拨吗? <br><br>OSGI是模块化开发最重要是理清bundle引用依赖关系 ,bundle关系理顺了模块功能找分清楚了才能事半功倍,in mind bunlde 就是一个服务 应该是自包含 可描述的 <br><br>为什么要跟XML扯上关系 ,我讨厌动不动就拿XML搞事 本来基于XML 的java 配置已经多的让人无所事从了。。</div>
<p> </p>
<p>真正能做到热插拔的是在Service Layer,这个在我之前的博客中已经讲到了,Core Layer 是做不了的,如果真能做的话,Eclipse每次安装新的插件也就不用重启了。</p>
<p> </p>
<p>本文的XML,是充分利用了OSGi的插件加载机制,通过namespace与bundles进行关联。个人感觉真是个比较好玩儿的事情... 呵呵</p>
<p> </p>
<p> <span style="font-weight: bold;">solonote 写道</span></p>
<div class="quote_div">可能我没写清楚,我的意思其实就是开发效率,一个程序不单只有界面,Java在描述业务逻辑方面要比HTML强,也要比javascript强. <br><br>我认为Flex,WPF的价值并不是在新手也可以轻松使用上,而主要是在重用UI组件,和UI组件的组织上. <br>如果你需要定制特殊组件,那么你还是得用低层API去写代码(很可惜,浏览器规范就没有提供2D的API),在这一点上结构性的标记语言帮不了你什么忙. </div>
 
<p>至于开发效率呢:</p>
<p> </p>
<p>1. 如果只是写一些很常用的软件界面,是写几行XML代码(新建个xml文件,打开文本编辑器(如notepad),然后写代码)快还是写Java代码(打开IDE创建个Java项目,新建个Java类,然后写代码编译最后运行出来)快呢?结果很明显,至于像调试问题,完全取决于未来实现的解释器的支持程度,跟XML本身没什么关系。</p>
<p> </p>
<p>2. 如果需要写比较复杂的界面,我倒是希望未来能做出来个可视化设计器,就像现在Java的一些设计器一样,只不过生成出来的是XML代码,我想开发这东西应该比生成Java代码要容易吧。</p>
<p> </p>
<p>我认为如果插件中实现的常用功能能解决80%的需求就足够了,就像HTML一样,它本身也只是有那么几个常用组件而已,对于复杂的UI组件,HTML使用的是CSS/JavaScript扩展,而理想中的XML应用程序,还可以像你说的用底层API去写代码进行扩展,当然业务逻辑也可以这样(大部分时候的原因是考虑到其保密性)。</p>
<p> </p>
<p>我个人认为XML应用程序是双击本地运行的,而不是在浏览器上运行。</p>
<p> </p>
25 楼 carydeepbreathing 2009-09-24  
鱼言风语 写道
carydeepbreathing 写道
看不下去了。。。你们这些人不要来侮辱OSGI。。。



OSGI只是实现了部分.net framework已经实现的功能


我想请教你 osgi 跟 .net framework 有什么关系


哎 我连osgi是什么都不懂了。。。。。。。。
24 楼 鱼言风语 2009-09-24  
carydeepbreathing 写道
看不下去了。。。你们这些人不要来侮辱OSGI。。。



OSGI只是实现了部分.net framework已经实现的功能
23 楼 stxu1987 2009-09-24  
想法到挺独特
22 楼 solonote 2009-09-24  
yipsilon 写道

我看重的是易用性,最好刚入门的人们都可以使用它。因为只要是自己写出来的程序,运行起来哪怕再慢,自己也是可以忍受的,不是么?呵呵。

可能我没写清楚,我的意思其实就是开发效率,一个程序不单只有界面,Java在描述业务逻辑方面要比HTML强,也要比javascript强.

我认为Flex,WPF的价值并不是在新手也可以轻松使用上,而主要是在重用UI组件,和UI组件的组织上.
如果你需要定制特殊组件,那么你还是得用低层API去写代码(很可惜,浏览器规范就没有提供2D的API),在这一点上结构性的标记语言帮不了你什么忙.
yipsilon 写道
我看重的是易用性,最好刚入门的人们都可以使用它

不需要这样的框架,IDE也提供一些可视化编辑(VE),这些工具对于新手或者组件定制化要求不高的人来说,已经足够了.
21 楼 carydeepbreathing 2009-09-24  
看不下去了。。。你们这些人不要来侮辱OSGI。。。
20 楼 carydeepbreathing 2009-09-24  
OSGI 与XML 关联还是OSGI 吗?

运用XML 配置 后 OSGI 还能热插热拨吗?

OSGI是模块化开发最重要是理清bundle引用依赖关系 ,bundle关系理顺了模块功能找分清楚了才能事半功倍,in mind bunlde 就是一个服务 应该是自包含 可描述的

为什么要跟XML扯上关系 ,我讨厌动不动就拿XML搞事 本来基于XML 的java 配置已经多的让人无所事从了。。

还有人说OSGI 不能调试 ,我想问这些人有没有真的去动手试下OSIG 啊。。

19 楼 yipsilon 2009-09-23  
solonote 写道
Java本身不适合描述UI,用XML或者HTML确实是更好的,但是只用Javascript和Html写程序,效率会有多高?
Java在描述模型和逻辑方面要比Javascript强.
各有各的用途,混合使用才是王道,把"不需要Java语言就可以写Java程序"作为目标能有多少效率的提高?

楼主的想法,我的理解也就是做Flex,WPF这样的框架而已.

做桌面应用程序,不需要太高效率吧?

我看重的是易用性,最好刚入门的人们都可以使用它。因为只要是自己写出来的程序,运行起来哪怕再慢,自己也是可以忍受的,不是么?呵呵。
18 楼 solonote 2009-09-23  
Java本身不适合描述UI,用XML或者HTML确实是更好的,但是只用Javascript和Html写程序,效率会有多高?
Java在描述模型和逻辑方面要比Javascript强.
各有各的用途,混合使用才是王道,把"不需要Java语言就可以写Java程序"作为目标能有多少效率的提高?

楼主的想法,我的理解也就是做Flex,WPF这样的框架而已.
17 楼 caiceclb 2009-09-23  
flex?!
16 楼 ywlqi 2009-09-23  
<p>第一眼看到XML代码让我想起jasperreport..</p>
<p>不过要想让会HTML的人会写程序。。。。</p>
15 楼 wxq594808632 2009-09-23  
lcllcl987 写道
依稀记得有一个XUL和swt结合的东东。
http://www.iteye.com/topic/14494
仔细一看, 原来就是兄台的作品。


这头像你都敢用..不怕市和谐局的
14 楼 lcllcl987 2009-09-23  
依稀记得有一个XUL和swt结合的东东。
http://www.iteye.com/topic/14494
仔细一看, 原来就是兄台的作品。
13 楼 wuyunlong 2009-09-22  
楼主是xwt子项目的开发Leader?
12 楼 yipsilon 2009-09-22  
<div class="quote_title">imlsq 写道</div>
<div class="quote_div">呵呵,LZ想法很好,但是要完成这样的事情,工作量非常大。<br><br>adobe的MX xml界面定义语言就是这样的思路<br><br>不过和OSGI好像没有太多关系吧!</div>
<p> </p>
<p><span style="font-family: monospace; white-space: pre-wrap;">flex的mxml跟本想法有个不同的地方,就是mxml的xmlns定义的是包名,就像是显式导入包:</span></p>
<p> </p>
<pre name="code" class="xml">&lt;!-- 相当于导入包 import com.adobe.sample.* --&gt;
&lt;component xmlns:t="com.adobe.sample.*"&gt;
  &lt;!-- 相当于调用 com.adobe.sample.Test 类 --&gt;
  &lt;t:Test id="hello"/&gt;
&lt;/component&gt;</pre>
<p>而当前想法是通过xmlns定义来区分不同bundle之间的调用:<br></p>
<p>
</p>
<pre name="code" class="xml">&lt;!-- 相当于对解释器说,要使用 SymbolicName 为 com.cmspad.osgi.sample 且版本在 1.0.0 及以上的 Bundle --&gt;
&lt;component xmlns:t="com.cmspad.osgi.sample:1.0.0"&gt;
  &lt;!-- 使用以上的bundle对标记进行处理 --&gt;
  &lt;t:Test id="hello" /&gt;
&lt;/component&gt;</pre>
 
<p>很明显,前者如果出现包名相同且类名相同时,是无法进行判断的到底使用哪个类的,而OSGi技术拥有版本冲突管理机制,可以根据指定的版本范围搜索最合适的bundle进行调用。</p>
<p> </p>
<p>我个人认为这个想法最起码可以实现是需要会HTML和JavaScript就可以写出应用程序,而不仅仅是网页(前提是HTML插件已经开发好了:))。</p>
11 楼 imlsq 2009-09-22  
呵呵,LZ想法很好,但是要完成这样的事情,工作量非常大。

adobe的MX xml界面定义语言就是这样的思路

不过和OSGI好像没有太多关系吧!
10 楼 鱼言风语 2009-09-22  
yipsilon 写道
鱼言风语 写道
你这个项目不就是用来做UI的吗?现在都提倡UI与逻辑分离,你要把这2者榜定在一起?

逻辑是什么呢?就是控制事件和事务处理?这些都可以在插件中做以达到UI与逻辑分离呀,而XML作为UI部分仅仅是调用插件的功能和进行一些简单互动而已,不是么?

关于嵌入代码问题,曾经的 XMLX 前身 SWT-XUI 就支持JavaScript、BeanShell、Groovy等嵌入式脚本,这个实现起来是没有问题。

至于调试问题,我觉得应该跟网页调试差不多了,加入使用javascript做脚本引擎,一旦脚本有问题了,rhino也会抛出各种错误。当然,如果这项目实现出来了,也会把错误定位这块儿给尽力做出来的。



明白了,那么如果我没理解错的话,你要做的就像一个浏览器,对吗?

相关推荐

    OSGi+SpringMVC+Spring+Hibernate企业应用框架

    辛苦研究了一个多月,终于搭建成了一个可用于实际应用开发的OSGI-WEB框架,采用OSGi+SpringMVC+Spring+Hibernate+Virgo技术,鉴于此类技术架构甚少,特提供出来供大家参考。 使用步骤: 一、下载STS搭建Osgi开发...

    OSGI + Webservice 例子

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和可扩展的Java应用程序。它提供了一种灵活的框架,允许开发人员将应用程序分解为独立的模块,这些模块称为服务。OSGI的核心是它的模块系统...

    OSGi 入门+进阶+实战

    OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和可管理的Java应用程序。它的核心特性是基于服务的架构,允许动态发现、安装、卸载和升级软件组件,从而提高了灵活性和可维护性。OSGi技术...

    基于OSGi和Spring开发Web应用.doc

    9. Web 应用 bundle:Web 应用 bundle 是一个基于 OSGi 和 Spring 的 Web 应用程序,能够提供更加强大的灵活性和可靠性。 本文通过一个简单实例,介绍了如何利用 Spring-DM 开发基于 OSGi 和 Spring 架构的 Web ...

    【BluePrint】使用 Blueprint Container 规范构建 OSGi 应用程序

    在IT行业中,OSGi(Open Services Gateway Initiative)是一种模块化软件开发框架,它允许开发者将应用程序分解为独立的、可重用的组件,称为服务。这些组件可以动态地安装、卸载和升级,无需重启应用服务器。...

    基于OSGi和Spring开发Web应用教程

    在基于OSGi和Spring开发Web应用中,OSGi(Open Services Gateway Initiative)是一个开放标准,用于创建模块化Java应用程序。它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle都包含自己的类路径、...

    OSGI实战+进阶

    OSGI的核心概念是服务和模块化,它的出现解决了Java应用程序的复杂性问题,使得组件之间的依赖关系更加清晰,同时也支持动态部署和更新。 在"OSGI实战"中,你将学习到如何使用OSGI来开发模块化的Java应用。实战部分...

    基于OSGi和Spring开发Web应用

    Spring-DM,即Spring Dynamic Modules,是Spring官方在2008年推出的项目,旨在将Spring框架与OSGi模块化平台相结合,为Java开发者提供了一套全面的工具和API,以支持在OSGi环境中开发、部署和管理Spring应用程序。...

    OSGI应用程序

    OSGI(Open Services Gateway Initiative)应用程序是一种遵循OSGi规范构建的模块化软件系统。它允许开发者将应用程序拆分成独立的、可热插拔的模块,称为服务或bundle。Eclipse Equinox是OSGI联盟规范的一个实现,...

    osgi 插件开发

    3. **编写模块化代码**:使用OSGi API开发模块化的应用程序,并利用容器提供的服务进行交互。 4. **测试与部署**:在容器中部署和测试应用程序,确保所有模块能够正确工作。 #### 结语 随着技术的不断进步和发展,...

    基于OSGi和Spring开发企业级Web应用

    - **OSGi**:作为一种模块化平台,OSGi允许应用程序被分解成小型、独立的服务组件(称为bundles)。这些组件可以在运行时动态安装、更新或卸载,大大提高了系统的灵活性和可维护性。此外,OSGi通过其强大的服务注册...

    OSGI应用中整合Spring、Mybatis、Spring MVC案例

    Spring MVC是Spring框架的一部分,用于构建Web应用程序。在OSGI环境中集成Spring MVC,我们需要处理Servlet的生命周期和路由问题。通常,我们需要一个OSGI兼容的Servlet容器,如Pax Web,来托管Spring MVC的应用。...

    osgi学习笔记(一)

    本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和灵活的Java应用程序。 首先,我们需要了解OSGi的核心概念——模块化。在OSGi中,每个Java应用程序被划分为独立的模块,称为“bundle”。这些bundle...

    spring osgi 入门

    Spring Dynamic Modules (Spring DM) 是Spring Framework的一个扩展项目,它使得Spring可以在OSGi环境中运行,进而为开发者提供了模块化的应用程序开发能力。通过将Spring与OSGi相结合,开发者能够享受到以下优势: ...

    基于osgi整合ssm框架注解开发

    SSM(Spring、SpringMVC、MyBatis)框架是Java Web开发中常见的技术栈,而OSGi(Open Service Gateway Initiative)则是一种模块化系统,主要用于解决Java应用程序的动态性、可扩展性和版本管理问题。将SSM框架与...

    MQTT测试工具-paho+for+eclipse

    在"MQTT测试工具-paho+for+eclipse"这个场景中,Paho被用作一个客户端工具,集成在Eclipse环境中,便于开发者测试和调试MQTT应用程序。 首先,`paho.exe`是Eclipse Paho MQTT C/C++客户端的可执行文件,它可以独立...

    osgi-tutorial.zip

    与Spring框架的XML配置类似,Blueprint使得我们在OSGi环境中能够以声明式方式管理我们的应用程序组件。 接下来,我们将Spring框架与OSGi结合。Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力著称,...

    开发一个简单的 OSGi Web 应用实例

    **背景:** OSGi (Open Service Gateway Initiative) 是一种模块化容器,它允许Java应用程序以模块化的形式组织起来,每个模块被称为一个“bundle”。OSGi不仅支持模块化编程,还支持热部署和动态配置等功能,非常...

    osgi 在web容器中部署

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发人员将应用程序分解为一组可独立更新和管理的小型服务。在Web容器中部署OSGi应用,特别是像Tomcat这样的流行Servlet容器,可以提高应用的...

Global site tag (gtag.js) - Google Analytics