大梦想家

5年开发工程师,2年实施经理,X年售前顾问,......
数据加载中……

Eclipse3.3新特性体验之最大化最小化改进

    昨天晚上写了Eclipse3.3的新特性,心中异常兴奋,想快点用到现有的产品开发框架中,于是开始把玩最大化最小化的新特性。
   研究了整整一下午也没有发现有什么方法可以设置一个Viewer让它在透视图启动的时候自己做最小化,其实刚开始思路是不对的,不应该考虑让Viewer自己有什么变化;Viewer的大小,位置都是在透视图中设置的,它自己是没有任何能力干涉的。
   在Eclipse的新闻组中咨询了一下PW告诉我org.eclipse.ui.perspectiveExtensions扩展点,提供了定义Viewer最小化的属性,而且这个属性是Eclipse3.3新增的,只要有就好办~有样学样!
   拉出来PerspectiveExtension管理注册代码读读就明白了~原来:

1    public void createInitialLayout(IPageLayout layout) {
2            }
  透视图类中的IPageLayout的实现类是PageLayout,晕死,在Eclipse的API中竟然没有人告诉我~
  于是只需要这样就可以让一个Viewer在透视图启动时做最小化了,如果你用的是Eclipse3.3开发RCP程序,那么就可以非常方便的给客户在一个透视图中展现多个Viewer了~
   代码如下:
    public void createInitialLayout(IPageLayout layout) {
        PageLayout pageLayout 
= (PageLayout)layout;
        
//layout.addView(ViewPart1.class.getName(), IPageLayout.LEFT, 0.35f, layout.getEditorArea());
        pageLayout.addView(ViewPart1.class.getName(), IPageLayout.LEFT, 0.35f, layout.getEditorArea(), true);
    }
   Eclipse开发团队其实就是在IPageLayout实现类中追加了一个方法~哎~什么遵循接口编程~他们竟然不修改接口~希望正式版发布的时候这个问题有修改~

  距离Eclipse3.3正式发布还有2天~大家拭目以待吧~

posted @ 2007-06-27 23:00 阿南 阅读(3201) | 评论 (4)编辑 收藏
Eclipse3.3的新特性

    本来昨天就要写这篇Blog了,但是昨天晚上忙着赶文档,所以只能今天补上。
    离Eclipse3.3正式发布还有3天的时间,很多新特性,如果要真正的用起来,还需要静静的等待。
    Eclipse3.3加入了很多超Cool的功能,我的文章主要是针对于RCP开发做介绍的,JDT之类的新特性,大家自己体会吧!
    新特性之一:Viewer和Editor的最大化最小化效果变的很Cool;
    这个新特性,可能对开发人员来说并没有什么稀奇的,有这个和没有这个的区别不大。但是对于RCP的开发,这个是一个非常吸引客户眼球的地方,他们会瞪大眼睛看,然后自己把玩,最后要求为自己开发软件的其他软件都加入此功能。o(∩_∩)o...哈哈~~够他们忙活的了!
    新特性之二:当Editor最大化以后,其他的Viewer将以新的列表方式继续出现在界面上;
    这个功能,不好解释,看看抓图:

      很Cool吧,客户一定喜欢死了~
      新特性之三:对Forms加入了错误信息验证;
      以前的版本中,Form使没有错误验证的,现在则加入了Forms的验证,看来Form的使用可以更快的深入人心了~

      新特性之四:增强Porperties View的现实效果;

     虽然我不喜欢在项目中使用PorpertiesView(配置起来太麻烦,不适合普通开发人员使用),但是还是感谢Eclipse的开发团队此次对PorpertiesView的增强。
     新特性之五:可控制的启动画面;
     在Eclipse3.3中提供了新的扩展点org.eclipse.osgi.service.runnable.StartupMonitor,用于在启动时使用SWT的代码。
  新特性之六:高级的Tooltips;
  提供了新的扩展点:org.eclipse.jface.window.Tooltip用于创建更为高级的Tooltips;

  新特性之七:SWT增加时间日期选择器;
  :-),这个可能是大家早都知道的秘密了~真想不通,时间和日期选择器早都应该提供了,为什么到现在才拿出来!


    新特性之八:新增加2种启动界面;
Interactive: A simulated log-in session  使用一个程序登陆界面启动
Browser: An embedded HTML browser  使用一个Html作为登陆界面
Extensible: A dynamic set of image contributions 使用一张图片作为启动界面
    在新的PDE中可以对一个product选择使用那一种启动界面启动,这个新功能的增加是非常有意义的,它使得RCP应用更加的人性化,不用再在系统启动中弹出对话框了,让客户更加放心的选择基于RCP的产品了~

posted @ 2007-06-26 21:00 阿南 阅读(5281) | 评论 (18)编辑 收藏
我们是幸福的Blogger~

    因为有DUDU~所以我们一群幸福的Blogger。
    周六www.blogjava.net早上10:00准时停止服务了~,原本我以为可以安安静静的等待重新恢复,但是我错了,从昨天开始就出现了焦躁不安的情绪,总感觉这个世界此时好像少了什么东西,每次打开马桶都习惯的点击一下自己的Blog连接,但是在过去的几十个小时里~我的无法平静!
    今天一大早起来,下了一个Eclipse3.3RC4玩,发现Eclipse团队修改掉了过去的BUG,而且在Eclipse3.3里面为RCP开发提供了更好的东东~本想开Blog记录一下,但是转念一下,关了!只能等待,无聊间,继续玩我的大富翁(寻找一下炒股的快感!)一口气玩到现在。上网看看,发现Blog已经搞好了~dudu就是dudu,说话算数!随性写文一篇,纪念一下“关站2日门”~
    Eclipse3.3的新特性,待明日补上!

posted @ 2007-06-24 20:23 阿南 阅读(902) | 评论 (3)编辑 收藏
RCP实践之安全模型

     摘要:     感谢大家最近对本系列的关注和评论,我会继续完善内容,并且总结教训写出更好的东东来。    今天谈谈最近在研究的RCP安全模型,其实RCP在诞生之初就是建立在一个非常鲁棒的框架之上的---OSGi,它不但有全新的概念,全新的思路,全新的热插拔技术,还有非常好的安全模型(equinox security 项目好像还在孵化中)...  阅读全文

posted @ 2007-06-21 21:52 阿南 阅读(2062) | 评论 (5)编辑 收藏
RCP实践之第三方JAR包

    感谢大家对上一篇文章的拍砖,引起的反响不小,目的达到了~,希望可以继续板儿砖横飞!
    今天来说说第三方JAR包的引入。RCP开发(或者plugin开发)中最让人头疼就是第三方JAR包的引入了,很多初学的朋友常常头疼,介绍的文章也不少了,如果搞不定,自己google一下就可以了。
    为什么第三方JAR包会引发如此众多的问题,其实并不是Eclipse的错,而是先入为主的错。如果你一开始就就接触Eclipse开发,以后再做不同java开发,你就会觉得java的类加载机制是变态了~Eclipse的类加载机制是基于OGSI的实现,它完成了插件的独立加载和独立维护,正是因为这种变态的类加载机制,才有了我们头大的第三方jar包的问题,也正是这种伟大的类加载机制,才有了即插即用的思路的诞生。
    大多数简单的RCP项目都是将所有的JAR包放入本地项目中,然后直接进引入项目路径,就开始整了,对于小的应用,或者开发人员少的情况下,这样是可行的,也是便捷的~但是RCP的目标是大型的企业级应用,一个系统由十几个,几十个插件组成,是很正常的。所以就要求我们将RCP中所有用到的第三方JAR包统一管理,统一维护,给开发人员少一些烦恼。
    思路有两种:
1.将JAR文件plugin样子包装,及新建Plug-in from existing jar archives 项目,然后选择JAR文件,再取消Unzip the jar archives into the project 选项,然后其它的插件依赖它就可以了。
2.新建一个不同插件项目,然后把第三方JAR包放入这个项目,然后引入到此项目中,在plugin.xml的runtime配置页的Exported Packages 选Add... 再选择要发布出去的包路径,然后其他的插件依赖它就可以了。
    官方推荐的方式是第一种,个人认为第一种确实很好,可以非常好而且方便的维护第三方JAR包。但是我还是选择了第二种方式,理由是,配置文件读取的问题。
    每一个插件文件都会维护一份属于自己的配置文件,只有这样才能做到自我独立。但是这两种方式都不能使其他插件项目的配置文件独立维护,原因就是Eclipse那讨厌又强大的类加载机制。
    使用第一种方式,配置文件必须放在你记载的进来的JAR包的里面,这样Eclipse类加载机才会加载并处理,除非选择了Unzip the jar archives into the project 选项,并把配置文件和一堆的class文件放在同一目录下类加载机才能发现。我想这种方式谁都不会喜欢,要么就是我们要创造自己的JAR包,要么工作台遍布了各种各样来自世界各地的class文件。
    使用第二种方式,是通过运行时将需要发布出来供别人依赖的package发布出来,而配置文件则需要放在此插件项目中。相对而言,这种比上一种有很大的好处,而且也不是那么难维护。

    以上只是自己项目中的一些总结,关于第三方JAR包的问题,我查了很多资料,好像逃不过这三种方式(直接在项目中依赖算一种),不知道各位大侠还有没有更好的办法,即能处理好第三方JAR包,又能保持各个插件维护自己独立的配置文件?

posted @ 2007-06-20 21:43 阿南 阅读(2885) | 评论 (2)编辑 收藏
通知:大家写Blog啦~

    有事没事写Blog吧~
写Blog的N个理由:
1.测试键盘的耐久程度;
2.锻炼一下自己的语言表达能力;
3.锻炼一下自己的耐性;
4.广交朋友;
5.发表一下自己的学习成果;
6.加深自己学习的印象;
7.记录一下自己的思想;
8.想像一下自己也是技术牛人;
9.给后人一些指点;
10.让寻觅的的老板们早点发现你;
11.少干点家务;
12.放送一下自己;
13.加个广告争点小钱;

... ...
想不出来了,头都大了~

posted @ 2007-06-19 21:33 阿南 阅读(204) | 评论 (0)编辑 收藏
RCP实践之软件架构

    RCP还是新兴的东西,大家都是用它做做小东东,所以在网上讨论RCP深度应用的文章还不多。
    在此作文N篇阐述一下我在项目中的实现思路,欢迎大家拍砖。
    首先看一下我们的项目的总体架构:
 


    这个图谁都会画,就不说了,只是说明我们在用RCP而已。
    再看看Client这层是怎么组成的:
    依赖关系是自上而下的~,当然大家都需要依赖RCP-RUNNTIME本身。
    jar plugin ---将第三方jar包包装成plugin样子,以供其他的插件依赖,解决了RCP项目对第三方包依赖麻烦的问题,例子:junit插件的实现;
    DMP Platform ---DMP是我们产品的名字,所以,不要立即google,在这层我们抽象的定义出大量的公共的CoolBar以及MenuBar,都是尚未实现的,以待业务扩充之用,最重要的是在这层中我们集中处理权限问题,后面会说到;
    业务组建(plugin)---其实就是针对于DMP Platform编写的一大堆的插件,而这些插件则是业务相对独立,这样就遵守了Eclipse的原则,所有东西都以插件形式提供的,也方便了我们以后对软件的定制化开发;

    纵观国内外RCP的应用(国内本身就是很少),很少有RCP应用使用Eclipse的思想进行开发的,都是一个项目直接上~就一个UI层~什么都有!如果是这样,还不如用VC,VB更简单~
    Eclipse RCP最好的应用还是Eclipse本身,Platform仅仅提供对文件的最简单的管理能力,而且定义一堆共用的Action,其他东西(JDT,ANT,JUNIT等等)都是以插件形式出现的~只有有了插件,才有了RCP业务动态扩充的动态组合的新理念。

posted @ 2007-06-19 21:22 阿南 阅读(1930) | 评论 (7)编辑 收藏
插件开发依赖其他插件时一定要注意!

插件开发依赖其他插件时,我们要在plugin.xml的dependency 项的required plugin里面选择你要依赖的插件~然后如果你启动就会报错:

 1!SESSION 2007-06-19 14:10:03.031 -----------------------------------------------
 2eclipse.buildId=unknown
 3java.version=1.5.0_08
 4java.vendor=Sun Microsystems Inc.
 5BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=zh_CN
 6Framework arguments:  -product com.glnpu.dmp.client.platform.product
 7Command-line arguments:  -product com.glnpu.dmp.client.platform.product -data F:\DMP/../runtime-com.glnpu.dmp.client.platform.product -dev file:F:/DMP/.metadata/.plugins/org.eclipse.pde.core/com.glnpu.dmp.client.platform.product/dev.properties -os win32 -ws win32 -arch x86
 8
 9!ENTRY org.eclipse.osgi 2 0 2007-06-19 14:10:04.390
10!MESSAGE One or more bundles are not resolved because the following root constraints are not resolved:
11!SUBENTRY 1 org.eclipse.osgi 2 0 2007-06-19 14:10:04.390
12!MESSAGE Bundle update@../../DMP/com.glnpu.dmp.client.platform/ was not resolved.
13!SUBENTRY 2 com.glnpu.dmp.client.platform 2 0 2007-06-19 14:10:04.390
14!MESSAGE Missing required bundle org.eclipse.ui.views_0.0.0.
15
16!ENTRY org.eclipse.osgi 2 0 2007-06-19 14:10:04.390
17!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
18!SUBENTRY 1 org.eclipse.osgi 2 0 2007-06-19 14:10:04.390
19!MESSAGE Bundle update@../../DMP/com.glnpu.dmp.client.platform/ [61] was not resolved.
20!SUBENTRY 2 com.glnpu.dmp.client.platform 2 0 2007-06-19 14:10:04.390
21!MESSAGE Missing required bundle org.eclipse.ui.views_0.0.0.
22
23!ENTRY org.eclipse.core.runtime 2007-06-19 14:10:04.390
24!MESSAGE Product com.glnpu.dmp.client.platform.product could not be found.
25
26!ENTRY org.eclipse.osgi 4 0 2007-06-19 14:10:04.406
27!MESSAGE Application error
28!STACK 1
29java.lang.RuntimeException: No application id has been found.
30    at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:56)
31    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
32    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
33    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
34    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
35    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
36    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
37    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
38    at java.lang.reflect.Method.invoke(Method.java:585)
39    at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
40    at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
41    at org.eclipse.core.launcher.Main.run(Main.java:977)
42    at org.eclipse.core.launcher.Main.main(Main.java:952)
43
44!ENTRY org.eclipse.osgi 2 0 2007-06-19 14:10:04.406
45!MESSAGE One or more bundles are not resolved because the following root constraints are not resolved:
46!SUBENTRY 1 org.eclipse.osgi 2 0 2007-06-19 14:10:04.406
47!MESSAGE Bundle update@../../DMP/com.glnpu.dmp.client.platform/ was not resolved.
48!SUBENTRY 2 com.glnpu.dmp.client.platform 2 0 2007-06-19 14:10:04.406
49!MESSAGE Missing required bundle org.eclipse.ui.views_0.0.0.
50
51!ENTRY org.eclipse.osgi 2 0 2007-06-19 14:10:04.406
52!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
53!SUBENTRY 1 org.eclipse.osgi 2 0 2007-06-19 14:10:04.406
54!MESSAGE Bundle update@../../DMP/com.glnpu.dmp.client.platform/ [61] was not resolved.
55!SUBENTRY 2 com.glnpu.dmp.client.platform 2 0 2007-06-19 14:10:04.406
56!MESSAGE Missing required bundle org.eclipse.ui.views_0.0.0.

其实错误的核心是:
1!ENTRY org.eclipse.osgi 2 0 2007-06-19 14:10:04.406
2!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
3!SUBENTRY 1 org.eclipse.osgi 2 0 2007-06-19 14:10:04.406
4!MESSAGE Bundle update@../../DMP/com.glnpu.dmp.client.platform/ [61] was not resolved.
5!SUBENTRY 2 com.glnpu.dmp.client.platform 2 0 2007-06-19 14:10:04.406
6!MESSAGE Missing required bundle org.eclipse.ui.views_0.0.0.
因为启动我的插件找不到需要依赖的插件~注意这里的找不到是指OGIS的加载机制找不到~
处理办法是什么?
很简单~选中你加载进来的插件选择旁边的properties...,然后选择optional就OK了~

posted @ 2007-06-19 14:18 阿南 阅读(3314) | 评论 (2)编辑 收藏
再次理解Eclipse的类加载机制

今天在写RCP的基础运行插件的时候,发现一个非常有意思的问题:
    我有两个插件A和B,A是RCP运行主插件,B是普通插件,A依赖于B存在并运行。当我把B打成JAR包,放到A下,做本地依赖的时候,那么Log4j的配置文件加载无误,但是这样是违反了Eclipse插件开发原则(Eclipse最小运行单位是插件)的;我把A和B通过feature进行关联,然后在A中依赖B插件,通过product文件启动A插件的时候,发现B插件无法加载Log4j的配置文件... ...
    很郁闷的问题哦~为什么?
    因为我一直在使用原来java的类加载机制思考问题,一个类加载机,将加载所有的Class~在Eclipse下则不是这样的,每一个类加载机只负责一个插件的内容加载~多个类加载机之间是没有关系的~
    因此,每一个插件在类加载时都是独立的个体~所以每一个插件下面都需要自行增加一个Log4j配置文件,大家都独立维护自己的Log4j配置文件~唉,有一个配置文件泛滥的年代啊~


ps:

深入剖析 Eclipse 类装入器

posted @ 2007-06-18 15:13 阿南 阅读(1761) | 评论 (0)编辑 收藏
庆祝一下~RCP开发者的福音到了!

今天在Eclipse站上学习如何使用Maven2管理Eclipse plugin时,偶然google到了~Codehaus上已经有了maven2管理Eclipse plugin的插件了~
http://mojo.codehaus.org/pde-maven-plugin/index.html
真是踏破铁鞋无觅处,得来全不费工夫!

顺道说说Baidu,我baidu MOJO的时候,搜索结果80%竟然是MP3类的~我都晕倒了,我以为我开的是Mp3.baodu.com,百度现在是不是转行转作MP3了?

posted @ 2007-06-14 22:04 阿南 阅读(1655) | 评论 (2)编辑 收藏
仅列出标题
共13页: First 上一页 5 6 7 8 9 10 11 12 13 下一页