写程序,做产品,过日子

成功其实很简单,就是强迫自己坚持下去

BlogJava 首页 新随笔 联系 聚合 管理
  63 Posts :: 1 Stories :: 71 Comments :: 0 Trackbacks

2008年8月19日 #

     “成功其实很简单,就是强迫自己继续练下去。有的时候很累,很累,但是再辛苦也要坚持,因为梦还在远方!”

       这句话语自今年2月3日,在济南冬训的中国跳水队的一场主题为“我的追求”的演讲比赛,演讲者是郭晶晶。 我是从新华网上找到这则消息的:http://news.xinhuanet.com/sports/2008-02/03/content_7561711.htm

        前天晚上,郭晶晶毫无悬念的以415.35的历史最高分,卫冕北京奥运会女子3米跳板跳水桂冠,并且以4金2银的奥运会成绩成为女子跳水第一人! 这番话也随之脍炙人口。可能有媒体觉得这番话不够精炼,就加工成“成功其实很简单,就是强迫自己坚持下去!”

       我也是在她卫冕之后,才看到这番话的。在看到一刹那,我就被感染了。朴实而深刻。成功,既不困难,也不复杂。它很简单。但是它需要我们坚持,很多时候还的强迫自己坚持下去。

       我决定将这句话作为我新的座佑铭。我要在IT这个领域一直坚持下去,开创自己的事业。

      我的学生时代曾有一个座佑铭,是但丁的名句:“做自己的路,让别人说去吧。”
      那时我是个特立独行的学生,上课极少听讲,作业也不认真。绝大部分课程是靠自学的。在那个师资力量乏弱的环境里,很多老师的信条是“上课不听讲,怎么学的好!”我被视为异类,甚至被老师戏称为鬼才。

      高中文理分科时,我放弃了有较大优势的文科,只是因为不愿再试卷上填满恶心的官话和假话,不愿意将来从事一个以官话和假话为主要生存武器的职业。
      到了填报志愿时,为了我的航天梦想,我没有选择近在咫尺的武大和华工,而是去了冷门的西北工业大学。让我的老师着实失望了一把。
      可是过了大学四年,我发现航天系统很难容下人我这个特立独行的家伙。而且我的兴趣也迁移到计算机上。干脆改换行头,脱机入电,干起了软件开发。
      工作后,渐渐发现自己并不是很特立独行了,做的事情都是别人曾经做过事情,研究的东西也都是别人搞出来的东西。于是慢慢的不提“走自己的路,让别人去说吧。”,慢慢的也就变得浑浑噩噩了。
       如今已是三十而立,上有老,下有小,再不能一事无成了。我要以这句话自勉,闯出自己的一片天地!
posted @ 2008-08-19 14:17 Welkin Hu 阅读(62) | 评论 (2)编辑 收藏

2008年8月13日 #

Maven 2的安装和使用虽然不是一点即用,但也不是很复杂。然而,这两天我新装Maven,刚刚过了mvn -version,尝试create maven project就出问题了。问题详情如下。

D:\mavenSample>mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] org.apache.maven.plugins: checking for updates from central
[INFO] org.codehaus.mojo: checking for updates from central
[INFO] artifact org.apache.maven.plugins:maven-archetype-plugin: checking for updates from central
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] The plugin 'org.apache.maven.plugins:maven-archetype-plugin' does not exist or no valid version could be found
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Wed Mar 19 14:26:49 CST 2008
[INFO] Final Memory: 1M/2M
[INFO] ------------------------------------------------------------------------

开始以为是internet 代理设置有问题。网上也有帖子这么说。可是换到ADSL后,不用代理了,问题仍然存在。

几经周折后发现,原因在于我画蛇添足多加了几个镜像,其中有的镜像没有同步更新maven库。经过测试,如下maven 镜像工作正常:

<mirror>
<id>ibiblio.org</id>
<name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- United States, North Carolina -->
</mirror>
<mirror>
<id>redv.com</id>
<url>http://mirrors.redv.com/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- Shanghai, China , Very fast-->
</mirror>
<mirror>
<id>dotsrc.org</id>
<url>http://mirrors.dotsrc.org/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- Denmark -->
</mirror>
<mirror>
<id>sunsite.dk</id>
<url>http://mirrors.sunsite.dk/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- Denmark -->
</mirror>
<mirror>
<id>skynet.be</id>
<url>http://maven2.mirrors.skynet.be/pub/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- Belgium -->
</mirror>
<mirror>
<id>cica.es</id>
<url>http://ftp.cica.es/mirrors/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- Spain, Sevilla -->
</mirror>
<!-- these just point to ibiblio.org -->
<mirror>
<id>ibiblio.net</id>
<name>ibiblio.net Mirror of http://repo1.maven.org/maven2/</name>
<url>http://www.ibiblio.net/pub/packages/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- United States, North Carolina Fast-->
</mirror>

而下面的Maven镜像都有问题。

<mirror>
<id>planetmirror</id>
<name>Australian Mirror of http://repo1.maven.org/maven2/</name>
<url>http://public.planetmirror.com/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>lsu.edu</id>
<url>http://ibiblio.lsu.edu/main/pub/packages/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- United States, Louisiana -->
</mirror>
<mirror>
<id>sateh.com</id>
<url>http://maven.sateh.com/repository</url>
<mirrorOf>central</mirrorOf>
<!-- The Netherlands, Amsterdam -->
</mirror>
<mirror>
<id>ggi-project.org</id>
<url>http://ftp.ggi-project.org/pub/packages/maven2</url>
<mirrorOf>central</mirrorOf>
<!-- The Netherlands, Amsterdam -->
</mirror>

posted @ 2008-08-13 12:40 Welkin Hu 阅读(850) | 评论 (0)编辑 收藏

博客搜索已经出来个年头了,我一直都没用过。博客和普通的网页并没什么大的区别。只要能搜出想要的东西,我并不介意结果是在博客,论坛或其他的什么网页上。

所以我一直不明白为什么要把博客搜索和普通网页搜索分离。今天看了一下有关的资料。原来博客搜索强调的是时效性——你刚写好博客,就能被人从搜索服务中搜到!据说搜索引擎更新普通网页的频率长达一周左右。

仔细想想还真是这个理,从Google、百度等搜到的东西,真的有很多是陈年古董。而搜索新闻时十有八九不如意。

除了时效性外,让博客文章有机会在海量的搜索结果中浮出水面也是一大原因。也许是搜索竞价排名惹得祸,通过普通搜索得到的结果,博客文章往往被淹没了。

以此类推,除了博客外,论坛,新闻等都需要单独的搜索服务。

posted @ 2008-08-13 12:36 Welkin Hu 阅读(26) | 评论 (0)编辑 收藏

一直想找一个理想的网页书签收藏工具,可是始终未能如愿。我对理想的书签收藏的要求是:

  1. 有在线服务,不会因为换了电脑就找不到书签了。
  2. 不用打开在线书签的网页,就可以在IE和Firefox中找到,服务器与本机自动同步。
  3. 同时适用于IE和Firefox。
  4. 最好能集成到IE/Firefox自带的书签/收藏夹中去。

目前业界提供在线书签服务的其实很多,但没有一个能完全达到这些要求。

IE专用插件:IE Pro

http://www.ie7pro.com/

特点
  • 提供在线收藏服务。
  • 与IE收藏夹完全集成。每次关闭IE时同步收藏夹。
  • 提供多种实用服务。
  • 仅在工具栏中占一个图标位置。
缺点
  • IE7专用,不适用于FireFox。
  • 在线收藏的服务器可能在美国,网速较慢。

Firefox专用插件: Foxmarks Bookmark Synchronizer

https://addons.mozilla.org/zh-CN/firefox/addon/2410

特点
  • 与IE Pro 类似的书签插件,提供在线收藏服务。
  • 与Firefox书签菜单完全集成。
  • 没有额外菜单和工具图标
缺点
  • Firefox专用,不适用于IE。
  • 在线收藏的服务器可能在美国,网速较慢。

FireFox中使用IE搜藏夹插件: PlainOldFavorites

https://addons.mozilla.org/zh-CN/firefox/addon/668

特点
  • 在Firefox上额外添加一个"收藏"菜单,列出本机IE收藏夹的内容。
  • Firefox原有的书签功能不受影响。
缺点
  • 没有在线服务,仅适用于一台电脑上的IE和Firefox
  • 可通过"收藏"菜单添加当前页到收藏夹,但不能通过右键添加。
  • "收藏"与"书签"两个菜单并存,本应加到"收藏"中的书签经常被加到"书签"中。
  • 不能应用于"书签工具栏"上的书签项,而这些书签项通常是最常用的。

在线书签 Delicious

http://delicious.com 据说是现在最好的在线书签服务商。目前已被雅虎收购并升级为Delicious 2.0. 原来的怪异网址del.icio.us也不再主推了。

特点
  • 良好的在线书签服务功能。
  • 标签化书签管理,书签搜索功能。特别适用于大量的书签管理。
  • 同时为IE和Firefox提供了插件。
  • IE/Firefox插件仅占用两三个工具图标位,不用单独占用一行。
缺点
  • 浏览器插件并没有浏览器自带的"收藏/书签"功能集成。不能相互同步。
  • 似乎不能通过右键添加书签。
  • 在线收藏的服务器可能在美国,网速较慢。
  • 不能批量删除书签。
  • 不支持树形目录。
  • 排序功能很差。
  • 不能应用于"书签工具栏"上的书签项,而这些书签项通常是最常用的。

在线书签 Google bookmarks

http://www.google.com/bookmarks/,提供与Delicious相似的在线书签服务。据说市场份额早已超过Delicious.

特点
  • 良好的在线书签服务功能。
  • 标签化书签管理,书签搜索功能。特别适用于大量的书签管理。
  • 与google笔记功能集成,这是一绝啊!
  • 在IE和Firefox的google工具栏提供了书签菜单
  • Firefox下还有第三方开发的Gmark插件,能以树型方式展现书签。
  • Google服务器,数度快,稳定。
缺点
  • 无论在IE中,还是在FireFox中,google工具栏都要独占一行。而且搜索框十分多余!
  • 浏览器插件并没有浏览器自带的"收藏/书签"功能集成。不能相互同步。
  • 似乎不能通过右键添加书签。
  • 界面太简单,不支持树形目录。
  • 不能应用于"书签工具栏"上的书签项,而这些书签项通常是最常用的。

image

其他在线书签服务

Windows Live Favorites :
  • 与IE收藏夹完全集成。但不适用Firefox。
  • 服务器超级慢。
Baidu搜藏
  • 与Google bookmarks类似。
  • 需要通过baidu工具栏与浏览器集成,与google工具栏存在一样的问题。
  • 同过添加注册表项,可在IE中支持右键添加。
  • 特色功能,如果书签指向的网址失效,可显示相应的百度快照
QQ书签
  • 与Google bookmarks类似。
  • 与QQ集成
Furl.net
  • 与Delicious类似。
  • 无IE插件或工具栏集成。
  • Firefox中有插件集成。
  • 特色功能:为所有书签指向的网页保存了备份,以防失效。
  • 服务器超级慢。

组合服务,覆盖在线书签,IE和firefox.

方案一 IE Pro + PlainOldFavorites
  1. 使用IE Pro 插件,在IE中获得在线服务。
  2. Firefox中同过PlainOldFavorites插件,直接使用IE收藏夹。
  3. Firefox自带的书签功能基本不用。
方案二 Google bookmarks.
  1. 使用Google bookmarks在线服务。
  2. IE中安装 Google 工具栏,忍受一下它的独占一行。
  3. Firefox中安装Gmark插件
  4. Firefox自带的书签功能基本不用。
posted @ 2008-08-13 12:28 Welkin Hu 阅读(267) | 评论 (0)编辑 收藏

2008年8月9日 #

今天顺手是了一下Google Sites.

写了一个含iFrame的html页面放上去,居然不让过。报错如下:

HTML content will be modified

Your HTML either contains unsafe tags (iframe, embed, styles, script) or extra attributes. They will be removed when the page is viewed.

但是google自己的Calendar, Docs, Video, 甚至乱七八糟的gadget都可以加进去。

posted @ 2008-08-09 17:27 Welkin Hu 阅读(35) | 评论 (0)编辑 收藏

Blog要在群里活的才滋润。从上半年开始,我的主要工作就不是Java了,这个BlogJava的站变得越来越不适合我。很多东西我只能选择发到"非技术区"。

posted @ 2008-08-09 15:21 Welkin Hu 阅读(45) | 评论 (0)编辑 收藏

2008年6月3日 #

目前免费的带语法高亮的文本编辑器,最优秀的莫过于PSPad和Notepad++。就个人使用感受,Notepad++更胜一筹,除了列编辑模式欠缺,和UltraEdit、EditPlus有一拼。用了好几个月,但实在受不了Notepad++主页上的“抵制北京奥运会”,最终决定弃用它。
本人忙于供房养家,对北京奥运会并不感冒。但对这种以技术外衣,宣扬反华的行为却是无法容忍。

posted @ 2008-06-03 17:34 Welkin Hu 阅读(242) | 评论 (4)编辑 收藏

2008年2月27日 #

近来根据公司要求,学习Microsoft.Net。于是仿照EyeLoveU,写了一个C#的小程序。现在比较稳定了,就想放到在SoruceForge这样的网站上去秀一秀。

最开始考虑的自然是SourceForge。但在公司需要通过Proxy访问sourceforge.net时,速度奇慢。

第二个考虑的是Google Code。无论在家通过ADSL访问,还是在公司通过Proxy访问,速度都可以接受。最好用的是支持对Issue, Discussion, Document等自定义属性标签,如priority, type, milestone等。

无论是SourceForge,还是Google Code,与subversion和eclipse的集成都非常好。可是我用的是Microsoft Visual Studio 2008和C#,与这两个东家都不合拍:

  •  Subversion 与VS2008的集成需要购买Visual SVN
  • VS2008不能发布下载包到SourceForge和Google Code上。

最后我发现CodePlex这个网站,居然提供Visual Studio Team Fundation Server的服务。与我用的VS2008完全是一家!可惜的是它的网速非常不稳定,很难访问。估计服务器只在美国。最要命的是,在公司的Proxy环境下,我可以从IE访问CodePlex的VSTS服务器,但VS2008的Team Explorer怎么也访问不了。

posted @ 2008-02-27 10:20 Welkin Hu 阅读(348) | 评论 (0)编辑 收藏

2007年10月24日 #

Collection mapping table

HBM Element Java Interface Java Implementation
<set> Set HashSet
<set> with order SortedSet TreeSet
<list> List ArrayList
<bag>, <idbag> Collection ArrayList
<map> Map HashMap
<map> with order SortedMap TreeMap
<array>, <primitive-array> N/A array

 

Sample Tables

CREATE TABLE `core_sample_company` (
  `companyId` decimal(18,0) NOT NULL,
  `companyName` varchar(128) NOT NULL,
  `description` varchar(1024) default NULL,
  PRIMARY KEY  (`companyId`)
);

CREATE TABLE `core_sample_role` (
  `roleId` decimal(18,0) NOT NULL,
  `roleName` varchar(128) NOT NULL,
  `companyId` decimal(18,0) NOT NULL,
  `description` varchar(1024) default NULL,
  PRIMARY KEY  (`roleId`)
);

CREATE TABLE `core_sample_user` (
  `userId` decimal(18,0) NOT NULL,
  `userName` varchar(128) NOT NULL,
  `companyId` decimal(18,0) NOT NULL,
  `defaultRoleId` decimal(18,0) default NULL,
  `description` varchar(1024) default NULL,
  PRIMARY KEY  (`userId`)
);

CREATE TABLE `core_sample_user_role` (
  `userId` decimal(18,0) NOT NULL,
  `roleId` decimal(18,0) NOT NULL,
  `pripority` int(11) NOT NULL,
  PRIMARY KEY  (`userId`,`roleId`)
);

HBM defintion

The definiton of <set>, <bag>, <list> is similar.

Defines a collection whose element type is simple data type.

<class name="SampleCompany" table="core_sample_company">

        <bag name="roleNames" table="core_sample_role" lazy="false" >
            <key column="companyId"/>
            <element column="roleName" type="string"/>
        </bag>

</class>

Query HQL: select c.id, c.name, r from SampleCompany c left join c.roleNames r

Defines a collection whose element type is another mapped java class

<class name="SampleCompany" table="core_sample_company">   

   <bag name="roles" cascade="none">
            <key column="companyId"/>
            <one-to-many class="SampleRole" not-found="ignore"/>
        </bag>

</class>

Query HQL: select c.id, c.name, r.name from SampleCompany c left join c.role r

Pay attention that key column is a foreign column of SampleRole table.

Defines a list with list-index

<list> is not a popular element. It request a index column in table. The index column is the index of java List, it has to be a sequence starts from 0.

<class name="SampleUser" table="core_sample_user">

     <list name="roles" table="core_sample_user_role" cascade="all" lazy="false" >
            <key><column name="userId" sql-type="integer"/></key>
            <index column="priority"></index>
            <many-to-many class="SampleRole">
                <column name="roleId"></column>
            </many-to-many>
        </list>

</class>

The benifit of <list> is it alwasy sorts list by index column. However, It is hard to resort the list. I tried remove a role from role list and add it to another poisition. When save the role list, an exception throwed:

java.sql.BatchUpdateException: Duplicate entry 'user001-role003 for key 1

This should be a hibernate bug.

Defines a bag with relationship table

<class name="SampleRole" table="core_sample_role">

      <bag name="users" table="core_sample_user_role" cascade="none" lazy="false">
            <key><column name="roleId" sql-type="integer"/></key>
            <many-to-many class="SampleUser">
                <column name="userId"></column>
            </many-to-many>
        </bag>

</class>

  • Key column is foreign column from relationship table to current table(SampleRole>
  • many-to-many sub column is foreign column from relationship table to target table (SampleUser)
posted @ 2007-10-24 11:09 Welkin Hu 阅读(291) | 评论 (0)编辑 收藏

2007年8月31日 #

转贴自:http://news.newhua.com/Html/System_win/2004-9/8/16...

 

安装Windows XP时,如果设置了一个管理员账户,那么系统内置没有密码保护的Administrator管理员账户是不会出现在用户登录列表中的。虽然它身在幕后,可却拥有系统最高权限,为了方便操作及保证系统安全,可以先给它设置密码,然后再把它请到台前来。以下便介绍具体方法。

1.使用“传统登录提示”登录

  启动系统到欢迎屏幕时,按两次“Ctrl+Alt+Delete”组合键,在出现的登录框中输入Administrator账户的用户名和密码即可。也可以单击“开始→控制面板”,双击“用户账号”图标,在弹出的“用户账号”窗口中,单击“更改用户登录或注销的方式”,去掉“使用欢迎屏幕”前的复选框,单击“应用选项”即可在启动时直接输入Administrator账户名及密码登录。

2.在登录的欢迎屏幕显示Administrator账户

  单击“开始→运行”,输入regedit后回车,打开注册表编辑器,依次展开“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList”分支,将右边的Administrator的值改为1,即可让Administrator账户出现在登录的欢迎屏幕上。

3.自动登录到Administrator账户

  单击“开始→运行”,输入control userpasswords2后回车,在打开的“用户账户”窗口去掉“要使用本机,用户必须输入密码”前的复选框,按“应用”后,在弹出的“自动登录”窗口中输入Administrator账户密码(如图1),按两次“确定”即可。注意:如果原来就设置了其它账户自动登录,应该先选中“要使用本机,用户必须输入密码”前的复选框,按“应用”后再去掉选中的复选框。也可以修改注册表实现自动登录,不过没有以上方法方便。

  图1

  当然,如果不需要Administrator账户,可以依次打开“开始→控制面板→管理工具→计算机管理”,在“计算机管理”窗口,展开“系统工具→本地用户和组→用户”,在“用户”右边窗口双击Administrator账户,在弹出的“属性”窗口中选中“账号已停用”前的复选框(如图2),按“确定”即可停用Administrator账户。

  图2

 

补充材料:修改注册表来实现XP的自动登录

 

在进入Windows XP桌面之前,每次都会出现一个用脑登录界面,要求我们输入用户名与密码,可以加大了系统的安全性,也为多人共用一台电脑提供了方便,但如果是家用电脑,只有你一个人使用,这样每次密码,的确不有点不大方便。我们可以通过修改注册表来实现XP的自动登录。

  第1步:运行注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon ]分支,然后在右侧窗口双击“DefaultUserName”,接着输入你的登录用户名。如果没有预设的用户名称,可以在注册表编辑器的菜单栏点选“编辑→新建→字符串值(s)→DefaultUserName”来添加这个项目,注意要区分大小写字母。  

  第2步:同样在该分支下,在注册表编辑器的右侧窗口中双击“DefaultPassword”,然后在空白栏内输入你的密码。假如未发现“DefaultPassword”一项,可按上面的步骤来新建该字符串值。  

  第3步:接下来在右侧窗口中双击“AutoAdminLogon”,将数值设置为“1”。假如未发现“AutoAdminLogon”,可按上面的步骤来新建。  

  现在关闭注册表编辑器并重新启动电脑,以后你会发现那个令人讨厌的登录对话框不见了。

posted @ 2007-08-31 14:07 Welkin Hu 阅读(315) | 评论 (0)编辑 收藏

2007年8月20日 #

Office 2007使用Ribbon代替了主菜单和工具栏。而Ribbon中没有选项设置这一栏。经过查找,发现它被挤一个很不起眼的地方。

 

在Office 2007(Word等)的左上角,有一个Office图标按钮。点击它就会弹出一个菜单窗口,里面包含着Ribbon上没有的菜单项。其中在菜单窗口的右下方,有一个"Word Options"的按钮,这个就是选项设置的菜单了。

Outlook写邮件时,用的编辑器也是Word,但它的设置与Word的设置是独立的。必须在Outlook中打开编辑器,与Word一样设置编辑器选项。

 

这里列举几个比较重要的设置例子。

一、消除换行符。

Word 2007中默认会显示一直回车换行符。通过点击Ribbon上Paragraph栏中的"Show/Hide Edit Marks"图标并不能消除它。打开"Word Options"窗口,选择"Display"栏,勾掉一直显示符号中的"Paragrahp Marks"项,就可以不显示回车换行符了。

 

二、不让输入法随Office启动。

如果安装了中文输入法(当然,其它语言的输入法也一样),这个输入法有可能总跟着Word/Outlook一起启动。非常烦人。要去掉这个特性,只需勾掉“Edit Options"中的最后一项“IME Control Active”。如下图所示。

同时,还建议大家在控制面板中,把高级语言服务关掉。实际上大家常用的中文输入法只有一种,直接使用Ctrl+Space的方法最方便。根本不需要鼠标切换。

 

0001

posted @ 2007-08-20 09:45 Welkin Hu 阅读(560) | 评论 (1)编辑 收藏

2007年7月3日 #

Sysdeo是知名的Tomcat插件。今天在构建eclipse 3.3 + sysdeo3.2.1 + tomcat 6.0.13时,发现如下几个注意点。

  1. Sysdeo主配置项中Tomcat Home是配置Tomcat目录的,注意最后不要加“\”。比如F:\java\tomcat-6.0.13是对了,F:\java\tomcat-6.0.13\就不对了。
  2. Sysdeo advance配置中的Tomcat Base指的是配置Tomcat运行时的基准目录。实际上这个配置项是多余的,可以不配,也不应当配。它必须和Sysdeo主配置项中Tomcat Home一致,否则会有一些Tomcat系统文件找不到。
  3. 如果不通过eclipse和Sysdeo,直接运行Tomcat的startup.bat,基准目录是%TOMCAT_HOME%/webapps。而sysdeo设定的基准目录是%TOMCAT_HOME%。这个会导致一些冲突。比如放在%TOMCAT_HOME%/logs/中的log文件的位置,直接运行要写成“../logs/app.log”,运行sysdeo时要写成“logs/app.log”
posted @ 2007-07-03 18:06 Welkin Hu 阅读(997) | 评论 (1)编辑 收藏

2007年6月20日 #

1、不得在超类中使用通配符,例如

public class PojoModelTree extends IdentifiableTree<? extends PojoModel>

错误信息如下:

The type PojoModelTree cannot extend or implement IdentifiableTree<? extends PojoModel>. A
supertype may not specify any wildcard

 

2、只有<? super Type>,没有<E super Type>

正确用法:TreeNode<? super Node> getTree()

错误用法 <E super Node> E getParent();

 

3、函数返回值类型不应使用通配符:

错误用法:TreeNode<? extends T> getChildNode(String pKey)

这种用法本身无错,但在赋返回值给其它变量时会报类型不匹配。

正确用法:<N extends T> TreeNode<N> getChildNode(String pKey)

 

4、带通配符的泛型集合不能使用add方法。不带通配符的泛型集合也可接收子类元素。

错误用法:

List<? extends Number> list1 = new ArrayList<Number>();
list1.add(new Integer(11)); // 类型不匹配。

第二行报错为:

The method add(capture#1-of ? extends Number) in the type List<capture#1-of ? extends
Number> is not applicable for the arguments (Integer)

 

正确用法:

List<Number> list1 = new ArrayList<Number>();
list1.add(new Integer(11));

 

显然,在泛型的检查之下,仍可向集合中添加指定泛型的子类元素。以下代码也是合法的:

List<Number> list1 = new ArrayList<Number>();
list1.add(new Integer(11));
List<Integer> list2 = new ArrayList<Integer>();
list2.add(33);
list2.add(44);
list1.addAll(list2);

但是,如果写list1=list2就不合法了。

posted @ 2007-06-20 09:37 Welkin Hu 阅读(1131) | 评论 (0)编辑 收藏

2007年6月11日 #

Spring对Hibernate Session Factory提供了高度封装。如下例所示。

 

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.HSQLDialect
</value>
</property>
</bean>

 

然而,在我的案例中,因为业务需要,我们必须在运行时加入新的HBM。在单独使用Hibernate的时,只要取到Hiberante Configuration对象,修改一下配置,然后rebuild session factory就可以了。

可是经Spring这一封装,我只能取到一个只读的SessionFactory对象,无法进行重置。

这里有两种可能方法,但我都不知道如何做。

1,取到LocalSessionFactoryBean对象进行重置。

2,取到Hibernate Configuration对象进行重置。

posted @ 2007-06-11 17:46 Welkin Hu 阅读(1377) | 评论 (4)编辑 收藏

Spring 2.0无缝集成了Hibernate.提供了很多功能。但在我看来,除了整合事务管理外,很多功能都 是可有可无的。

最典型的就是HibernateTemplate,这个类其实就是代理了Hibernate Session的所有功能。把我看得一愣一愣的。半天没明白这个类有什么奇妙用处。我用Hiberante API已经轻车熟路,自然不愿再学习新的API。

它引入这个HibernateTemplate有什么作用呢?其API也不比Hibernate的API简单啊。

后来的测试表明Spring对Hibernate原生的API在事务支持上存在一些问题,而用HibernateTemplate,事务就运行得很好。

posted @ 2007-06-11 13:53 Welkin Hu 阅读(2247) | 评论 (8)编辑 收藏

2007年5月22日 #

1. 在Eclipse中运行DOS

 

 

这种方法的好处是连DOS执行窗口也集成在Eclipse Console中。

在上面的设置是,Working Directory的设置非常重要。${container_loc}表示以当前选中文件的上级目录为工作目录。如果你选中的是某个目录,比如说某个包,那么很不幸,它会指向这个目录的上级目录。所以,${container_loc}只适合选中一个文件的情况。

另一个变量${resource_loc}则相反,它总是以选中的文件或目录为工作目录。就是说它适合选中一个目录的情况。如果选中一个文件,运行DOS就会出错,因为文件不能作为DOS的工作目录。

两个变量各有优缺点。由于Java编程中,大部分DOS命令是在工程目录下执行的,所以${resource_loc}会好一些。使用${container_loc}很难定位到工程目录。

2. Mylar导致Content Assist中出现重复的方法提示。

最近发现我的Eclipse 3.3M7中出了个不大不小的问题,就是Java编辑窗口中的代码提示工具把每一个方法都重复的列了两次。如下图所示。

这个问题让我百思不得其解,最后打开java -> Editor ->Content Assist的设置,才发现是新装了Mylar的原因。如下图所示,Mylar为content assist增加了几个同名的Proposal,将这些同名的Porposals任意勾掉一个就解决问题了。

posted @ 2007-05-22 09:48 Welkin Hu 阅读(208) | 评论 (1)编辑 收藏

2007年5月11日 #

Spring和AOP像一个强力的粘合剂,将完全独立开发的组件(或说是模块,下同)粘合成一个有机的,完整的,可扩展的系统。正是有了这个粘合剂的帮助,才实现了比较彻底的独立组件开发。

说它是“比较彻底”,是因为它极大的减少了组件之间的依赖。在你开发一个组件时,基本上不会因为其它组件没有开发完成,或出现Bug而影响到你的进度。

但是,它并没有完全消除开发时组件之间的依赖,你仍然得依赖于其它组件提供的API接口。为此,我们不得不把一个组件拆成两个jar包:一个component-api.jar,一个component-impl.jar。由于api包内全是公用接口和Value Object,所以它相对稳定,可以早早的提供出来。这样,一个组件如果要使用另一个组件的服务,在开发阶段,只须依赖于api包即可。运行时,Spring再根据服务提供组件的配置信息找到正确的实现类。

 

昨天,我们在一个讨论会上发现了一个有趣的问题:

组件UIA是一个UI组件,它要求提供一些数据,于时它把自己的要求写时接口ProviderA中。组件C1和C2是两个不同的业务组件,它们的UI中都有使用UIA这个组件,而它们都提供了自己的数据接口ServiceC1和ServiceC2。

ProviderA所要求的方法,在ServiceC1和ServiceC2中都有提供。这个时候怎么做才能使各个组件完独立呢。

一、让ServiceC1和ServiceC2继承于ProviderA。但是这样将导致业务组件依赖于UI组件。有谁知道一共有多少个UI组件需要依赖啊?而且UI组件是最易变的。

二、把ProviderA从uia.jar抽出来,放到单独的uia-api.jar中。这个就未免小题大做了。一个系统少说也有几十个UI组件,难道要生成上百个jar包不成?

三、把所有的UI的要求的API都抽出来,放到一个ui-api.jar中。这样jar包是少了,可是单个的UI组件就失去独立性了。

上面三个方案,不管怎么管理UI组件的接口,都没有解决业务组件依赖于不定数目的UI组件这个问题。

 

最后,我们采用的方法是:把UI组件视为某个业务组件的子组件,UI组件自己不定义接口。所有对外的接口和对UI的接口,都放在业务组件的api包中。

这样做,业务组件和UI组件都依赖于api包,互相之间没有依赖。当然,这样做,UI组件就不能游离于大的业务组件之外。而我们采用这个方案的原因也在于,我们认定为多个组件提供服务的UI组件是很少的。

 

显然我们采用的方法只是就事论事的一个折衷方案。并没有解决服务提供者和消费者之间的交叉依赖。

要解决这种交叉依赖,我的思路是再提供一个接口之间的粘合机制。消费者定义自己要求的服务接口,提供者定义自己提供的服务接口。最后用一个配置文件,将二者粘合起来。

目前,Spring还没有提供这种功能。

posted @ 2007-05-11 10:00 Welkin Hu 阅读(965) | 评论 (9)编辑 收藏

2007年5月10日 #

Windows网上邻居互访的基本条件

1) 双方计算机打开,且设置了网络共享资源;
2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务;
3) 双方都正确设置了网内IP地址,且必须在一个网段中;

4) 双方的计算机中都关闭了防火墙,或者防火墙策略中没有阻止网上邻居访问的策略。



Windows 98/2000/XP/2003访问XP的用户验证问题



首先关于启用Guest为什么不能访问的问题:



1、默认情况下,XP 禁用Guest帐户



2、默认情况下,XP的本地安全策略禁止Guest用户从网络访问



3、默认情况下,XP的 本地安全策略 -> 安全选项 里,"账户:使用空密码用户只能进行控制台登录"是启用的,也就是说,空密码的任何账户都不能从网络访问只能本地登录,Guest默认空密码......



所以,如果需要使用Guest用户访问XP的话,要进行上面的三个设置:启用Guest、修改安全策略允许Guest从网络访问、禁用3里面的安全策略或者给Guest加个密码。



有时还会遇到另外一种情况:访问XP的时候,登录对话框中的用户名是灰的,始终是Guest用户,不能输入别的用户帐号。



原因是这个安全策略在作怪(管理工具 -> 本地安全策略 -> 安全选项 -> "网络访问:本地帐户的共享和安全模式")。默认情况下,XP的访问方式是"仅来宾"的方式,那么你访问它,当然就固定为Guest不能输入其他用户帐号了。



所以,访问XP最简单的方法就是:不用启用Guest,仅修改上面的安全策略为"经典"就行了。别的系统访问XP就可以自己输入帐户信息。



至于访问2003,默认情况下2003禁用Guest,但是没有 XP 那个讨厌的默认自相矛盾的来宾方式共享,所以可以直接输入用户名密码访问。



一个小型办公局域网,都是winxp系统,都能上外网,也能看到对方计算机,却不能看到对方共享的计算机提示网络路径不正确,或你没有权限使用网络大概就是这个意思 我记的不太清楚!!来宾帐户我也启用了!winxp的防火墙也是关闭的,ip地址也没什么问题!!



原因:Win2000/XP中存在安全策略限制。



有时,Win2000/XP"聪明"过了头,虽然我们已经启用了Guest账户,从Win98中却仍然无法访问Win2000/XP,比如使用了类似瑞星等的防火墙漏洞修补,它会修改"拒绝从网络访问这台计算机"的策略,按下面的方法修改回来:



开始 -> 运行 -> gpedit.msc -> 计算机配置 -> windows设置 -> 本地策略 -> 用户权利分配 -> 删除"拒绝从网络访问这台计算机"中的guest用户。



Win2000/XP与Win98互访



如果两台电脑都使用Win2000/XP操作系统,那么组建局域网是一件非常简单轻松的事情,当硬件连接完成后,正常情况下立即可以在"网上邻居"中看到对方。但如果局域网中有一台电脑使用Win98,那情况可就不一定了,我们经常会发觉虽然Ping命令可以通过,但仍然无法在"网上邻居"中实现互访,这时该怎么办呢?




对策一:在Win2000/XP中启用Guest用户。在Win2000/XP系统安装之后会缺省建立两个用户账户,即Administrator(系统管理员)和Guest(来宾账户),所有在本地计算机没有被分配到账户的用户都将默认使用Guest账户,该账户是没有密码的。不过,在缺省设置下,这个Guest账户并未被启用,我们可以从"控制面板|管理工具|计算机管理|本地用户和组|用户"中找到 "Guest"账户,并用鼠标右击打开"Guest属性"对话框,去除这里的"账户已停用"复选框上的对钩标记,这样退出后就可以从Win98中访问到 Win2000/XP了。



其实,启用了Guest账户后,最大的好处是从Win98访问Win2000/XP时就不需要输入用户名和密码了,这种方法比较适合于用户不确定、访问量较大的局域网,但对家庭用户来说并不适用。



对策二:检查Win2000/XP中是否存在安全策略限制。有时,Win2000/XP"聪明"过了头,虽然我们已经启用了Guest账户,从 Win98中却仍然无法访问Win2000/XP,这时就要从"控制面板|管理工具|本地安全策略|本地策略|用户权利指派"中找到"从网络访问此计算机 "或者"拒绝从网络访问这台计算机",然后检查一下其中是否出现了Guest账户或者其他对应的账户,然后根据不同情况进行添加或者删除即可。



对策三:停用本地连接上的防火墙。防火墙是充当网络与外部世界之间的保卫边界的安全系统,微软在WinXP中为用户提供了一个内置的Internet连接防火墙(ICF),启用后可以限制某些不安全信息从外部进入内部网络。不过,如果您是在本地连接上启用了这个防火墙,那么就会造成工作组之间无法互访,出现"XXX无法访问"、"您可能没有权限使用网络资源"、"请与这台服务器的管理员联系以查明您是否有访问权限"、"找不到网络路径"等类似的提示,此时请停用本地连接的防火墙屏蔽。



对策四:为WinXP添加NetBEUI协议。其实,直接添加NetBEUI协议对于解决不能互访的问题有时反而更为简单一些,而且它可以解决上面提到的启用防火墙的问题。Win98安装时会自动安装NetBEUI协议,但由于WinXP已经不再提供对NetBEUI协议的技术支持,因此只能手工添加了。



找出WinXP安装光盘,进入"valueadd\Msft\Net\ Netbeui"文件夹下,这里有Nbf.sys、Netbeui.txt、Netnbf.inf共3个文件,先将Nbf.sys文件复制到本机的 "Windows\System32\Drivers"文件夹下(这里的本机指安装了WinXP的那台电脑),再将Netnbf.inf文件复制到本机的 "Windows\INF"文件夹下,Netbeui.txt文件可有可无。不过, INF文件夹具有隐藏属性,用户需要先在WinXP下的"工具|属性"窗口中选择显示文件才可以看到该目录。



对策五:启用 Win98中的"文件及打印机共享"。这是一个很简单但却经常被人忽略的问题,就是装有Win2000/XP的机器虽然可以从"网上邻居"中发现装有 Win98的机器,但却无法访问,这是因为Win98未启用"允许其他用户访问我的文件"而造成的,启用该选项就可以解决这个问题。



当然,除了上面提到的各种原因外,还有两台电脑不处于同一工作组中,或者是两台电脑的内部IP地址发生了冲突,甚至包括Hub故障、线路故障等。

posted @ 2007-05-10 21:48 Welkin Hu 阅读(292) | 评论 (0)编辑 收藏

2007年5月4日 #

     摘要: Powerdesigner是我最喜欢的建模软件,其功能最全,易用性最好,使用感受最舒服。可扩展性也非常好。
Powerdesigner对MDA的支持很灵活。其实,MDA工具所要做的事情,就是UML模型与代码间的双向转换,这里面有两个关键点:
1、模型生成的代码不能是垃圾代码,要正确,还要符合我们所指定的编码规范——尤其是注释。
2、从代码到模型再到代码时,原始代码中的所有内容应当充分保留。不应发生注释或方法体丢失。
我根据特定的编码规范,通过二次定制powerdeisgner的java 5语言成功实现了上述MDA特性。  阅读全文
posted @ 2007-05-04 15:57 Welkin Hu 阅读(436) | 评论 (0)编辑 收藏

2007年4月24日 #

AOP的概念已经热了很久了,我一直不太关注,也不太理解这个面向方面编程中的方面是什么意思。由于AOP和OOP仅一字之差,所以在网上看到大量的文章来拿这两个作对比,看完后还是稀里糊涂的。

 

这段时间开始拿Spring做新产品,于是开始仔细研究AOP。这才发现AOP和OOP讲的根本不是同一类的东西。 

AOP中的方面是指问题的一个方面,相对于问题的全部来说的。AOP就是针对问题的一个方面编程。它把一个问题(或者说是需求)从程序级别上拆分成几个方面,让程序员在编程时只关注自己应当关注的方面,而完全忽略其它的方面。最后由AOP框架来组合不同程序员(或者说是不同模块)的程序。

 

从这点上来说,AOP的确对模块化开发有很大的裨益。



AOP的好处,主要有两点。
一、完全消除了编码时模块之间的依赖,解决了团队开发中一龙拦住千江水的瓶颈问题。当然,做到这一点除了AOP外,还必须做到面向接口编程。
二、可以在任意阶段,向已有功能模块中填加新功能,且不侵入原有功能。
posted @ 2007-04-24 12:07 Welkin Hu 阅读(1563) | 评论 (2)编辑 收藏

仅列出标题  下一页