爪哇岛的一个山洼。

2006-12-30

【活动】一个漂亮的新本本来了


14寸宽屏、64位双核、内存1G、120G硬盘、独立显卡。。。
目前足够我用了。


这就是传说中的无线鼠标,我琢磨了半天,才发现需要装电池,连忙把所有抽屉翻了个底朝天,终于找到两节7号电池,塞进去,居然就可以了。



本本上没有摄像头,我的要求也不苛刻没有就没有吧,结果卖电脑的送给我一个摄像头,这样架在我旁边也比较有感觉:-)


新年到了,本本换成新的了,希望在2007年能有更大的进步和突破。

【活动】告别一起547天的本本了(2)


已经好久没有清理,有很多灰尘了。

看看这个鼠标,你是不是明白了什么叫铁棒也能磨成针呢?

【活动】告别一起547天的本本了(1)



这个本本跟随我一年半了,昨天它正式被我换调了,它坏掉了吗?
不,它没有坏调,它要去为其他人服务了。在这一年半里,它让我学到了很多东西,经常每天运行25个小时。瞧,它包包带子上的垫子都掉了。

2006-12-17

【技术心得】Fedora Linux安装心得(一边实践一边记录)

今天,一个linux的菜鸟,开始了linux之旅,那个菜鸟就是我。为了更好的一步一个脚印的学习linux,我把一台PC机拿来专门安装linux(里面原有的Windows以及其他资料统统干掉...),而且今天白天我还冒着凛冽的寒风去中关村花了50元大洋买了正版的Fedora6软件安装盘。

回到家,开始兴致勃勃的安装Linux,呵呵,把心爱的台式机抱到我的笔记本旁边,一边安装,一边用笔记本看安装帮助。我将台式机设置成从光盘启动,进入Fedora安装的初始界面,在boot: 后面键入linux text然后回车,当执行到下面的语句时:

-----------------------------------
running install
running /sbin/loader
-----------------------------------

什么反应都没有了,于是我开始了无数次的重启,在boot: 后面尝试不同的参数,时间在慢慢的流失,我在继续尝试,不解决誓不罢休。从晚上8点开始进行尝试,而墙上的挂钟不知不觉的转了四圈半,突然间我在无数篇网页中发现了一个参数输入方法:

-----------------------------------
linux ide=nodma nousb nofb
-----------------------------------

此时看到没有尝试过的参数,我都会习惯性的输入这个命令进行尝试,所以我用文本模式输入:

-----------------------------------
linux text ide=nodma nousb nofb
-----------------------------------

居然可以安装了!!!~~~,这个问题在中文世界里很难找到答案,但是谷歌给我提供英文的答案,顺便感谢一下谷歌,啊额~~~

接下来就是一步一步的按照提示定制安装了,我觉得这里面最重要的就是磁盘分割和规划了(这个其实是鸟哥告诉我的=_=),在我比较了解磁盘分割的情况下,顺利的进行了这些设置...(我转头看了看旁边的电脑),呵呵它正在格式化磁盘准备复制文件了呢 ... ...

至此,我可以继续学习linux了。

2006-12-07

【随写】我喜欢吃豆瓣



doubanclaim7ad9949e64905e73

【活动】是什么东西划破黎明的长空???

是什么东西划破黎明的长空???

今天早上起床上班,快到公交车站的时候,我被天上的景色迷住了,看!!~~~~~~~~~那条白线越来越长

这个画面一直在我脑海里飘来飘去的,又飘来飘去的,特6公交车停了。。。。。。我做在二楼,瓦赛!!!眼前的景象又让我回忆起了“指环王-双塔骑兵”里面制造军队的宏伟情景,到底我看见的是什么东西呢??

当时买了个能照相的手机,被老婆骂了好久,你想如果没有这个手机,我怎么能捕捉生活中精彩的瞬间呢??(老婆看见后肯定会说:你总是能给自己找个理由【哈哈】)

。。。 。。。上班了,干活了先 。。。 。。。

【活动】毛血旺和黄瓜皮蛋汤的故事

看到这个是不是流口水了???唉,没办法,下班后懒得做饭,只能吃这个了。。。。。。和她一起的还有黄瓜皮蛋汤,呵呵
服务员上菜很慢,等了半天,估计故意调我们的胃口。面对上面的图片中的情形,想必你也知道该做什么了吧:快拿起筷子吃啊~~~~~:)

很快,毛血旺和黄瓜皮蛋汤都被洗劫一空了

有喜欢做的工作,还时常有毛血旺陪伴我,生活真惬意,明天还是未知的,期待明天有什么东西又让我兴奋呵呵

2006-12-06

【业界新闻】微软公布中国十大流氓软件

昨天,在新西兰召开的国际反病毒大会上,微软公司安全研究响应小组公布的报告显示,中国的流氓软件数量居世界第八,美国居第一。

报告还公布了中国十大流氓软件:CNSMIN (3721)、CNNIC Chinese keywords(CNNIC关键字搜索)、Baidu.Sobar(百度搜霸)、Sogou(搜狗)、Baigoo(百狗)、DuduAccelerator(DUDU加速器)、Caishow(彩秀)、DMCast(桌面传媒)、HDTBar (一种网页工具条)以及Real VNC(一种远程控制软件)。

2006-12-01

【活动】今天参加中国软件技术大会看见了一个机器人呵呵



样子长得比较难看。



你可以跟他对话,可以向他咨询很多问题。




他还可以装动物叫,可以做很多表情,还可以做鬼脸哦。

2006-11-28

【技术心得】采用编程的方式将当前Persptive

采用编程的方式切换当前的Persptive,代码如下:

String resourcePesId = "org.eclipse.ui.resourcePerspective";
// get Perspective Registry
IPerspectiveRegistry registry = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getWorkbench()
.getPerspectiveRegistry();
// find Resource Perspective with extenion Id
IPerspectiveDescriptor pd = registry
.findPerspectiveWithId(resourcePesId);
// get current active perspective
IPerspectiveDescriptor currentPerspective = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getWorkbench()
.getActiveWorkbenchWindow().getActivePage().getPerspective();
// testing current perspective is "Resource Perspective" ,not then show
// it.
if (!resourcePesId.equals(currentPerspective.getId())) {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getWorkbench()
.getActiveWorkbenchWindow().getActivePage().setPerspective(
pd);
}

【技术心得】如何让GWT运行在Tomcat中

OK got it running on Tomcat. Here are the steps

1. Strip the javax.* packages from gwt-user.jar . You can do it with
winzip/winrar etc. Open the jar in such tools and delete all files in
javax folder including the folder


2. Copy the stripped jar in your webapps/YourApp/WEB-INF/lib. Copy the
compiled classes (e.g copy the folder "com" in samples/dynatable/bin )
to webapps/YourApp/WEB-INF/classes


3. Modify your Service Entry point code (if required). Note the text
you put in place /calendar line. You will use this text in web.xml
later
ServiceDefTarget target = (ServiceDefTarget) calService;
String staticResponseURL = GWT.getModuleBaseURL();
staticResponseURL += "/YourApp/calendar";
target.setServiceEntryPoint(staticResponseURL);
4. Run DynaTable-compile.cmd (replace dynatable with app name). File
will be generated in www\com.google.gwt.sample.dynatable.DynaTable\ .
Copy all files within this folder to webapps/YourApp/


5. Create modify web.xml and place it in WEB-INF
<?xml version="1.0" encoding="UTF-8"?>
<web-app>


<servlet>
<servlet-name>SchoolCalendarService</servlet-name>


<servlet-class>com.google.gwt.sample.dynatable.server.SchoolCalendarService-Impl</servlet-class>
</servlet>


<servlet-mapping>
<servlet-name>SchoolCalendarService</servlet-name>
<url-pattern>/calendar</url-pattern>
</servlet-mapping>


</web-app>
5. Launch tomcat. Open browser e.g.
localhost:8080/YourApp/DynaTable.html
6. Enjoy

2006-11-23

【java教程】实践MDA之AndroMDA教程:[第六节]代码生成

执行生成代码命令

在模型设计好并且工程配置完成以后,就可以进行代码生成了。在第二节中,我们介绍过一些的常用命令,其中的各个命令均可以组合着使用。
下面按照第二节中在UltraEdit执行命令的方法,执行 maven install 命令,代码生成工具将首先验证模型,在这个过程中,可能会提示一些模型的错误信息,这些错误信息都是由于模型的某个地方不符合规范造成的。因此,如何有错误提示,则先修改模型,在执行 maven install 命令,直到验证通过为止。
验证通过以后,就会生成代码。在工程的目录结构中,core/src 下面的文件是可以修改的,也是我们填写业务逻辑方法实现的地方,代码生成工具将不会覆盖此目录下面的文件,而 core/target 下面的文件是不可以修改的,每次重新生成代码的时候,代码生成工具将覆盖该目录下面的文件。
在重复生成代码的时候,可以加上 clean 命令,首先清空(不会清空 core/src 下面的文件)以前生成的代码,然后生成的代码。
当模型验证通过,并且 core/src 下面业务逻辑已经编写测试完成,那么此时执行 maven clean install ,代码生成工具将把应用程序以jar包的方式安装在 maven 的 repository 里面,例如在我本地的 C:\Documents and Settings\Administrator\.maven\repository\CarManagement\jars\ 目录下面,代码生成工具安装了 CarManagement- common- 1.0.jar 和 CarManagement-core-1.0.jar 两个文件。

如何使用

代码生成工具产生的两个jar包,能够很方便的在其他各个工程里面使用。通过一个 ServiceLocator 类可以获取到各个 Service 对象,例如可以用下面语句获取到 UserService 对象:
UserService userService = ServiceLocator.instance().getUserService();
获取到 Service 对象以后,就可以使用 Service 里面定义的各种方法了。

总结

实践 MDA 的 AndroMDA 教程到此结束了,该教程主要以一个示例为主线来介绍 AndroMDA 代码生成工具的使用过程,是作者对使用过程的一个回顾和总结,难免存在很多错误和不妥的地方,欢迎大家指出并充分交流。

教程中的示例代码可以到 http://www.javava.org/prima/java_tutorial.html 进行下载。

2006-11-22

【技术心得】Puzzles on getting start GWT and eclipse.

于此主题的全部 10 个帖子 - 树式浏览
发件人: jack.tang - 查看个人资料
日期: 2006年5月19日(星期五) 上午2时26分
电子邮件: "jack.tang"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


>From the document


http://code.google.com/webtoolkit/gettingstarted.html#New.
It said:
Just click the green "Run" button at the top of the window to start
your project in hosted mode.

And I wonder what it exactly to "Run", you know, there is drop-down
list in "Run" button, and what Class should specified? or I lost
something?


Thanks
/Jack


回复 为此帖评分: Text for clearing space





发件人: Mr. Monster - 查看个人资料
日期: 2006年5月19日(星期五) 上午2时32分
电子邮件: "Mr. Monster"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


You missed something, if you follow the instructions exactly and click
Run it will start up the example app. No need to configure anything
inside eclipse.

回复 为此帖评分: Text for clearing space





发件人: jack.tang - 查看个人资料
日期: 2006年5月19日(星期五) 上午2时40分
电子邮件: "jack.tang"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


Well, can you explain how to hook hosted browser into eclipse manually?
using MyApplication.launch?

回复 为此帖评分: Text for clearing space





发件人: Roux - 查看个人资料
日期: 2006年5月19日(星期五) 上午3时02分
电子邮件: "Roux"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


It doesn't work for me either. The directions are either wrong,
incomplete, or don't work with every version of eclipse.

回复 为此帖评分: Text for clearing space





发件人: jack.tang - 查看个人资料
日期: 2006年5月19日(星期五) 上午3时07分
电子邮件: "jack.tang"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


When I click "Run" button, it always run the first application in the
drop list and the *.launch doesnot work at all. How to load the
*.launch, anyone knows?

回复 为此帖评分: Text for clearing space





发件人: Adrian Marti - 查看个人资料
日期: 2006年5月19日(星期五) 上午3时17分
电子邮件: "Adrian Marti"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


in the docs it says to use com.google.gwt.dev.GWTShell as the startup
class, which may mean main class for Run dialog? I tried this but had a
null pointer on logging setup.
Caused by: java.lang.NullPointerException
at org.apache.commons.logging.LogFactory.newFactory

回复 为此帖评分: Text for clearing space





发件人: jack.tang - 查看个人资料
日期: 2006年5月19日(星期五) 上午3时18分
电子邮件: "jack.tang"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


Well, I think I found something.
The main class is com.google.gwt.dev.GWTShell, which hosts in
gwt-dev-windows.jar. It is missed in the tutorial. and
swt-win32-3139.dll should be in the same dir as gwt-dev-windows.jar.
You can try to run it.

But,still, i don't have to hook the *.launch:(


回复 为此帖评分: Text for clearing space





发件人: drusifer - 查看个人资料
日期: 2006年5月19日(星期五) 上午3时24分
电子邮件: "drusifer"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


I was having a similar issue originally too. When I pressed Run it
just ran my other project. Then I went into the "Run..." dialogue and
noticed that a new Runner was set up for my GWT project and that one
worked.
-Drusifer

回复 为此帖评分: Text for clearing space





发件人: jack.tang - 查看个人资料
日期: 2006年5月19日(星期五) 上午3时27分
电子邮件: "jack.tang"
评级: (2 位用户)
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子


Bingo! I got the answer!

eclipse 3.1.1
pls copy MyApplication.launch to
{eclipse.home}\.metadata\.plugins\org.eclipse.debug.core\.launches


And you will find MyApplication in the "Run" list, Runnnnn it....


回复 为此帖评分: Text for clearing space





发件人: dealyb - 查看个人资料
日期: 2006年5月19日(星期五) 上午4时34分
电子邮件: "dealyb"
尚未评分评级:
显示选项
回复 答复作者 转发 打印 显示个别帖子 显示原始邮件 报告滥用行为 查找此作者的帖子



jack.tang wrote:
> >From the document
> http://code.google.com/webtoolkit/gettingstarted.html#New.
> It said:
> Just click the green "Run" button at the top of the window to start
> your project in hosted mode.

> And I wonder what it exactly to "Run", you know, there is drop-down
> list in "Run" button, and what Class should specified? or I lost
> something?


> Thanks
> /Jack



Hi Jack, when I launch the configuration page reads
com.google.gwt.dev.GWTShell for the main class
and my project name "opportunity" under the project
tab with no checkboxes checked. and this launches
the hosted mode for me. I hope this helps you.
regards,
Brian

回复 为此帖评分: Text for clearing space





帖子的结尾

【技术心得】如何从应用服务器的数据源中获取jdbc连接

从应用服务器数据源中获取jdbc连接,在很多时候非常有用,例如使用该连接直接访问数据库做特殊处理,或者提供给报表工具使用等等。利用数据源中提供的连接,使得在效率上有很大的提高。

代码如下:


/**
* 从应用服务器获取指定名称的数据源
*
* @return
* @throws Exception
*/
public static Connection getConnFromDS(String dsName)
throws Exception
{
Connection conn = null;
try
{
Context context = new InitialContext();
DataSource ds = (DataSource) context.lookup(dsName);
conn = ds.getConnection();
System.out.println("获取数据源[" + dsName + "]成功 ... ...");
} catch (Exception e)
{
System.err.println("获取数据源[" + dsName + "]失败,尝试直接使用jdbc连接...");
e.printStackTrace();
}
return conn;
}

【记录备份】jar命令的详细使用说明

jar {ctxu}[vfm0Mi] [jar/war-文件] [manifest-文件] [-C 目录] 文件名 ...
选项:
-c 创建新的存档
-t 列出存档内容的列表
-x 展开存档中的命名的(或所有的〕文件
-u 更新已存在的存档
-v 生成详细输出到标准输出上
-f 指定存档文件名
-m 包含来自标明文件的标明信息
-0 只存储方式;未用ZIP压缩格式
-M 不产生所有项的清单(manifest〕文件
-i 为指定的jar文件产生索引信息
-C 改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺序。
示例1:将两个class文件存档到一个名为 'classes.jar' 的存档文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有
文件存档到一个名为 'classes.jar' 的存档文件中:
jar cvfm classes.jar mymanifest -C foo/ .

2006-10-26

【java教程】实践MDA之AndroMDA教程:[第五节] 工程配置

当完成 MagicDraw 建模以后,接下来的事情就是生成代码了,但是此时生成的代码都是按照默认的设置进行的,我们往往需要对工程的配置进行修改和调整来满足各自的需求。
核心配置文件

工程中的 [root]\mda\conf\andromda.xml 文件是此代码生成工具的核心配置文件。它由多个namespace组成,每个namaspace下面包含了每个组件的配置信息。namespace包括default、spring、hibernate、java、bpm4struts等,其中default表示一些默认的全局的属性。在实际的工作中,我们需要根据实际情况对该配置文件进行修改。关于该文件可配置的详细内容,请参考官方网站:http://www.andromda.org 上文档。
举几个通常可能会修改的地方:
1、在default名字空间下面添加
<property name="defaultMultiplicity">0</property>
的属性,这样设计的持久对象属性默认全部可以为空。
2、在Spring名字空间下可以添加下面几个属性:
<property name="hibernateHbm2DDLAuto">update</property>
<property name="hibernateEnableCache">true</property>
<property name="applicationContext">carManagement- applicationContext.xml</property>
<property name="applicationContextDataSource">carManagement-applicationContext- dataSource.xml</property>
<property name="applicationContextLocalDataSource">carManagement- applicationContext- localDataSource.xml</property>
<property name="beanRefFactory">carManagementBeanRefFactory.xml</property>
<property name="beanRefFactoryId">carManagementBeanRefFactory</property>
hibernateHbm2DDLAuto属性表示自动更新数据库表结构,例如程序在执行的过程中,数据库还没有数据表,那么此时hibernate将会根据持久对象自动的构建数据库表;
hibernateEnableCache属性表示将使用hibernate的缓存功能,用来提高运行效率。
applicationContext、applicationContextDataSource、applicationContextLocalDataSource、beanRefFactory、beanRefFactoryId等几个属性表示自动生成的Spring配置文件的名称,具体每个配置文件的作用是什么,看看生成后的源代码就会明白。
3、在bpm4struts名字空间下面添加下面两个属性:
<property name="pageEncoding">gb2312</property>
<property name="mergeLocation">${maven.conf.dir}/cartridge/custom</property>
第一个属性表示生成的页面的默认编码为gb2312;第二个属性只有在需要配置生成模板的情况下才使用,如何修改模板在本节的最后部分会介绍。

数据库信息配置

在工程根目录下的存在一个 project.properties 文件,它用来配置数据库的信息。例如下面是对Mysql数据库的配置信息:
--------------------------------------------------------------------
# set this to true will deploy the war exploded
deployExploded=true


# The datasource for the application
# dataSource.name=DefaultDS
# dataSource=java:/${dataSource.name}


# Properties for management of the database schema,
# ignore if you setup/drop your schema manually
dataSource.driver.jar=D:/Tomcat 5.0/common/lib/mysql-connector-java-3.1.10-bin.jar
dataSource.driver.class=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/carsmanagement
dataSource.user=root
dataSource.password=mysql
dataSource.sql.init=core/target/schema-create.sql
dataSource.sql.drop=core/target/schema-drop.sql
dataSource.sql.load=core/target/db/create-dummy-load.sql
# What schema related goals should do when an error occurs.
dataSource.sql.onError=continue


# Change this to generate to the correct MDA database mappings
# For MySql use: MySQL
# For Hypersonic use: HypersonicSql
# For Oracle9i use: Oracle9i
sql.mappings=MySQL


# For MySql use: org.hibernate.dialect.MySQLDialect
# For Hypersonic use: org.hibernate.dialect.HSQLDialect
# For Oracle9i use: org.hibernate.dialect.Oracle9Dialect
hibernate.db.dialect=org.hibernate.dialect.MySQLDialect
--------------------------------------------------------------------
对于该配置文件,有非常重要的一点需要说明:如果设置了dataSource.name和dataSource两个属性,那么代码生成工具自动生成的Spring配置文件将使用这个数据源名称,而不使用dataSource.driver.jar、dataSource.driver.class、dataSource.url、dataSource.user、dataSource.password属性;如果没有设置dataSource.name和dataSource两个属性,那么代码生成工具自动生成的Spring配置文件将使用dataSource.driver.jar、dataSource.driver.class、dataSource.url、dataSource.user、dataSource.password属性。
如何修改模板

代码生成工具使用了Velocity模板来生成java文件、jsp文件以及相关的配置文件等各种资源。当我们觉得它生成的格式不满足我们的要求时,我们可以修改模板实现,通过我们会修改JSP模板、配置文件模板等。具体步骤如下:
1、编辑/mda/conf/andromda.xml文件,在bpm4struts的名字空间下面的属性列表中添加下面两个属性:
<!-- add by widen -->
<property name="pageEncoding">gb2312</property>
<property name="mergeLocation">${maven.conf.dir}/cartridge/custom</property>
其中mergeLocation属性表示自定义的模板文件的存放位置。
2、如果需要在web.xml文件中生成其他内容,则需要编辑/mda/conf/mappings/WebMergeMappings.xml文件,例如我们需要加入和关于编码的filter,则需要在该文件的filter merge- point的地方添加如下代码:
<filter>
<filter-name>encodingFilter</filter-name>
<filter- class>org.springframework.web.filter.CharacterEncodingFilter</filter- class>
<init-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>


然后在filter-mapping merge-point的地方添加如下代码:
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
在我的CarManagement示例工程里面已经对模板的基本修改做好了设置,因此如果你获取到了我的CarManagement示例工程文件夹接下来的几步将帮助你更加快速的进行模板修改。如果需要示例工程,可以用 email (delight.wjk@gmail.com) 给我联系。
3、把CarManagement示例工程中的/mda/conf/下的cartridge文件夹拷贝到当前工程的对应的目录下面,并可以根据实际需要在此基础之上进行修改。
4、把CarManagement示例工程中的/web/src/下的jsp文件夹拷贝到当前工程的对应的目录下面。因为CarManagement示例工程里面已经对模板的基本修改做好了设置,拷贝过来直接使用即可,并可以根据需要在此基础之上进行修改。
5、如果你是使用 maven 的 andromdapp:generate 命令生成工程目录结构的,你会在 /web/maven.xml 文件中发现有一个 war:init 命令的部分被默认的注释起来了,取消这个注释后,代码自动生成工具将自动拷贝 /web/src/jsp 下面的所有文件到自动生成war包中。
6、在拷贝后的cartridge目录中替换字符串:将“CarManagement”替换为当前工程的名称,注意整字匹配,并且匹配大小写。
7、在拷贝后的jsp目录中替换字符串:将“CarManagement”替换为当前工程的名称,注意整字匹配,并且匹配大小写。


到这里,关于工程配置就介绍完了,下一节将介绍生成代码的常用命令,并讲解如何集成到 eclipse 开发环境中。

2006-10-25

【学习心得】JFace和SWT有什么区别呢?

之前做系统的时候没有认真想过这个问题,呵呵,现在我们来搞清楚出它。

JFace:插件的用户界面框架
我们已经见到工作台定义扩展点来为使插件向平台添加用户界面功能。许多这些扩展点,特别是向导扩展,是通过使用 org.eclipse.jface.* 包中的类来实现的。有什么区别?

JFace 是一个用户界面工具箱,它提供很难实现的、用于开发用户界面功能部件的 helper 类。JFace 在原始的窗口小部件系统的级别之上运行。它提供用于处理常见的用户界面编程任务的类:

查看器负责处理填充、排序、过滤和更新窗口小部件等最辛苦的工作。
操作和添加项介绍用于定义用户操作的语义,并指定在何处提供它们。
图像和字体注册表提供用于处理用户界面资源的常见模式。
对话框和向导定义用于构建与用户进行复杂交互的框架。
JFace 使您可以专注于实现特定插件的功能,而不必花费精力来处理底层窗口小部件系统或者解决几乎在任何用户界面应用程序中都很常见的问题。

JFace 和工作台
何处是 JFace 结束而工作台开始的位置?有时候界线并不是这样明显。通常,JFace API(来自于包 org.eclipse.jface.*)独立于工作台扩展点和 API。可以想象,根本不必使用任何工作台代码就可以编写 JFace 程序。

工作台使用 JFace,但是又试图尽可能减少依赖项。例如,工作台部件模型(IWorkbenchPart)被设计为独立于 JFace。我们很早就知道可以直接使用 SWT 窗口小部件来实现视图和编辑器,而不必使用任何 JFace 类。工作台尽可能保持“JFace 中立”,允许程序员使用他们觉得有用的 JFace 的部件。实际上,在工作台的大多数实现中都使用了 JFace,并且在 API 定义中引用了 JFace 类型。(例如,IMenuManager、IToolBarManager 和 IStatusLineManager 的 JFace 接口显示为工作台 IActionBar 方法中的类型。)

JFace 和 SWT
SWT 和 JFace 之间的界线是很明显的。SWT 根本不依赖于任何 JFace 或平台代码。许多 SWT 示例说明可以如何构建独立的应用程序。

JFace 用来在 SWT 库顶部提供常见的应用程序用户界面功能。JFace 并不试图“隐藏”SWT 或者替换它的功能。它提供一些类和接口,以处理与使用 SWT 来对动态用户界面编程相关联的许多常见任务。

通过了解查看器及它们与 SWT 窗口小部件之间的关系,就可以更清楚地了解 JFace 和 SWT 之间的关系。

到这里,我明白了,你明白了吗。

2006-10-24

【必备知识】领带的十种打法

1、平结平结为最多男士选用的领结打法之一,几乎适用于各种材质的领带。要诀:领结下方所形成的凹洞需让两边均匀且对衬。

2、交叉结这是对于单色素雅质料且较薄领带适合选用的领结,对于喜欢展现流行感的男士不妨多加使用“交叉结”。

3、双环结一条质地细致的领带再搭配上双环结颇能营造时尚感,适合年轻的上班族选用。该领结完成的特色就是第一圈会稍露出于第二圈之可别刻意给盖住了。

4、 温莎结温莎结适合用于宽领型的衬衫,该领结应多往横向发展。应避免材质过厚的领带,领结也勿打得过大。

5、双交叉结这样的领结很容易让人有种高雅且隆重的感觉,适合正式之活动场合选用。该领结应多运用在素色且丝质领带上,若搭配大翻领的不但适合且有种尊贵感。

6、亚伯特王子结,适用於浪漫扣领及尖领系列衬衫,搭配浪漫质料柔软的细款领带,正确打法是在宽边先预留较长的空间,并在绕第二圈时尽量贴合在一起,即可完成此一完美结型
7、四手结(单结)是所有领结中最容易上手的,适用於各种款式的浪漫系列衬衫及领带

8、浪漫结,浪漫是一种完美的结型,故适合用於各种浪漫系列的领口及衬衫,完成後将领结下方之宽边压以绉摺可缩小其结型,窄边亦可将它往左右移动使其小部份出现於宽边领带旁
9、简式结(马车夫结),适用於质料较厚的领带,最适合打在标准式及扣式领口之衬衫,将其宽边以180度由上往下翻转,并将折叠处隐藏於後方,待完成後可再调整其领带长度,是最常见的一种结形

10、十字结(半温莎结),此款结型十分优雅及罕见,其打法亦较复杂,使用细款领带较容易上手,最适合搭配在浪漫的尖领及标准式领口系列衬



【技术心得】一个很方便的Java目录拷贝程序

在网上找到了一个比较好用的 Java 目录拷贝程序,自己用了一下很方便。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DirCopyUtil
{
public static void copy(File src, File dest)
throws IOException
{
getCopyable(src).copy(dest);
}

// this is the factory pattern.
public static Copyable getCopyable(File src)
{
// if the source if file then return a file copier
if (src.isFile())
{
return new FileCopier(src);
}
/*
* else it has to be a directory copier, we could also enhance it to be
* other type of copier such as httpcopier etc...
*/
return new DirCopier(src);

}

interface Copyable
{
void copy(File dest)
throws IOException;
}

static class DirCopier
implements Copyable
{
File srcDir;

public DirCopier(File srcDir)
{
if (!srcDir.isDirectory())
{
throw new IllegalArgumentException(
"passed in paremter has to be directory" + srcDir);
}
this.srcDir = srcDir;
}

/**
* copy current directory content under 'destRoot' directory
*
* @param destRoot the destination root directory, all the file and sub
* directory will be copied under this destRoot directory, if
* destRoot doesn't exist, this will create the directory.
* @throws IOException
*/
public void copy(File destRoot)
throws IOException
{
// 1) if destRoot is not exist it will create it
if (!destRoot.exists())
{
if (!destRoot.mkdirs())
{
throw new IOException("unable to create dir:" + destRoot);
}
}
if (!destRoot.isDirectory())
{
throw new IllegalArgumentException(
"passed in paremter has to be directory" + destRoot);
}
File[] dirContents = srcDir.listFiles();
// we know dirContents can not be null since only file will return
// null, so no need to check null
for (int i = 0; i < _srcfile =" dirContents[i];" _srcpath =" _srcFile.getCanonicalPath();" _srcpath =" _srcPath.substring(0," dest =" new" src =" src;" in =" new" out =" new" buffer =" new" len =" 0;" len =" in.read(buffer,"> 0)
{
out.write(buffer, 0, len);
}
in.close();
out.close();
}
}
}

2006-10-23

【java教程】实践MDA之AndroMDA教程:[第四节] 系统设计(2)

设计系统类图
用 MagicDraw 进行类图设计和利用Rose等其他建模工具建模具有极大的相同点,但为了使建好的模型能够通过代码生成工具的验证并生成代码,因此在设计时需要遵循一定的规则。常用的规则有如下几点:
1、描述类的常用构造型(Stereotype)有:Entity、Criteria、Service、ValueObject、Enumeration等。
Entity构造型:使用这个构造型的类是用来储存持久数据的类,是持久对象,在代码生成的过程中将生成Hibernate映射文件、相应的DAO的java文件以及对应的数据库表。
Criteria构造型:使用该构造型的类用来储存复杂查询的参数,主要用于复杂的多条件查询中。
Service构造型:使用该构造型的类表示Service层,将生成Spring的Service 的java文件,并自动配置在Spring的配置文件中。
ValueObject构造型:该类型主要用在页面显示方面,当持久对象不能直接显示在页面上的时候,就需要把持久对象转换成ValueObject对象后才在页面上显示,代码生成工具将根据该类以及于持久对象的关联生成ValueObject的java文件以及在DAO中生成ValueObject和持久的对象互相转换的方法。
Enumeration构造型:该类型表示枚举,将生成枚举java文件。
2、持久对象(Entity)的visility要设置为public,这样在生成代码后,持久对象java文件中属性的get/set方法才是public的。
3、在设置属性的时候,属性类型一定要用androMDA提供的类型,即:要使用带有[datatype]后缀的类型(例如:Long [datatype]),其他类型将不会被代码生成工具识别。
4、在持久对象中添加查询方法时,范围(scope)属性有两个值:instance和classifier。如果设置成instance,则查询方法将被生成在持久对象的类里面;如果设置成classifier,则查询方法将被生成在持久对象对应的DAO文件中。应该取何值,取决于使用何种结构来进行设计。
5、持久对象属性的有很多常用的构造型(Stereotype),其中Identifier[Attribute]表示主键,将生成对应数据库的主键,Unique[Attribute]表示该属性取值必须唯一。
以上只是大致列出了一些设计规则,详细内容请参见官方网站。
我们的示例程序才用了Hibernate、Spring、Struts的三层架构,通常在设计类图的时候,首先设计持久对象,也称为数据建模,相当于传统的软件开发过程中的数据库设计。我们的示例程序非常简单,因此持久对象的设计也比较简单,设计图如下:




如图所示,Person和Car具有一对多的关系。
设计完持久对象以后就开始设计Service和Controller了,Controller里面的方法用来在活动图中调用,换句话说,Controller是用来在Struts的Action中调用。之所以将Action和Controller分离出来,主要是让开发者专注于业务逻辑的开发,而避开Action配置的技术细节。
下图是汽车管理的上层设计类图:


上图使用了ValueObject和Enumeration等构造型。
下图是用户管理的上层设计图:

至此,示例程序的设计基本完成,接下来的工作是对AndroMDA进行一些必要的配置,将教程的下一节进行详细描述。

【java教程】实践MDA之AndroMDA教程:[第三节] 系统设计(1)

该小节将详细的分析和描述示例的程序的设计。
设计准备
在工程的\mda\src\uml\目录下面有一个UMI文件,这个文件是在建立工程结构目录时自动生成的,该文件遵循标准UML Model规范,是androMDA代码生成工具的依据,储存了应用程序建模的信息。通常情况下我们只需用MagicDraw打开该文件进行建模,然后就可以利用androMDA进行代码生成了。
MagicDraw编辑后的XMI文件的编码都是UTF-8,为了能够使androMDA解析的XMI的编码为gb2312,并且将注释正确显示成中文,我开发了一个编码转换工具(有需要这个工具的请给我Email联系:delight.wjk@gmail.com)。具体操作过程是:
1、在同目录下创建一个该XMI文件的副本:在示例工程中\mda\src\uml\目录下面的UMI文件为 CarManagementModel.xmi ,在该目录下复制一个文件并命名为CarManagementModel_utf8.xmi。
2、用MagicDraw打开 CarManagementModel_utf8.xmi 文件进行设计,每次修改设计后,用下面的编码转换工具对 CarManagementModel_utf8.xmi 文件进行编码转换,转换后的文件为 CarManagementModel.xmi (覆盖原有XMI文件)。
3、此时就可以用androMDA进行代码生成了。
示例工程设计
关于设计的先后顺序,应该没有一个统一的标准。可以先设计用例图、活动图等,然后设计类图。简单的说,这个代码生成工具会结合用例图和活动图来生成页面,依据类图来生成底层代码。
在设计的过程,需要遵循一些设计的要求,否则在生成代码的过程中会有验证不通过的错误提示。具体的设计规则请参阅官方网站上的文档。
设计系统用例图
首先,设计用例图。在设计模型的时候,需要用Stereotypes(文中称为构造型)来描述模型中每个元素的意义。在用例图中,构造型<>表示该元素是一个用例,而构造型<>表示该元素是整个应用程序的入口,因此在模型中只能有唯一的一个元素能被标识成<>构造型,而且在自动生成的可运行的程序中,访问时会默认的进入执行该用例。另外,在模型中,每个用例必须要用一个单独的包来区分名字空间,这是一个设计规则。下图是示例工程的用例设计图:






设计活动图
活动图用来描述各个用例的具体逻辑细节。在模型中,每个用例必须要和一个活动图一一对应。在活动图中被构造型<>标识的状态元素表示前端获取用户输入的页面(例如Jsp),而图中没有任何构造型的状态元素则表示相应用户输入的服务器端的程序(例如Struts中的Action)。
下图是用户管理的活动图:


从图中,我们应该能大致看出用户管理的逻辑。当用户第一次进入的时候,首先看到的是所有用户的列表,在这个用户列表的界面中,用户可以删除选择的用户,可以修改选择的用户,也可以添加一个新的用户。
下图是汽车管理的活动图:
汽车管理的活动图中也同样实现了增加、删除、修改的功能,在新建汽车的时候,用户可以从列表中选择所有者。

2006-10-20

【java教程】实践MDA之AndroMDA教程:[第二节] 示例工程准备



该小节介绍示例工程的概况,并通过演示一步一步建立工程目录。有关建立 AndroMDA 工程的详细介绍请参见其官方网站的文档:http://team.andromda.org/docs/starting.html#My_first_AndroMDA_project
在执行androMDA的Maven命令时,我强烈推荐你使用UltraEdit编辑工具的内嵌执行DOC命令的功能。因为在UltraEdit中执行DOC命令可以保存所有的DOC输出,方便跟踪和检查错误。操作步骤如下:
1、启动UltraEdit编辑工具。
2、按F9键,出现如下的对话框:



其中“命令”表示要执行的DOC命令,工作目录表示执行DOC的当前目录。
3、按回车键或者点击对话框中的确定按钮,开始执行输入的DOC命令。
自动下载Maven插件
用过 maven 的朋友应该比较清楚它的工作机制,它能根据需要自动下载所需要的第三方jar包。代码生成工具 androMDA 是由 maven 实现的。因此,在使用 androMDA 的时候,需要 androMDA 的 maven 插件,有这个插件,androMDA 就可以利用 maven 命令来完成自己的任务了。因此,我需要用一个命令来下载 androMDA 插件以及其他所需的第三方插件,下载插件的命令如下:
maven plugin:download -DgroupId=andromda -DartifactId=maven-andromdapp-plugin -Dversion=3.1
如果第一次在本机使用androMDA,则可能需要几分钟的时间下载,并且在这个过程中需要保证网络畅通,否则会出现错误。
建立工程目录
该教程中的示例工程将位于我本机的D:\MyProject下面。因此设置该目录为执行DOC命令的当前目录。然后执行如下命令:
maven andromdapp:generate
执行该命令时,命令行要求输入一些工程相关的信息,下图是示例工程的输入:
__ __
\/ __ _Apache__ ___
\/ / _` \ V / -_) ' \ ~ intelligent projects ~
_ _\__,_\_/\_____ v. 1.0.2
Please enter your first and last name (i.e. Chad Brandon):
Wang JiaKuan
Please enter the name of your J2EE project (i.e. Animal Quiz):
Car Management
Please enter the id for your J2EE project (i.e. animalquiz):
CarManagement
Please enter a version for your project (i.e. 1.0- SNAPSHOT):
1.0
Please enter the base package name for your J2EE project (i.e. org.andromda.samples):
com.widen.carmanagement
Would you like an EAR or standalone WAR (enter 'ear' or 'war')?
war
Would you like to use the jBpm workflow engine, it uses Hibernate3 (enter 'yes' or 'no')?
no
Please enter the hibernate version number (enter '2' for 2.1.x or '3' for 3.0.x):
3
Would you like your web tier to use JSF or Struts? (enter 'jsf' or 'struts'):
struts
Would you like to be able to expose your services as web services? (enter 'yes' or 'no'):
no
执行完命令后工程目录就自动的创建好了,在 D:\MyProject 目录下面存在这样的目录结构:

有关详细信息请参见文档:http://team.andromda.org/docs/getting- started/java/index.html
工程相关说明
在工程的根目录下有一个readme.txt(示例工程:D:\MyProject\CarManagement\readme.txt)文件。该文件详细描述了有关androMDA工程目录结构以及常用的Maven命令。下面对工程目录结构和常用Maven命令做详细的说明。
目录结构说明
[root]: 工程根目录下包含几个文件,用来全面的控制构建过程和公共属性
[root]/project.xml: 该文件包含了有关工程的信息,你可以自己添加更多的信息,只要不违反 Maven POM 的Schema定义。参见:http://maven.apache.org/reference/project-descriptor.html
[root]/maven.xml: 该文件定义了可以从工程根目录执行的 Maven 命令(goals),大部分时间你也可以在子模快中调用Maven命令,详情参考示例
[root]/project.properties: 该文件定义了工程的一些公共属性,你可以通过修改这些属性来配置工程
[root]/build.properties: 该属性文件了定义了工程所依赖的第三方库的版本信息,也定义了工程的唯一标识。通常情况下该文件不需要修改(除非将工程升级到 AndroMDA 的其他版本的时候需要修改)
[root]/mda: MDA 模块是工程的核心,AndroMDA通过这里的配置来生成应用程序所需的文件。
[root]/mda/project.xml: 包含了 AndroMDA 依赖的其他工程信息
[root]/mda/project.properties: AndroMDA 的属性可以在这里配置,例如可以配置是否进行错误验证
[root]/mda/maven.xml: 该文件不需要编辑
[root]/mda/src: merge- mappings等额外的配置文件可以存放在该目录下,该目录下的/uml子目录里包含UML模型文件,AndroMDA将根据该文件生成代码
[root]/mda/conf/andromda.xml: 配置 AndroMDA 和它的组建,最终要的是各个 cartridge 设置要放在各自的名字空间下面(namespace),全局设置要放在'default'名字空间下面
[root]/common: COMMON 模块集中存放各个模块共用的资源文件和类文件。
[root]/common/project.xml: 列出该模块依赖的其他工程
[root]/common/target: 存放生成的用来共享的资源文件和Java类文件,例如值对象(value objects)和异常(exceptions)
[root]/core: CORE 模块集中存放使用了Spring框架的资源文件和 Java 类文件,在Spring框架下可能使用 Hibernate 和(或)EJB。
[root]/core/project.xml: 列出 Spring 依赖的其他工程
[root]/core/project.properties: 指明了 Spring 的构建的属性,该文件不需要修改
[root]/core/maven.xml: 定义了一些 Maven 命令,这些命令用来生成建立和删除表的DDL代码,其中使用了 Hibernate 的 SchemaExport 功能
[root]/core/src: 需要手工实现的 Spring 相关的类被生成后存放在这里,重新生成代码时不会被覆盖,它们包括 Service 实现、DAO 实现、Entity 实现
[root]/core/target: 这里存放了 Spring 相关的资源文件和类文件,在每次使用 Spring cartridge 重新生成新的代码的时候它们将被覆盖;包括 Hibernate 实体类和相应的 *.hbm.xml 影射文件,包括 Service 和 DAO 的基类,你也可以在该目录下找到建立和删除表的数据库脚本
[root]/web: WEB 模块集中存放所有用来构建表示层的资源文件和类文件,这里也用来将其他模块打包建立可发布的war文件。
[root]/web/project.xml: 列出 WebApp 依赖的其他工程
[root]/web/project.properties: 指明 Spring 的构建属性,你可以通过设置 precompileJsps=true 使得所有JSP文件进行预编译
[root]/web/maven.xml: 定义 JSP 预编译相关的 Maven 命令,取消 war:init preGoal 的注释,使得 copy-over 的特性可用
[root]/web/src: controller 的实现类和可编辑的资源包生成后将被存放在这里,你可以将你自己的 JSP 文件放在这里,在打包生成war文件的时候将自动拷贝这些JSP文件并覆盖到war包中
[root]/web/target: 一个可以部署的war包将生成并存放在这里
常用命令说明
为了成功的构建你的工程,你需要知道如何调用已有模块的构建过程,以下是一些常用的 Maven 命令
%> maven install
简单的构建所有模块
%> maven deploy
收集所有信息,建立可部署的war包,然后自动部署到设置好的应用服务器,但你需要在这之前构建好所有其他模块
%> maven clean install deploy
删除所有生成的文件,重新构建和部署,/src 目录下的文件不会被删除
%> maven core
只构建 core 模块
%> maven web
只构建 web 模块
%> maven nuke
清除所有 /target 目录,从源代码目录(从 common 模块,core 模块和 web 模块)中删除所有以 'Impl' 结尾的 Java 类文件,该命令(goal)会给出确认提示,但是在使用的时候还是要格外小心,因为它会删除你所有用手工编辑过的文 件
%> maven create-schema
调用生成的DDL代码,并紧接着告诉数据库给相应的实体对象建立(create)数据表
%> maven drop-schema
调用生成的DDL代码,并紧接着告诉数据库给相应的实体对象删除(drop)数据表
%> maven start-andromda-server
启动 AndroMDA 服务器。当这个服务器运行的时候能够很大程度的提高代码生成的效率,而且此时需要在另外一个控制台中执行其他 maven 命令。
%> maven stop-andromda-server
停止 AndroMDA 服务器
%> maven mda
将各个设计模块生成代码。
注意:在执行命令的时候你可以使用 '-o' 选项来避免 maven 下载其他东西,只有在线构建的时候才不需要这个选项。每个模块生成后的jar等将被安装在本地 maven 仓库,可能存在于这个目录下:
(Windows)
C:\Documents and Settings\Administrator\.maven\repository\CarManagement\
(*nix)
/home/Administrator/.maven/repository/CarManagement/
遇到问题请到 http://javava.blogspot.com 提问。

【java教程】实践MDA之AndroMDA教程:[第一节] 开始进入

该小节将简单介绍本教程的内容。

为何使用AndroMDA

你是否曾经开发过杂乱无章的JSP代码?你是否曾经因维护一个庞大复杂的应用而头疼不已?事实上,需求会频繁变更,代码会频繁修改。如果代码的更新没有和设计同步,那么最终的代码可能会变得面目全非,维护起来十分困难。如果手工保持代码和设计的同步,则过程十分繁琐——尤其是在需求频繁变更的时候,好不容易修改好了代码,调通了程序,还要同步的修改设计。这种情形下,即使是个软件开发狂热者,也会被折磨的有些抓狂。
聪明的你可能马上开始思考:有没有一种方法可以通过更加精确的建模来生成可运行的代码呢?答案当然是有。
AndroMDA(发音:andromeda)正是这样一个开源的代码生成工具,它能够根据CASE工具建立的模型生成全部的可配置的应用程序以及其他组件。它使得设计师能够抽出更多的时间专注于高质量的设计,而且维护起来也更加方便,维护时只需修改模型,然后重新自动生成代码即可。
有关AndroMDA的详细介绍请参见:http://team.andromda.org/docs/whatisit.html
本教程通过一个简单的示例详细描述使用AndroMDA开发J2EE应用程序的过程,并重点描述初学者可能遇到的问题及解决方法。

示例工程介绍
该教程要完成的示例程序提供如下功能:
1、用户管理:添加用户、删除单个用户、删除多个用户。
2、车辆管理:添加车辆、删除单个车辆、删除多个车辆。
3、用户和车辆具有一对多的关系。


环境准备
该小节配置必要的软件环境。
Java
你需要至少1.4以上的JDK版本,因为androMDA必需的一些包(例如java.util.regexp)只有1.4版本以上的JDK含有。
你可以从这个网站下载所需JDK:http://java.sun.com/
Maven
虽然androMDA既可以用Maven运行,也可以用Ant运行。但是强烈建立你使用Maven,因为绝大多数androMDA插件都和Maven进行集成。本教程使用的是androMDA 3.1,该版本只支持Maven 1.0.2版本,暂不支持Maven 2.0。

你可以从这个网站下载所需的Maven 1.0.2:http://maven.apache.org

在安装 maven 的时候需要正确的设置 JAVA_HOME 变量。

安装完成 maven 后,进入本地目录(如果你用 Administrator 登录的操作系统,那么本地目录是:C:\Documents and Settings\Administrator),在该文件夹下面建立一个 build.properties 文件,然后在该文件加上下面的一句话: maven.repo.remote=http://www.ibiblio.org/maven,http://team.andromda.org/maven

本教程假设你能够比较熟练的使用Maven,如果没有使用过Maven,请参考Maven官方网站上的相关文档,也可以在 http://javava.blogspot.com 提问,将会得到解答。
Tomcat
AndroMDA不依赖特定的J2EE容器。你可以使用默认的Jboss或者Tomcat,本教程使用的是Tomcat 5.0.18。
你可以从这个网站下载所需的Tomcat:http://jakarta.apache.org/tomcat
MagicDraw
本教程使用MagicDraw进行建模。androMDA不依赖于特定的建模工具,只要是能够导入和导出标准UML模型的XMI文件的建模工具,都可以和androMDA一起工作。但是在使用androMDA时,我强烈推荐你使用MagicDraw。首先MagicDraw运行速度非常快,并且支持几乎所有UML特性。
MagicDraw是一个商业软件,但也提供免费的社区版本。你可以从这里下载MagicDraw:http://www.magicdraw.com 。 AndroMDA 3.1只支持UML1.4,因此要动手实践本教程,则只能使用MagicDraw 9.5或者MagicDraw 9.0版本。

环境变量
可能有些环境变量你已经设置好了,但为了再次确认,这里列出在Windows下设置环境变量的步骤以及需要设置的环境变量列表。
1、如果你是Windows 2000的用户,你可以进入控制面板,双击“系统”。
2、进入“高级”页,点击“环境变量”。
3、从系统变量列表中查看是否已经设置好所需的环境变量。
在对话框中,你可以添加或者编辑环境变量。
运行androMDA所需的环境变量参见下表:


这样,基本的环境设置已经完成,接下来在下一节的教程中将开始讲解如何创建一个MDA的工程。

2006-10-19

【随写】上传图标


2006-10-17

【作品介绍】用 Eclipse Plugin 开发的个人财务管理系统

Prima(Personal Resource Intelligent Management)是我利用业余时间开发的一款基于基本会计原理的个人财务管理软件,主要使用了 Eclipse Plugin 和 JasperReport 报表技术开发表示层,利用Spring和Hibernate3.0开发了业务层和数据层。
该软件通过对日记帐数据的采集,自动生成资产负债表、损益表、科目汇总表、科目变化曲线等等多种有用的报表。软件主界面如下:


2006-10-16

【随写】最进准备深入研究一下OpenLaszlo

用OpenLaszlo做出来的界面真是让人耳目一新,准备抽时间继续深入研究一下开发效率以及运行性能等问题。

2006-10-15

【技术心得】在Eclipse RCP平台中使用Java AWT的部件

在Eclipse RCP中使用Java AWT的部件一般情况下很少会用到。特殊情况下使用也是有必要的,例如我在RCP程序中用JFreeChart显示图表的时候就会用到这种功能。示例代码如下:

public void createPartControl(Composite parent)

{

Composite awtComposite = new Composite(parent, SWT.EMBEDDED SWT.NO_BACKGROUND);

// a M$ Windows specific property that prevents some components from erasing

// their background, thus reducing window flickering (in theory :) )

try

{

System.setProperty("sun.awt.noerasebackground", "true");

} catch(NoSuchMethodError ignore){// Ignore this error}
// SWT-AWT Bridge

awtFrame = SWT_AWT.new_Frame(awtComposite);

awtPanel = new Panel(new BorderLayout())

{

public void update(Graphics g) { paint(g); } };
// Generate the Chart. Add the chart to the panel

chart = new JFreechartFactory...blabla

cp = new ChartPanel(chart);

awtFrame.add(cp);

}

以上代码片断在我的示例程序中运行成功。

【技术心得】eclipse平台类加载器问题的解决

2006年7月30日晚上解决的问题,当时记录了,现在贴出来。原文如下:

今晚解决了一个问题,忍不住要记录一下,解决这个问题非常不容易,首先我要感谢Google,你是我最好的老师。

问题产生:我在eclipse的RCP程序中执行装载Jasper报表的程序。

// create JasperPrint using fillReport() method
JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, parameters, DBUtil.getConnection());

如果在eclipse平台外执行执行装载Jasper报表的程序正常,但在eclipse平台里执行就老是出这样的错误:

Unhandled event loop exceptionReason:net/sf/jasperreports/engine/fill/JRFillParameter

于是我开始在网上不断搜索,经过很久的搜寻,终于发现了类似问题的解决方法。
我在装载Jasper报表的程序前面加上这句话,就可以在eclipse RCP平台中运行了。

Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());

【随写】Upload my photo

【随写】终于该搞一个Blog和大家分享一下东西了

开。