浩's profile灯笼PhotosBlog Tools Help
Photo 1 of 25
June 15

独自等待-夏雨

其实主要目的不是看《独自等待》
只是因为看到《江北好人》中居然有夏雨饰演,但是实在看不下去一不小心,又把《独自等待》看了一遍。
个人对夏雨的评价是就两部片子《阳光灿烂的日子》、《独自等待》,演些本色的还不错。
至于拓宽戏路,那就是扯犊子了。
 
曾经看过他对自己性格的描述
真如同《独自等待》
April 07

否极泰来

……
February 19

一些话

1.不要轻易剥夺别人的希望,也许是对方唯一的希望。(我们自己也一样)
2.生气的时候不要作出什幺决定。
3.不要在雇工们工作没有完成的时候就付酬金。
4.小心那些一无所有的人。
5.学会礼貌而灵活地说“不”。
6.不要指望生活会是完全公平的。
7.如果一场战役的失败会为你赢来整场战争的胜利,不要犹豫,果断地放弃。
8.不要怕说不知道。
9.每天称赞3个人。
10.一年至少欣赏一次黎明的到来。
11.多看别人的眼睛。
12.经常说“谢谢”。
13.用你希望别人对待你的方式去对待别人。
14.结交新朋友,巩固旧朋友。
15.保守秘密。
16.及时承认自己的错误。
17.学会倾听,有时机遇就在倾听时轻轻地敲你的门。
18.对坏话要充耳不闻。
19.能够改变世界的绝妙注意往往来自于独立工作的人。
20.如果你决定站在哪一边,就要有决心和信心。
21.如果你有一个柠檬,就要想办法把它变成柠檬汁。
22.洗澡的时候唱唱歌。
23.永远不要让人看到你醉晕晕的样子。
24.只能把那些可还可不还的书借给别人。
25.选择生活伴侣时要慎之又慎,这决定着你90%的幸福。
February 10

Now!

……
February 09

Past

……
December 22

纪念08年冬天-兼纪念潘小利

      其实我并不知道冬至到底有什么习俗,因为直到06年冬天在北京我才知道有个吃饺子的风俗,直到08年冬天我才知道有祭奠故去的人的风俗。
      对于我来说,08年的冬天是各种各样的梦交织的恍惚。
      结束了加班,空着肚子回到冰冷的了无生机的房间,身体和精神的疲倦让我趴在沙发上,顺手打开电视去看ICS那全是外语的频道。困意从脊柱上慢慢爬上大脑,沉重的眼皮挣扎了几下,关上了心灵的窗户,我睡着了。
      我梦到了xlpan,也就是潘小利。我们重复了那次讨论“我们在客户办公室外面走廊上站着说了两个小时,顺便说一句:他一直提着那个足足有 4kg的笔记本,真个过程我很愤慨,充满着我对近况的不满,从同事到客户到公司,但是他却一直很平静的帮我分析问题的出处和处理方法,最后我被说服走回去继续工作,也许心情还是很糟,但是已经平静下来。”
      突然窗外不知道是什么一声巨响把我从梦中惊醒,我的手机兼职手表告诉我现在是08年12月的某个凌晨三点半,我是在做梦。
      没有恐惧,没有怀疑,我平静的又睡着了,我只是想把这个梦做完,我还有很多话要说。
      ……
      我没有再次获得机会,这次大喊大叫的是我的手机兼职闹钟。凑巧的是又一个三个半小时,没有梦,没有后怕,这是一段高质量的睡眠,唯一的遗憾是没有梦到他。
      我竭力想回忆起梦中发生的一切,却什么都想不起来。我能想起的是8年、7年、6年、2年之前,我放弃了,因为我依旧要面对生活,面对起床,面对地铁,面对工作,面对寒冷的08年12月。
November 21

从Tomcat服务器中角色的管理到Struts Menu中使用的角色

刚刚接触Struts Menu的时候,对Struts Menu基于角色的菜单显示很好理解,但是如何将web应用中的角色管理映射到Struts Menu中,是困扰笔者良久的问题。经过摸索,在查阅了Tomcat的手册之后,笔者找到了答案。
  Servlet容器和web应用都可以控制web应用资源的安全,因此Tomcat管理域有容器管理和应用程序管理两种,默认使用容器管理。通常web应用中使用的登陆Servlet和JSP则是应用程序管理。这就涉及到Realm的概念。
  Tomcat在%CATALINA_HOME%/conf/server.xml文件中配置Realm,结合在%CATALINA_HOME%/WEB-INF/mywebapp/web.xml文件中配置的<security-constraint>,定义了存储用户和角色的信息,以及进行用户验证的方式。
  Tomcat中定义的Realm有如下几种实现:UserDatabaseRealm、JDBCRealm、JNDIRealm和JAASRealm。下载Tomcat解压缩后默认使用的是UserDatabaseRealm。该Realm从%CATALINA_HOME%/conf/tomcat-users.xml静态文件中加载内存,Tomcat运行期间不会动态加载。因此所有的用户、角色和密码都是在Tomcat启动之前配置好的,只存在于内存中。修改tomcat-users.xml文件后必须重新启动Tomcat,该文件的具体配置请参考Tomcat手册。
  本文要着重介绍的是JDBCRealm,该Realm使用关系数据库,能够动态访问数据。用户、角色和密码都保存在数据库中,一旦数据库有变化,JDBCRealm会立即访问。相应,JDBCRealm的设置需要数据库的访问参数。Tomcat5.0.28中给出了几种数据库的配置参数,示例如下:
  <Realm className="org.apache.catalina.realm.JDBCRealm"
  debug="99" digest="MD5"
   driverName="oracle.jdbc.driver.OracleDriver"
   connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
   connectionName="scott" connectionPassword="tiger"
   userTable="users" userNameCol="user_name" userCredCol="user_pass"
   userRoleTable="user_roles" roleNameCol="role_name" />
  属性说明如下:
  className是实现Realm的类名,对于JDBCRealm必须是org.apache.catalina.realm.JDBCRealm。
  debug设置调试信息的详细程度等级,0表示不调试,数字越大越详细。
  digest是数据库中密码字段的加密摘要算法名称,有SHA、MD2或MD5,默认是cleartext,即不加密。
  driverName是数据库访问的JDBC驱动
  connectionURL是数据库访问URL参数
  connectionName和connectionPassword是访问数据库的名称和密码
  userTable是web应用中存储用户信息的表名
  userNameCol是用户信息表中存储用户登陆名称的字段名
  userCredCol是用户信息表中存储用户登陆密码的字段名
  userRoleTable是将用户角色映射表名
  roleNameCol是角色表中存储角色名称的字段名
  有了这些定义,web应用中定义的用户和角色就可以在Struts Menu中,用于配置基于角色可见与否的菜单。

刚刚接触Struts Menu的时候,对Struts Menu基于角色的菜单显示很好理解,但是如何将web应用中的角色管理映射到Struts Menu中,是困扰笔者良久的问题。经过摸索,在查阅了Tomcat的手册之后,笔者找到了答案。 Servlet容器和web应用都可以控制web应用资源的安全,因此Tomcat管理域有容器管理和应用程序管理两种,默认使用容器管理。通常web应用中使用的登陆Servlet和JSP则是应用程序管理。这就涉及到Realm的概念。 Tomcat在%CATALINA_HOME%/conf/server.xml文件中配置Realm,结合在%CATALINA_HOME%/WEB-INF/mywebapp/web.xml文件中配置的<security-constraint>,定义了存储用户和角色的信息,以及进行用户验证的方式。 Tomcat中定义的Realm有如下几种实现:UserDatabaseRealm、JDBCRealm、JNDIRealm和JAASRealm。下载Tomcat解压缩后默认使用的是UserDatabaseRealm。该Realm从%CATALINA_HOME%/conf/tomcat-users.xml静态文件中加载内存,Tomcat运行期间不会动态加载。因此所有的用户、角色和密码都是在Tomcat启动之前配置好的,只存在于内存中。修改tomcat-users.xml文件后必须重新启动Tomcat,该文件的具体配置请参考Tomcat手册。本文要着重介绍的是JDBCRealm,该Realm使用关系数据库,能够动态访问数据。用户、角色和密码都保存在数据库中,一旦数据库有变化,JDBCRealm会立即访问。相应,JDBCRealm的设置需要数据库的访问参数。Tomcat5.0.28中给出了几种数据库的配置参数,示例如下: <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" digest="MD5" driverName="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL" connectionName="scott" connectionPassword="tiger" userTable="users" userNameCol="user_name" userCredCol="user_pass" userRoleTable="user_roles" roleNameCol="role_name" /> 属性说明如下: className是实现Realm的类名,对于JDBCRealm必须是org.apache.catalina.realm.JDBCRealm。 debug设置调试信息的详细程度等级,0表示不调试,数字越大越详细。 digest是数据库中密码字段的加密摘要算法名称,有SHA、MD2或MD5,默认是cleartext,即不加密。 driverName是数据库访问的JDBC驱动 connectionURL是数据库访问URL参数 connectionName和connectionPassword是访问数据库的名称和密码 userTable是web应用中存储用户信息的表名 userNameCol是用户信息表中存储用户登陆名称的字段名 userCredCol是用户信息表中存储用户登陆密码的字段名 userRoleTable是将用户角色映射表名 roleNameCol是角色表中存储角色名称的字段名有了这些定义,web应用中定义的用户和角色就可以在Struts Menu中,用于配置基于角色可见与否的菜单。

Struts Menu中基于角色的权限管理

1. struts-menu Permissions
  1.1. 背景
  PermissionsAdapter接口,在菜单框架中定义可插入的适配器,该适配器原来校验对菜单的访问。接口中只有一个方法:public boolean isAllowed(MenuComponent menu),参数是menu-config.xml文件中定义的一个菜单(Menu)或菜单项(Item),该方法判断该菜单是否允许被显示。
  在显示菜单的时候,每个菜单或菜单项都要作为参数调用isAllowed方法,如果返回true就显示该菜单,否则就不显示菜单。
  Struts-menu项目中内置有类RolesPermissionsAdapter实现了PermissionsAdapter接口。该适配器在容器管理安全性是被用来进行菜单访问的验证,将web.xml文件中定义的用户安全角色映射到menu-config.xml文件中设置的菜单/菜单项允许访问角色列表。其中的角色是在。
  1.2. 步骤0
  该步骤通常是J2EE/JAAS等安全配置的一部分。为每个用户或用户组分配角色。角色是在web.xml文件中定义的。
  1.3. 步骤1:为菜单定义PermissionsAdapter
  用来显示菜单的JSP标记<menu:useMenuDisplayer/>标记中有一个可选的属性:permissions。如果设置了该属性,该属性值就作为名字,在application/request/session/page域内查找PermissionsAdapter的对象。然后将找到的适配器应用到菜单的显示中。
  值得注意的是,在permissions的属性值中有一个值是特殊处理的――rolesAdapter。如果设置了permissions="rolesAdapter",就说明在验证菜单是否显示的过程中,不是在application/request/session/page域中查找适配器,而是创建并使用新的RolesPermissionsAdapter对象。这样就只需要在<menu:useMenuDisplayer/>标记中添加属性permissions="rolesAdapter",而无需定义自己的PermissionsAdapter实现。
  1.4. 步骤2:将角色映射到menu-config.xml中的菜单/菜单项
  在menu-config.xml文件中的<Menu/>和<Item/>标记有一个可选的属性:roles。该属性在与RolesPermissionsAdapter联合使用的时候,其值是所有可以看到该菜单/菜单项的角色列表,角色之间以空格分隔。
  RolesPermissionsAdapter对象会根据空格从角色列表中取得各个角色,并为每个角色调用request.isUserInRole()方法。对于调用返回true的角色,就显示对应的菜单/菜单项。
  例如,在menu-config.xml文件中配置如下:
  <Menu name="PrefsMenu" title="Preferences" roles="User">
   <Item name="UserPrefs" title="User Preferences" page="prefs.do"/>
   <Item name="ModPrefs" title="Moderator Preferences"
   page="modPrefs.do" roles="Moderator System"/>
   <Item name="AdminPrefs" title="Site Preferences"
   page="sitePrefs.do" roles="System"/>
  </Menu>
  说明:任何User角色的用户都能够看到该菜单,也就是自动看到User Preferences菜单项。只有Moderator和System角色的用户才能看到Moderator Preferences菜单项。而只有System角色的用户才能够看到Site Preferences菜单项。
  当然,用户看不到不等于没有权限访问,用户可以直接输入连接进行访问。因此要避免非法访问,还要进行必要的安全措施。
  1.5. 示例(rolesMenu.jsp)
  1.5.1. menu-struts.xml文件中
   <Menu name="Permissions" title="Permissions" roles="tomcat,role1">
   <Item title="Change" location="permissionsForm.jsp"/>
  </Menu>
  roles属性给出了两个能够看到该菜单的角色:tomcat,role1
  1.5.2. JSP页面中
  <menu:useMenuDisplayer name="ListMenu"
   bundle="org.apache.struts.action.MESSAGE"
   permissions="rolesAdapter">
   <menu:displayMenu name="ToDoListMenuFile"/>
   <menu:displayMenu name="ToDoListMenuEdit"/>
   <menu:displayMenu name="Permissions"/>
  </menu:useMenuDisplayer>
  给出permissions属性,表示显示的菜单要进行角色的验证

1. struts-menu Permissions 1.1. 背景 PermissionsAdapter接口,在菜单框架中定义可插入的适配器,该适配器原来校验对菜单的访问。接口中只有一个方法:public boolean isAllowed([url=file:///C:JBuilder9thirdpartystruts-menu-2.3docsapidocsnetsfnavigatormenuMenuComponent.html]MenuComponent[/url] menu),参数是menu-config.xml文件中定义的一个菜单(Menu)或菜单项(Item),该方法判断该菜单是否允许被显示。在显示菜单的时候,每个菜单或菜单项都要作为参数调用isAllowed方法,如果返回true就显示该菜单,否则就不显示菜单。 Struts-menu项目中内置有类RolesPermissionsAdapter实现了PermissionsAdapter接口。该适配器在容器管理安全性是被用来进行菜单访问的验证,将web.xml文件中定义的用户安全角色映射到menu-config.xml文件中设置的菜单/菜单项允许访问角色列表。其中的角色是在。 1.2. 步骤0 该步骤通常是J2EE/JAAS等安全配置的一部分。为每个用户或用户组分配角色。角色是在web.xml文件中定义的。 1.3. 步骤1:为菜单定义PermissionsAdapter 用来显示菜单的JSP标记<menu:useMenuDisplayer/>标记中有一个可选的属性:permissions。如果设置了该属性,该属性值就作为名字,在application/request/session/page域内查找PermissionsAdapter的对象。然后将找到的适配器应用到菜单的显示中。值得注意的是,在permissions的属性值中有一个值是特殊处理的――rolesAdapter。如果设置了permissions="rolesAdapter",就说明在验证菜单是否显示的过程中,不是在application/request/session/page域中查找适配器,而是创建并使用新的RolesPermissionsAdapter对象。这样就只需要在<menu:useMenuDisplayer/>标记中添加属性permissions="rolesAdapter",而无需定义自己的PermissionsAdapter实现。 1.4. 步骤2:将角色映射到menu-config.xml中的菜单/菜单项在menu-config.xml文件中的<Menu/>和<Item/>标记有一个可选的属性:roles。该属性在与RolesPermissionsAdapter联合使用的时候,其值是所有可以看到该菜单/菜单项的角色列表,角色之间以空格分隔。 RolesPermissionsAdapter对象会根据空格从角色列表中取得各个角色,并为每个角色调用request.isUserInRole()方法。对于调用返回true的角色,就显示对应的菜单/菜单项。 例如,在menu-config.xml文件中配置如下: <Menu name="PrefsMenu" title="Preferences" roles="User"> <Item name="UserPrefs" title="User Preferences" page="prefs.do"/> <Item name="ModPrefs" title="Moderator Preferences" page="modPrefs.do" roles="Moderator System"/> <Item name="AdminPrefs" title="Site Preferences" page="sitePrefs.do" roles="System"/> </Menu> 说明:任何User角色的用户都能够看到该菜单,也就是自动看到User Preferences菜单项。只有Moderator和System角色的用户才能看到Moderator Preferences菜单项。而只有System角色的用户才能够看到Site Preferences菜单项。当然,用户看不到不等于没有权限访问,用户可以直接输入连接进行访问。因此要避免非法访问,还要进行必要的安全措施。 1.5. 示例(rolesMenu.jsp) 1.5.1. menu-struts.xml文件中 <Menu name="Permissions" title="Permissions" roles="tomcat,role1"> <Item title="Change" location="permissionsForm.jsp"/> </Menu> roles属性给出了两个能够看到该菜单的角色:tomcat,role1 1.5.2. JSP页面中 <menu:useMenuDisplayer name="ListMenu" bundle="org.apache.struts.action.MESSAGE" permissions="rolesAdapter"> <menu:displayMenu name="ToDoListMenuFile"/> <menu:displayMenu name="ToDoListMenuEdit"/> <menu:displayMenu name="Permissions"/> </menu:useMenuDisplayer> 给出permissions属性,表示显示的菜单要进行角色的验证

Struts Menu中文文档综述

1. Overview
  Struts Menu应用是一个JSP标记的集合,支持从XML文件生成各种不同菜单系统。Struts Menu 2.0进行了重构,使用Velocity Templates定义菜单。
  2. User Guide
  2.1. 从1.x迁移到2.x
  要从Struts Menu1.x升级到2.x,需要做如下改变:
  l 修改标记库声明的URI,去掉“1.2”
  <%@ taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>
  l 修改<plug-in>,使用新的包名“net.sf.navigator”
  <plug-in className="net.sf.navigator.menu.MenuPlugIn">
  l 修改menu-config.xml文件,使用新的包名“net.sf.navigator”
  <Displayer name="Simple" type="net.sf.navigator.displayer.SimpleMenuDisplayer"/>
  2.2. 快速启动
  l 下载struts-menu分发包
  l 解压缩到本地目录
  l 下载并安装Tomcat或其它Java Servlet容器
  l 将struts-menu.war文件拷贝到Tomcat服务器的webapps目录下,启动服务器
  l 浏览http://localhost:8080/struts-menu
  2.3. 将Struts Menu集成到应用中
  Struts Menu可以很方便得集成到Struts应用中,也将能够集成到其它非struts的应用中。下面是继承标记库的步骤。
  你所需要做的就是将struts-menu.jar文件拷贝到WEB-INF/lib目录下,并在JSP页面中使用标记的URI以声明标记库。
  对于Struts Menu 2.1,还需要将Jakarta的Standard Tag Library Jar拷贝到WEB-INF/lib目录下。
  l 将struts-menu.jar文件拷贝到WEB-INF/lib目录下
  l 在struts-config.xml文件中添加<plug-in>设置
  <plug-in className="net.sf.navigator.menu.MenuPlugIn">
  <set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/>
  </plug-in>
  l 在WEB-INF/menu-config.xml文件中声明菜单属性。下面是一个示例:
  <Menu name="contactMenu" title="Contact" location="?Contact">
   <Item name="email" title="E-Mail" location="?EMail"/>
   <Item name="phone" title="Phone" location="?Phone"/>
  </Menu>
  详细情况请参考例子应用的WEB-INF目录下的menu-config.xml文件,并修改该文件以适应自己的应用。如果要了解所有相关属性,请参考MenuBase类的标准文档。
  l 在JSP页面中添加标记库的声明
  <%@ taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>
  l 在JSP页面中添加标记库代码以生成菜单
  <menu:useMenuDisplayer name="TabbedMenu"
  bundle="org.apache.struts.action.MESSAGE">
   <menu:displayMenu name="Home"/>
   <menu:displayMenu name="About"/>
  </menu:useMenuDisplayer>
  其中,name="TabbedMenu"是在menu-config.xml文件中定义的。如下:
  <Displayer name="TabbedMenu" type="net.sf.navigator.displayer.TabbedMenuDisplayer"/>
  要使用可定制的Velocity模板生成菜单,需要将Velocity集成到web应用中。具体步骤如下:
  l 确保menu-config.xml文件有如下定义:
   <Displayer name="Velocity" type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>
  l 将Velocity的相关jar文件拷贝到WEB-INF/lib目录下
  l 将globalMacros.vm文件添加到WEB-INF/classes目录下
  l 在JSP页面中,修改为name="Velocity",并将config属性指到一个文件(如config="/templates/tabs.html"),如果文件在WEB-INF/classes目录下,就是config="tabs.html"。
  3. FAQ
  3.1. 在使用菜单访问JSP时抛出异常:
  org.apache.jasper.JasperException: Could not obtain the menu repository
  解决方法:
  检查struts-config.xml文件,确保添加如下plug-in设置
  <plug-in className="net.sf.navigator.menu.MenuPlugIn">
   <set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/>
  </plug-in>
  <!-- The menuConfig property is an optional attribute. It is set to /WEB-INF/menu-config.xml by default. -->
November 16

eclipse的快捷键

Ctrl+1   快速修复(最经典的快捷键,就不用多说了)
Ctrl+D:   删除当前行
Ctrl+Alt+↓   复制当前行到下一行(复制增加)
Ctrl+Alt+↑   复制当前行到上一行(复制增加)
Alt+↓   当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑   当前行和上面一行交互位置(同上)
Alt+←   前一个编辑的页面
Alt+→   下一个编辑的页面(当然是针对上面那条来说了)
Alt+Enter   显示当前选择资源(工程,or   文件   or文件)的属性
Shift+Enter   在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter   在当前行插入空行(原理同上条)
Ctrl+Q   定位到最后编辑的地方
Ctrl+L   定位在某行   (对于程序超过100的人就有福音了)
Ctrl+M   最大化当前的Edit或View   (再按则反之)
Ctrl+/   注释当前行,再按则取消注释
Ctrl+O   快速显示   OutLine
Ctrl+T   快速显示当前类的继承结构
Ctrl+W   关闭当前Editer
Ctrl+K   参照选中的Word快速定位到下一个
Ctrl+E   快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl+/(小键盘)   折叠当前类中的所有代码
Ctrl+×(小键盘)   展开当前类中的所有代码
Ctrl+Space   代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)
Ctrl+Shift+E   显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+J   正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes   line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl+Shift+J   反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+F4   关闭所有打开的Editer
Ctrl+Shift+X   把当前选中的文本全部变为小写
Ctrl+Shift+Y   把当前选中的文本全部变为小写
Ctrl+Shift+F   格式化当前代码
Ctrl+Shift+P   定位到对于的匹配符(譬如{})   (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)
下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)
Alt+Shift+R   重命名
Alt+Shift+M   抽取方法   (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt+Shift+C   修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt+Shift+L   抽取本地变量(   可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt+Shift+F   把Class中的local变量变为field变量   (比较实用的功能)
Alt+Shift+I   合并变量(可能这样说有点不妥Inline)
Alt+Shift+V   移动函数和变量(不怎么常用)
Alt+Shift+Z   重构的后悔药(Undo)(  
Ctrl+Shift+O   最高效的快捷键,导入未导入的包,删除多余的包。Ctrl+Shift+/   注释代码块,java和jsp文件有所不同。
Ctrl+Shift+W   关闭当前所有打开文件。
Ctrl+Shift+L   弹出所有快捷方式提示框
Alt+Shift+X   弹出运行ant、java文件、junit等快捷方式,非常实用。
Template:Alt   +   /
修改处:窗口- >喜好设定- >工作台- >按键- >编辑- >内容辅助。
个人习惯:Shift+SPACE(空白)。简易说明:编辑程序代码时,打sysout   +Template激活键,就
会自动出现:System.out.println();  

企业级的解决方案

企业级的解决方案当然要采用企业级技术:灵活开放的技术架构,性能,安全,稳定性等达到企业级应用的品质。本产品采用的Java企业版技术安全、强大、跨平台,久经考验、值得信赖,是最适合企业使用的技术平台
l   基于Spring   +   Hibernate的轻量级技术架构,灵活,易扩展,移植性好,不需要复杂昂贵的EJB容器
l   采用支持MVC   2,SOA的多层(n-tiers)系统架构(见系统架构设计图),强大、灵活、高效、易维护、可扩展
l   整合众多优秀、可信的开源框架,满足企业级应用所需的各种技术和要求,包括Sitemesh,JBoss   Rules,Birt,Acegi   security等等
l   本产品支持多种操作系统、数据库、应用服务器、浏览器;真正平台独立
l   支持多种表示层技术:JSP/Velocity/FreeMaker/JSF/XML,界面修改非常方便
l   页面设计遵守CSS2,W3C等规范,兼容主流浏览器如IE(及其变种)、Firefox、Safari等;基于DIV+CSS的页面设计
l   前端网上商店与后端管理系统完全分离,安全、可靠、稳定
l   强大的页面缓存、页面压缩技术可以保证系统性能
------------------------------------------------------
l   Spring   Framework   2.0,包括Spring   MVC
l   Spring是一个较新的轻量级开发框架,本身提供丰富的功能,并能够和现在很多受欢迎的开源框架、标准(例如Hibernate,Velocity,JSF,Quartz等等)方便地集成,大大简化了利用开源技术进行开发的难度,并可以提高开发效率和质量(有较多的文档和指引)。
l   主要的核心思想是使用POJO、Bean容器管理、AOP、Ioc、接口编程等。
l   Spring是本产品使用的最关键的技术/框架,主要用到:事务管理、Bean管理、AOP、MVC、和Hibernate的集成、View层集成、报表集成、Quartz集成、Email等。
l   Hibernate   3.2
l   Hibernate是个流行的开源的O/R框架。可以透明地处理数据存储以及和Java对象的映射。Hibernate可以支持市场上绝大部分的数据库系统。
l   适用范围
l   使用Spring和Hibernate集成。
l   另外HQL是Hibernate里面使用的一种数据查询语言,可以支持所有Hibernate支持的数据库。所以在开发的时候主要使用HQL,避免使用某数据库厂商特定的SQL语法或者存储过程。
l   由于连接在映射里面一般被映射为Collection,并在JSF   +   Spring   +   Hibernate使用里面有一些问题(Hibernate里面的Lazy   Loading和JSF的binding会有一些问题),所以考虑不支持把外键映射为集合,只是当作简单的字段来使用,然后程序员需要在BO层处理这些连接而且这样有个好处是运行的性能比较好。
l   JSP   2.0,JSTL,EL   本系统缺省使用的视图层技术,用来生成HTML返回给浏览器。通过使用JSTL、EL,易读性和可维护性可以媲美Velocity等模版语言,而且有众多的开发工具支持。
l   Servlet   2.4:   系统里面会少量使用Servlet。Servlet是和CGI类似的技术,而且JSP运行之前是先编译为Servlet才运行的。主要在不需要生成HTML但是需要提供其他Web服务的时候使用,例如输出图片。还可能使用的其他Servlet相关的技术有Filter、Listener等。
l   Sitemesh   2.3:   页面排版和装饰框架。负责页面的总体排版。
l   Acegi   security   1.0:基于角色的权限控制安全框架。
l   AJAX   (主要用下面的DWR,scriptaculous,以及Prototype)   :   页面部分更新、以及实现友好的用户交互。
l   DWR   2.0:   一个AJAX服务器端引擎。
l   Prototype:   一个流行的JavaScript框架。
l   JBoss   Rule:   强大的规则引擎。
l   BIRT   (Reporting):   强大的报表设计、生成引擎。
l   Lucene   Lucence:是一个搜索引擎,主要用于网站文章、产品描述的全文搜索等。
l   OsCache:   缓存框架。在本产品主要负责处理页面缓存。
l   EhCache   :缓存框架。在本产品主要负责处理数据缓存,包括Hibernate的二级缓存。
l   Quartz:   计划任务器,负责在后台运行一些任务。
l   Urlrewrite:   重写URL。
l   Commons:   (主要包括DBCP,Pool,Validator等等)使用Commons   Validator进行输入验证等。
l   Displaytag:   表格输出、排版等。
l   FCKeditor   2.3:   可视化的在线HTML编辑器。
l   ANT:   开发时、安装时用到的一些常用的任务。
l   JUnit,DbUnit:   单元测试。
l   LOG4J:   文本的系统日子输出。
l   Velocity:   一个常用的页面模版技术。可以作为视图层的另一种选择。在本产品缺省的配置里面主要用来作为邮件的页面模版。
l   dom4j:SAX   XML解释器。
l   Xerces:XML解释器。
September 09

更改sql server表、存储过程、试图的所有者的方法

今天下午还原sql数据库以后,不管怎么样也无法登陆论坛,仔细检查才发现,sql server表还是以前建立的用户,而又无法删除,,这些表的权限都不是DBO, 后来在网上找了半天,才找到解决办法,这里先保存下来。用来解决大家在还原了sql数据库以后,无法删除原登陆用户的问题。

--执行这个语句,就可以把当前库的所有表的所有者改为dbo
exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''


--如果是要用户表/存储过程/视图/触发器/自定义函数一齐改,则用游标(不要理会错误提示)
declare tb cursor local for
select 'sp_changeobjectowner ''['+replace(user_name(uid),']',']]')+'].['
+replace(name,']',']]')+']'',''dbo'''
from sysobjects
where xtype in('U','V','P','TR','FN','IF','TF') and status>=0
open tb
declare @s nvarchar(4000)
fetch tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch tb into @s
end
close tb
deallocate tb
go

1. sp_changeobjectowner
更改当前数据库中对象的所有者。

语法
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'

参数
[@objname =] 'object'

当前数据库中现有的表、视图或存储过程的名称。object 的数据类型为 nvarchar(517),没有默认值。object 可用现有对象所有者限定,格式为 existing_owner.object。

[@newowner =] 'owner'

即将成为对象的新所有者的安全帐户的名称。owner 的数据类型为 sysname,没有默认值。owner 必须是当前数据库中有效的 Microsoft? SQL Server? 用户或角色或 Microsoft Windows NT? 用户或组。指定 Windows NT 用户或组时,请指定 Windows NT 用户或组在数据库中已知的名称(用 sp_grantdbaccess 添加)。

返回代码值
0(成功)或 1(失败)

注释
对象所有者(或拥有对象的组或角色的成员)对对象有特殊的权限。对象所有者可以执行任何与对象有关的 Transact-SQL 语句(例如 Insert、Update、Delete、Select 或 EXECUTE),也可以管理对象的权限。

如果拥有对象的安全帐户必须要除去,但同时要保留该对象,请使用 sp_changeobjectowner 更改对象所有者。该过程从对象中删除所有现有权限。在运行 sp_changeobjectowner 之后,需要重新应用要保留的任何权限。

由于这个原因,建议在运行 sp_changeobjectowner 之前,编写现有权限的脚本。一旦更改了对象的所有权,可能要使用该脚本重新应用权限。在运行该脚本之前需要在权限脚本中修改对象所有者。有关编写数据库脚本的更多信息,请参见编写数据库文档和脚本。

可以使用 sp_changedbowner 更改数据库的所有者。

权限
只有 sysadmin 固定服务器角色和 db_owner 固定数据库角色成员,或既是 db_ddladmin 固定数据库角色又是 db_securityadmin 固定数据库角色的成员,才能执行 sp_changeobjectowner。

示例
下面的示例将 authors 表的所有者改为 Corporate\GeorgeW。

EXEC sp_changeobjectowner 'authors', 'Corporate\GeorgeW'


请参见
改变数据库所有者:sp_changedbowner

------------------------------以上摘自sql server 的联机丛书
注意:
使用sqlserver2000改变对象(object)(如Table,SP,View)的所有者(owner)时,需要注意一点:
如果对象改变前的owner为dbo,则直接用:exec sp_changeobjectowner 对象名,新的所有者名就可以成功。如果再需要改变该对象的所有者,则要用如下语法:
exec sp_changeobjectowner "[所有者].[对象名]",新的所有者。注意,双引号不可省略,否则提示objectname does not exist。

EXEC sp_changeobjectowner 'cqadmin.authors', 111




2.建与原表结构相同表,然后把数据从原表插入到新表,操作方法:

在sql server企业管理器中选择原表点右键,选择“所有任务/生存SQL脚本”,保存生成的脚本,在脚本中把表的原所有者改成新所有者。然后再把该脚本运行一遍,数据库中就新生成了一个表,所有者是新所有者,原来的表还在数据库中没有被替换。新表和旧表 表名相同,所有者不同,此时的新表中没有数据。

然后再运行下面的语句往新表中插入数据:

Insert INTO CQAdmin.m_actiondef //新所有者.新表名
Select *
FROM RegaltecDefSchema. CQAdministrator.m_actiondef // 数据库名.旧所有者.旧表名
运行完了就做完了,可以把旧表删掉,也可以留着。
 

August 21

Visual C++数据之Win32中的数据类型

标准C或C++没有的数据类型
  
  数据类型  说明
  
  BOOL 布尔变量,实际上是UINT
  
  COLORREF 用作颜色索引的32位整数
  
  DWORD 32位的无符号整数
  
  HANDLE 32位的无符号整数,用作句柄
  
  HINSTANCE 32位的无符号整数,用作实例句柄
  
  HWND 32位的无符号整数,用作窗口句柄
  
  HDC 一个设备描述背景的句柄
  
  LONG 32位带符号整数
  
  LPARAM 32位整数,用作窗口函数或者其他回调函数的参数之一
  
  LPCSTR 指向一个字符串常量的32位指针
  
  LPSTR 定义一个线性的32位字符串指针
  
  LRESULT 32位整数,是窗口函数或者其他回调函数的返回值类型
  
  UINT 定义一个新的Win32数据类型,它会把一个参数强制转换成Windows3.x应用中的16位值 或Win32应用中的32位值
  
  WCHAR 声明一个16位的UNICODE字符,用来表示世界上所有已知的书写语言的符号
  
  WORD 16位的无符号整数
  
  WPARAM 32位整数,用作窗口函数或者其他回调函数的参数之一(在Windows3.x中为16位值)
  
  同时,为了统一变量的命名,在Windows中,不同类型的变量拥有各自的标准前缀,一般情况如表所示。
  不同数据类型的前缀
  前缀 数据类型
  
  c 字符(char)
  
  s 短整数(short)
  
  cb 用于定义对象(一般为一个结构)尺寸的整数
  
  n 整数(integer)
  
  sz 以'\0'结尾的字符串
  
  b 字节
  
  f BOOL
  
  w 字(WORD,无符号短整数)
  
  l 长整数(LONG)
  
  h HANDLE(无符号整数)
  
  m_ 类成员变量
  
  fn 函数(function)
  
  dw 双字(DWORD,无符号长整数) 
 
August 17

查ASC码

目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。因为1位二进制数可以表示(21=)2种状态:0、1;而2位二进制数可以表示(22)=4种状态:00、01、10、11;依次类推,7位二进制数可以表示(27=)128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7 位ASCII码是用七位二进制数进行编码的,可以表示128个字符。

  第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;

  第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

  注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

  为了便于查询,以下列出ASCII码表:

  第128~255号为扩展字符(不常用)

Dec Hx Oct Char Dec Hx Oct Char Dec Hx Oct Char Dec Hx Oct Char
0 0 000 NUL (null) 32 20 040 SPACE 64 40 100 @ 96 60 140 `
1 1 001 SOH (start of heading) 33 21 041 ! 65 41 101 A 97 61 141 a
2 2 002 STX (start of text) 34 22 042 " 66 42 102 B 98 62 142 b
3 3 003 ETX (end of text) 35 23 043 # 67 43 103 C 99 63 143 c
4 4 004 EOT (end of transmission) 36 24 044 $ 68 44 104 D 100 64 144 d
5 5 005 ENQ (enquiry) 37 25 045 % 69 45 105 E 101 65 145 e
6 6 006 ACK (acknowledge) 38 26 046 & 70 46 106 F 102 66 146 f
7 7 007 BEL (bell) 39 27 047 ' 71 47 107 G 103 67 147 g
8 8 010 BS (backspace) 40 28 050 ( 72 48 110 H 104 68 150 h
9 9 011 TAB (horizontal tab) 41 29 051 ) 73 49 111 I 105 69 151 i
10 A 012 LF (NL line feed, new_line) 42 2A 052 * 74 4A 112 J 106 6A 152 j
11 B 013 VT (vertical tab) 43 2B 053 + 75 4B 113 K 107 6B 153 k
12 C 014 FF (NP form feed, new page) 44 2C 054 , 76 4C 114 L 108 6C 154 l
13 D 015 CR (carriage return) 45 2D 055 - 77 4D 115 M 109 6D 155 m
14 E 016 SO (shift out) 46 2E 056 . 78 4E 116 N 110 6E 156 n
15 F 017 SI (shift in) 47 2F 057 / 79 4F 117 O 111 6F 157 o
16 10 020 DLE (data link escape) 48 30 060 0 80 50 120 P 112 70 160 p
17 11 021 DC1 (device control 1) 49 31 061 1 81 51 121 Q 113 71 161 q
18 12 022 DC2 (device control 2) 50 32 062 2 82 52 122 R 114 72 162 r
19 13 023 DC3 (device control 3) 51 33 063 3 83 53 123 S 115 73 163 s
20 14 024 DC4 (device control 4) 52 34 064 4 84 54 124 T 116 74 164 t
21 15 025 NAK (negative acknowledge) 53 35 065 5 85 55 125 U 117 75 165 u
22 16 026 SYN (synchronous idle) 54 36 066 6 86 56 126 V 118 76 166 v
23 17 027 ETB (end of trans. block) 55 37 067 7 87 57 127 W 119 77 167 w
24 18 030 CAN (cancel) 56 38 070 8 88 58 130 X 120 78 170 x
25 19 031 EM (end of medium) 57 39 071 9 89 59 131 Y 121 79 171 y
26 1A 032 SUB (substitute) 58 3A 072 : 90 5A 132 Z 122 7A 172 z
27 1B 033 ESC (escape) 59 3B 073 ; 91 5B 133 [ 123 7B 173 {
28 1C 034 FS (file separator) 60 3C 074 < 92 5C 134 \ 124 7C 174
29 1D 035 GS (group separator) 61 3D 075 = 93 5D 135 ] 125 7D 175 }
30 1E 036 RS (record separator) 62 3E 076 > 94 5E 136 ^ 126 7E 176 ~
31 1F 037 US (unit separator) 63 3F 077 ? 95 5F 137 _ 127 7F 177 DEL

扩充字符集(Extended Character Set)

image:查ASC码-ascii.gif

ISO Latin-1字符集(编码160-255)

编码 字符 编码 字符 编码 字符 编码 字符
160 172 ¬ 184 ¸ 196 Ä
161 ¡ 173 185 ¹ 197 Å
162 ¢ 174 ® 186 º 198 Æ
163 £ 175 ÷ 187 » 199 Ç
164 ¤ 176 188 ¼ 200 È
165 ¥ 177 ± 189 ½ 201 É
166 ¦ 178 ² 190 ¾ 202 Ê
167 179 ³ 191 ¿ 203 Ë
168 ¨ 180 ´ 192 À 204 Ì
169 © 181 µ 193 Á 205 Í
170 ª 182 194 Â 206 Î
171 « 183 · 195 Ã 207 Ï
编码 字符 编码 字符 编码 字符 编码 字符
208 Ð 220 Ü 232 è 244 ô
209 Ñ 221 Ý 233 é 245 õ
210 Ò 222 Þ 234 ê 246 ö
211 Ó 223 ß 235 ë 247 ÷
212 Ô 224 à 236 ì 248 ø
213 Õ 225 á 237 í 249 ù
214 Ö 226 â 238 î 250 ú
215 227 ã 239 ï 251 û
216 Ø 228 ä 240 ð 252 ü
217 Ù 229 å 241 ñ 253 ý
218 Ú 230 æ 242 ò 254 þ
219 Û 231 ç 243 ó 255 ÿ
 
August 14

Jinitiator 1.3.1.18在WIN2003下不能正常工作

关键词:EBS,Oracle Form Builer,Oracle 9ids,JInitiator
由于这方面资料甚少,特共享心得,以便搜索引擎收录。
在win2003下,运行Oracle 9ids的web时,中文都变成了乱码,修改注册表的nls_lang也没有效果。搜索了一下网上的解决方案,基本上确定是win2003缺少部分字体的关系,有人将win98下的字体考到win2003下可解决中文问题,但用xp或者win2000的字体同样还是乱码,但这年头要找98的系统还真不容易。
最终找到一个比较好的解决方法,直接修改JInitiator\lib下的font.properties文件,也有可能是修改font.properties.zh,都试试,将dialog.1设成Simsun,DEFAULT_CHARSET即可解决乱码问题。

JInitiator 1.3.1.21\lib

JInitiator 1.3.1.18\lib下面的font.properties.zh.5.1改成font.properties.zh.5.2就可以了。主要是没有对2003系统提供字体支持

 

 

 

  

August 08

sqlserver2000安装故障

MS SQL Server 2000/"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机。"

以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机。

打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Session Manager中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目

这个设置可能影响到 MS SQL Server 2000 和 MySQL 5.0 的安装。

若 MySQL 5.0 安装配置时提示注册服务失败,除了要在 添加/删除应用程序 中卸载 MySQL 5,还要手工删除所有与 MySQL 设置信息、数据库有关的文件夹和文件,并且通过安装 MySQL 5 后的配置向导在配置新实例之前先 Remove 掉所有已注册(失败)的系统服务。然后再配置 MySQL 5.0 新实例。

下面再转一些SQL SERVER 2000安装的一些问题:

sql的安装问题_以前的某个程序安装已在安装计算机上创建挂起的文件操作 [转贴 2006-09-30 09:38:25 ] 发表者: phil1233   


执行安装程序时,提示错误“以前的某个程序安装已在安装的计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”,根据错误提示重启计算机,错误依然存在。出现这种错误,是因为注册表中,挂起文件的注册项不能被正确地清理所致,打开注册表找----运行---regedit HKEY_LOCAL_MACHINE\SYSTEM\CurrentConstrolSet\Control\Session Manger 删除 PendingFileRenameOperation
看下面:
sql server安装不上

①、用户名必须是administrator。

②、直接双击“数据库安装”不能安装时,可进行程序安装目录下选择SETUPMSDE进行安装或进入到程序安装目录下选择MSDE,进入后双击SETUP。

③、Sql server7.0与Sql server2000不兼容,必须先将7.0删掉后再安装2000。

卸载Sql server7.0没有正确卸载时,会导致注册表中存在SQLSERVER的注册信息,在开始菜单的启动栏中存在服务管理器的启动项,运行时会提示找不到后缀名为.DLL的文件,不能启动服务管理器。

解决办法:在运行中输入“regedit”,进入注册表,找到HKEY_LOCAL_MACHINE注册项,在扩展菜单中选择SOFTWARE打开扩展菜单,找到MicroSoft打开后选择其下的MSSQLServer项,点击右键将这个文件夹删除,即可安装。安装完成后,运行服务管理器时如果提示找不到后缀名为.DLL的文件,在控制面板中安装后的MSDE卸载重新安装,便可解决问题。


当用户机器已经存在MSDE2000时

解决办法:

(1)进入数据库管理,输出进入数据库的用户名和口令(用户名admin,口令默认为空),确定后进入数据库维护窗口,选择数据库恢复,弹出数据库恢复窗口(这里已经默认了相关信息,如需更改可另行设置),直接确定后即可。

(2)直接进行数据库安装,会提示该数据库已经存在,是否覆盖,点击是即可。


当用户机器存在MSDE7.0或以下版本时

解决办法:

1)、将MSDE7.0或以下版本的数据库进行备份。(利用调用数据库的程序或数据库本身)

2)、卸载MSDE7.0或以下版本

3)、安装MSDE2000数据库

4)、用调用MSDE7.0或以下版本的程序恢复刚刚备份的数据库

5)、恢复我们软件所需的数据库。


卸载《中国人事信息管理系统》软件后,再次安装会有安装不成功

解决办法:

①、安装不成功:删除Windows下的mscoree文件和Microsoft.NET文件

②、Framework不能安装:

注册表清理:

删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework文件

删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup文件.


当你想重装sql server,而安装时又出现“您的机子上已经安装有一个实例”的提示时,可以删除program files\Microsoft SQL Server文件夹和注册表信息,再安装。

某某动态链接文件找不到


当出现某某动态链接文件找不到时,可以试着在sql server的安装文件中找到这个文件,复制到系统目录下的system和system32文件夹中(一般在出现这个错误消息时,都会提示哪几个文件夹下缺少这个文件)


当出现安装程序配置服务器失败时,可以试着用一下方法解决

此错误消息可以在系统目录下找到,例如我的系统是win2000,则该文件在C:\WINNT\sqlstp.log

失败一:

正在与服务?

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC 驱动程序 管理器] 驱动程序的 SQLAllocHandle on SQL_H

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC 驱动程序 管理器] 驱动程序的 SQLAllocHandle on SQL_H

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC 驱动程序 管理器] 驱动程序的 SQLAllocHandle on SQL_H

SQL Server 配置?

####################################################################

13:40:06 Process Exit Code: (-1)

13:40:09 安装程序配置服务器失败。参考服务器错误日志和 C:\WINNT\sqlstp.log 了解更多信息。

13:40:09 Action CleanUpInstall:

当出现这个错误时,试一下重装系统文件

我的机子是win2000,在dos下重新运行win2000的安装,然后选择修复,而不是全新安装

修复系统文件之后,再装sql server,则不会出现此错误消息


失败二:

正在与服务?

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC 驱动程序 管理器] 未发现数据源

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC 驱动程序 管理器] 未发现数据源

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC 驱动程序 管理器] 未发现数据源

SQL Server 配置?

####################################################################

13:50:07 Process Exit Code: (-1)

13:50:10 安装程序配置服务器失败。参考服务器错误日志和 C:\WINNT\sqlstp.log 了解更多信息。

13:50:10 Action CleanUpInstall:

当出现这个错误时,是因为在注册表删除了HKEY_LOCAL_MACHINE\SOFTWARE\ODBC中有关sql sever的


失败三:

在与服务?

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC SQL Server Driver][Named Pipes]连接?

[Microsoft][ODBC SQL Server Driver][Named Pipes]ConnectionRead (ReadFile()).

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC SQL Server Driver][Named Pipes]连接?

[Microsoft][ODBC SQL Server Driver][Named Pipes]ConnectionRead (GetOverLappedResult()).

driver={sql server};server=ZHL;UID=sa;PWD=;database=master

[Microsoft][ODBC SQL Server Driver][Named Pipes]连接?

[Microsoft][ODBC SQL Server Driver][Named Pipes]ConnectionRead (GetOverLappedResult()).

SQL Server 配置?

####################################################################

17:17:41 Process Exit Code: (-1)

17:17:45 安装程序配置服务器失败。参考服务器错误日志和

当出现这个错误时,必须安装ODBC修复工具

September 11

纪念我的同事-潘小利

    听到别人说潘小利从跳楼以后的第一反应就是听到张国荣选择在愚人节跳楼的那样的感受:每天都是愚人节。

    我和他同事过一年,他先是我的项目经理,然后是我的部门经理,然而他却没有任何留在我这里的实物,除了回忆。零乱的头发、瘦削得脸庞、过时的眼镜框、春秋冬永远的夹克、永远的西裤、永远的皮鞋,这就是整个外形,现在在我心里无比清晰,甚至强于照片、录像,就像活生生的人站在我眼前。

    我一直称他是领导,这是顺着其他几个同事学来的,他们都是铁道大学mis所的成员,潘小利带他们做东西,的确是领导;再加上潘小利是写C语言出身的,这点更加令当时大学学C的我们感到佩服和崇拜-技术人员的通病。以下都称为领导。

    在那段日子里,我挑出了几件值得回忆的事儿:

    一、进项目组的第一件事就是做一个模块,和mis所那些已经写了一年java的人比起来,我的一个月什么都不是,领导没有给我下死任务,他帮我想了一个简单的开始代码,然后我就一路顺风写了下去。我的工作从此开始了,我的java道路从此开始了,我与同事的交往从此开始了。我很快就融合进了这个集体,程度之深以致于他们也很快就认为我也是mis所的成员,只有当他们聊到以前的事儿而我却一副茫然的样子的时候,大家才恍然大悟。不过领导却从来不犯这样的错误。

    二、有段日子我在客户那里做的不顺,我急切地需要找个人来说说,谁呢,领导。那天我们在客户办公室外面走廊上站着说了两个小时,顺便说一句:他一直提着那个足足有 4kg的笔记本,真个过程我很愤慨,充满着我对项目的不满,从同事到客户到公司,但是他却一直很平静的帮我分析问题的出处和处理方法,最后我被说服走回去继续工作,也许心情还是很糟,但是已经平静下来。

    三、我不是一个病急乱投医的人,发生上面的事儿也是有缘由的,领导经常躲在他那个在办公室最隐秘的地方看动画片、玩游戏(正好是我爱玩的英雄无敌)、下电影,于是乎。我觉得这样一个还充满童心的人是值得相信的,也许我也是一个孩子。

    四、第一个春节会餐,看着一盘蛇肉,想起01年是本命年,我问了一句:我属蛇。领导不以为然地说:我属猪,是不是猪肉都不吃了。哼!本命年呼弄谁呢?

    五、领导回学校教书了,我们依然保持着联系。我碰到麻烦(不管是心理上的还是技术上的)的时候,周末我就会去学校找他聊上一天。他依然很平静,不过看的出,他外形稍微整理了一下,心情也舒坦了很多,业余生活依旧是动画片、游戏、电影、乒乓球。

……

回忆了这么多,只是觉得没有理由能使领导想不开。没有遗书,没有遗言,没有征兆,一个曾经鲜活的生命就那么消失了,三个礼拜前还在msn上聊天,虽然只是寥寥数言。

我不知道我该怎么想,因为其他的同事或这样或那样的猜测,总是让我感到恐惧,我会不会……

我想我不会的,没有迈不过去的坎儿,没有不能面对的困难,没有不能承担的责任,没有轻易决定自己和他人生死的理由,生活毕竟是美好的。

August 03

有些恐惧了

      好久没有去看技术了,和一个老同事聊天居然是什么都不懂了。
      决定现在重新开始捡起来。
      birt,官方网站http://www.eclipse.org/birt。现在拿它作统计报表,现在研究的浅,只是拿它的SQL形式做报表。
      jep,http://www.singularsys.com/jep/。现在拿它作从字符串中解析计算式,用来计算和比较。
      Liferay,代表了完整的J2EE应用,使用了Web、EJB以及JMS等技术,特别是其前台界面部分使用Struts 框架技术,基于XML的portlet配置文件可以自由地动态扩展,使用了Web Services来支持一些远程信息的获取,使用 Apahce Lucene实现全文检索功能。
主要特点:
    1、提供单一登陆接口,多认证模式(LDAP或SQL);
    2、管理员能通过用户界面轻松管理用户,组,角色;
    3、用户能可以根据需要定制个性化的portal layout;
    4、能够在主流的J2EE应用服务器上运行,如JBoss+Jetty/Tomcat,JOnAS;
    5、支持主流的数据库,如PostgreSQL,MySQL;
    6、使用了第三放的开源项目,如Hibernate, Lucene, Struts;
    7、支持包括中文在内的多种语言;
    8、采用最先进的技术 Java, EJB, JMS, SOAP, XML;
 
August 24

(D+44~47)日

从墨脱出来我已经身心俱疲,没有再想下云南的想法。于是革命蹭车去丽江,帅哥去拉萨,我乘了一辆从波密开往成都的卧铺车,离开西藏。一路经过八宿、然乌湖、芒康、康定、泸定、雅安,到达成都。

August 23

(D+43)日

52K过来的路好多了,不一会儿就准备翻山了,我们这辆是头车,司机虽然很年轻,但是已经跑了几年了,很悠闲的领跑,还时不时等一下后面的兄弟。

山势很陡,道路很窄,最危险的也许是之字拐,司机很不在乎。虽然看出他很谨慎,但在拐弯的时候就顺便提及去年或者前年一辆同样的车,由于转弯后档没挂好,路滑,沿着山坡就下去了,幸运的是虽然滑到了山谷,车居然没翻,规规矩矩的车尾着地。还专门给我们指认那个地方,果然那里有一片整齐的下滑痕迹。转弯的时候他甚至故意没换档,让车稍微下滑了一段,然后才得意洋洋的开走。

在这个时候,我突然想到电影的杀手问题,杀手杀人的时候肯定不会弄得满城风雨,活火熔城的局面,他肯定会用小小的代价来继续他的行当。我怎么会想这个,我也不知道,我只知道在这种情况下,我已经将我的安全完全让司机承担,他也要活下去,那么我还要害怕什么。

路通向一片浓雾,在里面行车有种走进失落的世界的感觉,除了汽车的马达声什么声音都没有。所谓的翻山也是过了一个山头而已,有了一点积雪,汽车还在向上。

这次是下山的车给我们让道,帅哥预报前面有个冰渍湖,他来的时候太阳初升,没有浓雾,湖面平静,倒映着雪山蓝天白云,美!果然就在前面我们看到了,不过这次可没有那么好的景色,多云浓雾,还有几辆车停在湖边的浅水里,发动机没有停,看着一层层微波从轮胎传到湖的各处。

终于过山了,路外侧垂直九十度咫尺一座巨大的雪山,我们从相当于胸部的位置下山,司机把车速提高到了四十公里,飙车的感觉真好。雪线以下就能看见牧场,再往下的河滩就是一个聚居地,低低的茅屋散落在各处,却不见一个人。

转了一个大圈子,我们也到达那里,路宽了,我们可以自由行驶,一瞬间我看见一个熟悉的瘦高个子穿着长筒胶靴和橄榄绿的人-灯笼,他正端着一碗泡面站站在路边吃!

手机的“正在搜索网络”提示突然就消失了,我们到了波密!

吃完午饭,老大拦下一辆越野车就直奔拉萨,帅哥一定要休息一天才过去,他住了一个标间,我和革命去那里洗澡。标间真的是标间,感觉真好。
August 22

(D+42)日

我们自己走了最后二百米,上了车。八十公里,五十块一个人,座位是东风的驾驶室,司机是个年轻的四川人。我和帅哥同车,怎么说今天也能到波密。

说墨脱县城完全不通公路是不正确的,主要原因是80K到县城雨季泥石流太严重,公路时常被冲断,维护成本太高,通车几乎没有意义,只有等待雨季结束以后,重新修通公路。不过这个时候已经是冬天,从波密到80K的公路又断了。那么就在平时把各种物资先运到80K,于是这里也就繁荣起来,还是不知道怎么称呼80K,说村太小,说镇子太大,所有活动的中心就是一条泥泞的单行线,只要有一辆车趴窝,大家就只能等。一个小时过去了,汽车没有发动的意思,又一个小时过去了,司机开始睡觉了,再一个小时过去了……原因就是前面有辆车在路中间卸货,红绿灯没有,交警没有,连行政区划业没有,只有各色人等。

下午五点,长长的车队开始蠕动起来了,终于可以出发了。

开出去没有多久,车灯就打开了,进入夜间行车时间。按照道理不该黑这么早,一来是多云天气,一来是在森林里前进。说是公路,简直连乡村土路都说不上,就是我们一路过来的马帮道的加宽,开头这还是好的,都能看出来是条路。很快就开始森林里逡巡,车灯照射距离不远,看起来似乎有层薄薄的水雾,车窗外是高高笔直的树木,偶尔闪过巨大的树墩。我突然有了神游的感觉,就好像站在树木的顶端,看着脚下这只小小的车队就像甲虫一样在森林里左冲右突,艰难的前进,还时常停下来,决定一下前进的方向。路面是没有的,就是树木中间比较宽的不长草的区域,铺着大大小小的鹅卵石。如果我前面说过车在路上跳跃,那么我收回,因为那个时候毕竟只是坑坑洼洼。这里才真的是在石头上跳舞,甚至你能觉察到在某次剧烈的跳动中,车轮都离开了路面,如果你正好盯着一个地方看,等你落下来的时候,焦点已经不在原来的上下而是左右偏移了,司机于是就起劲儿的扳动方向盘。路面有的时候就像台阶一样,低点儿的猛冲就可以了,高点儿的就要先攒足了劲儿,助跑一段儿。多半时候说是路还不如说是以前的河道,车轮哗的一声碾开浅浅的流水,然后脚下就感觉到石头被车轮带起来咣的一声砸在底盘上,我们面面相觑,司机仍然习以为常的注视着前方。

停停走走,半夜时分,我们到达52K,前面又堵住了,而且这次是前车的人下车准备过夜,我们也走不动了。

跳动的烛光下,围着一片狼藉的桌子,有吃饭的胃口却没有说话的兴致。
August 21

(D+41)日

一切都有希望!一切还有希望!

这是最后的一段,出发以后我还是有点顶不住,以致于最初的四公里花了整整一个小时,我远远的落在后面,不过大家依旧没有什么意见。

再次出发,我突然发现这次徒步就剩下二十四公里,我可以在六个小时内完成,我可以坐车。现在的我就像一名海军陆战队员,碰上路上的积水,再也不去找石头,直接踩过去,就是有泥也不在乎。心里不敢有任何杂念,嘴里一直念叨着:“一切都有希望!一切还有希望!”对于迎面而来的背夫,再也不打招呼或者询问还有多远。

我提前到达96K(中午将在这里歇脚),我一边等着他们,一边和很多人一起听一个背着大锯子的四川老乡讲述他自己的故事,他听说在墨脱锯木头会发财,于是就把大锯背了进来,结果发现并不赚钱,于是又自己背出去。

他们来了,我们在一家杂货铺打尖,我突然想喝可乐。百事可乐六百毫升没有生产日期,十二块!喝了!吃掉剩下的压缩饼干,火腿肠和牛肉干。

再次出发。革命首先掉队,然后是帅哥,老大仿佛也来了劲儿,和我比肩走着。直到迎面来的一个背夫和又一个旅游者,只见他轻松的甩着双臂,把手杖当成了金箍棒。

他主动的和我们打招呼,我们也顺势向他打听来时的路,他说很轻松!还来了一句:“你怎么累成这样?连话都不会说了。”我只能告诉这是我的第六天。

很快就问到了来自哪里。我告诉他我是上海的,他立刻来了一句:“阿拉夜市上海宁!”我实在不想说话,只得告诉他我要在崩溃之前到80K,说罢也启程了,剩下老大和他聊天。

我再也不关心我将怎样描述我的成绩,我再也不关心前面还有多远,我再也不关心我是怎样的决定,我现在只想尽快走完这个。

突然我看见了一段盘山路蜿蜒而上,我看到了竹筒被接起来引水,我看到了红黑两种颜色的电线,我是不是快到了?按捺住自己的喜悦,我顺着路继续前进,没有选择路边的小道,我很担心不是我所期望的,我怀疑我还能走多远?直到我看见一辆漆成桔黄的东风汽车,我认识到我终于到了80K。灯笼早就到了,正在和一帮人看电视剧(VCD的),他发现了我,冲我笑笑。随后到达的是革命、老大和帅哥。

我扔掉了我的军胶,扔掉了我的袜子,扔掉了刮破的裤子,我终于可以重新做人了。

晚上老大请客,啤酒和很多荤菜。

老大说灯笼也要去波密,去买清油,和他的背夫兄弟们坐在藏人开的卡车货箱里。

革命在桌子上告诉我,我们这次徒步是他所听闻的最快的一次,就是说,我们可以住阿尼桥,可以在墨脱县城休整!那我们为什么要急着出来?

帅哥说我他们本来都担心我能不能走完,这个映像来源于走进墨脱的时候,他们觉得我已经崩溃了,笑话!

August 20

(D+40)日

一大早,政府那里的大门还没开,我们就从旁边翻墙过去。一路都是农村常见的乡间土路,可能是很久不用的缘故,有的时候路上会有一些临时的栏杆。我那只受伤的脚很疼,但是我必须用它支撑我至少一半的体重,解决方法是休克疗法,启程的时候在冰冷的水让它冻得麻木,然后拼命的走,找尽是硌脚的石头上走让它疼得麻木。

帅哥的背夫是个瘦瘦高高的门巴族人,名字大致的发音是灯笼,穿着一双高筒胶靴,身边的马驮着行李,稍微早一点出发。在中午打尖的地方,他已经等得不耐烦了,说他已经等了两个小时了。这个遭到了我们的质疑,因为我们出来才三个小时,他不可能走这么快,而且他也没有手表,胡掐的。

中午我品尝了老大带的“兵人”压缩饼干。

老大也是有背夫背着行李,喜欢“寻花问柳”,这不本来在我们前面,走着走着就不知道哪里去了,喊了半天不应,一会儿又从后面出现了。原来下山的时候他发现了一条路,觉得应该是便道,就蹿了下去,结果发现走了冤枉路。不过下次有了机会,他还是会这样选择。

第二次看到灯笼的时候,他正在和几个背夫喝酒,一个大的塑料壶放在一边,大家把酒言欢,谈兴甚浓。我们走不过他,也就不管他了。

沿途的桥都是够结实可以通过汽车,伴随着就是大大小小的瀑布,其中最大的一座至少有二十余米高,因为抬头只能看见一块伸出的石头。桥到水潭还有十米左右,强劲的风已扑面而来,夹带着细细的水珠。可是沿途却没有风,难道是不断冲下的水引起了对流?声音也够大,较远的地方还是刷刷声,近点儿的是哗哗声,跟前就是石头的滚动声了。看着瀑布,仿佛时间在倒流,从第一条涓涓细流开始,慢慢的也许数十万年的冲刷,才有这黑色的岩石,才有这陡峭的悬崖。

泥石流也是风景之一,小到只在路沟处生成一个小漏斗,大的就是一片数十米直到江边,现在有两个选择:要么你先下江边走过去再爬上来,这可是有二十米的落差,要么你就从泥石流面上走过去。担心泥石流会流动?不可能,别人走了这多次,怎么没有?再说了,上面还长着草(事实上这个不能作论据的,亚热带的气候加肥沃的泥土,一晚上就能长起来)。路是踩出来的,有些时日的是平整的路面,一只脚的宽度,掌握平衡就可以了,有些只有几个现成的脚印,要做的是把自己的脚套上去。还有就要靠自己去踩出一条来。

在这种地方有时候会有几根木头搭建的所谓的桥,浅浅的没在水面之下,不想大腿浸湿就必须从上面走,不知是青苔还是矿物质,看起来很滑的样子,可是从来没有人滑到过,至少我没看见过。

113K的村子里只有几个小孩在自由的玩耍着,大人们都不在,据说现在是收割季节,人们都去农忙了。

离今天的宿营点只有五公里了,然而出来就是一段上坡,我当时的第一感觉就是崩溃,真想告诉他们能不能在这里宿营?不过老大、革命、帅哥没有任何表情,那意思是说:今天必须到108K,没人替你背包,我们愿意和你耗着。无数次的询问帅哥还有多远,帅哥也不厌其烦的回答就在前面后,跨过一条奔腾的河流,到了108K。奇怪的是灯笼还没到,帅哥有点着急。

吃饭的时候,一张涨红的脸出现在窗口,灯笼!他看起来好像很兴奋,他的马扔下行李跑了,所以他自己背来了!

August 18

(D+39)日

早上几乎是被饿醒的,不知为什么,我们下定决心非要吃到那家四川人的鸡蛋西红柿面不可。

等待的过程中,我们碰到了科考队的几位正要去梳洗的女士,听着她们愉快的笑容,看着她们轻松的脸庞,以及携带的洗面乳和洗发水,这真是一次愉快的旅行。据她们说,昨天他们比我们早两个小时到这里,还有就是他们今天要下乡去。同坐的还有一个总说自己是新上任的西藏交通厅副厅长的中年人,他也是随队来考察的,他说这里将开通公路,两年内就会打通风林口隧道,把路从派乡修到墨脱。听了这话我们不禁浮想联翩,翻多雄拉山口将不是必需的,但是可以作为一条简单的徒步路线,这样还会有更多的人来这里旅游。

吃完这顿早饭已经是十点了,到墨脱的里程既然和昨天的差不多,又是这条宽点,平点,碎石少点的一级公路,我们一定会轻松的赶到。

对付积水的路总算找到了窍门,一步左右的距离总是会有石头,虽然浅浅的浸没着,但是很实在,不会陷下去,很明显这是有人故意这样放置的,考虑到我一米六五的身高的话,这大概就是那些背夫留下的,我们只要仔细找这个就可以了,这加快了我们前进的速度。

可能是被昨天的蛇吓着了,在经过一片一人多高的芦苇荡的时候,革命用手杖不停地敲打两边。我用以前的《动物世界》现在的《人与自然》以及纪实频道的《生灵的呼唤》解释:蛇不会主动袭击人,而且动物也很少有体型小的攻击体型大的,除非它们的领地受到了威胁,并且避无可避,再说这条路上来往的人多得很,也不可能是它的居住地。得到的回答是:不怕一万就怕万一。

又爬上了一个山头,山坡上是大片的青稞,终于又开始有了人烟,路边有座高脚屋,里面两个门巴背夫正在小憩,一个空空如也的空酒瓶,看着额头上有细细的汗珠,脸色通红的他们,不用说度数不低。几根烟攀谈起来,虽然没有生硬的数据表明还有多远,但是他们用最朴实的语言说,还有一个小时就到。虽然我们还是笨鸟先飞,但是不到五分钟就被超车了,下一次看到他们已是山坳的对面的背影。

近处的山头上竖着经幡,远处的山头是明显的开凿公路的缺口,山脚的我们开始讨论究竟哪个是墨脱县城。革命拥有着革命乐观主义,他认为翻过经幡就会到了,而我貌似冷静实际悲观的认为那个缺口才是进城的门户。

翻过经幡拐过山口以后,我的眼前是一个在八一才能看到的景象,县城分布在高高低低的几个山头,到处矗立着红瓦白墙的楼房,当然没有高层建筑,我们终于到了墨脱。虽然现在还在县城的边上,还是给了我们一针强心剂。

天快要黑了,我们踏上了那条明显是两车道的马路,不时有汽车趴在路边,还听见远处有摩托车的突突声。不知道是走得太慢还是天黑得快,要开头灯了。“要有光”县城顿时淹没在一片光明中,没有路灯,房子两边透出的光线已经足够了。

坐在县政府招待所山坡下积蓄最后一点力量,这是一个丁字口,有小卖部,有卡拉ok厅,有发廊,有烤肉摊?还有十块钱一瓶的红牛!可是可乐卖完了!

沿着小路上山,翻过围墙,感觉就像鬼子,悄悄的进村,打枪的不要。哆哆嗦嗦的走进食堂,另一张桌子上五个脸色红润的人再次用惊异的眼光迎接我们,看得出他们也是旅游者,然而前几天沿途并没有这几个人的消息,那么他们就是从波密(我们的目的地)过来的。打过招呼后,他们仿佛才清醒过来,两个人帮我们卸背包,一个人回房间找奶片,一个人找香烟,一个人帮我们介绍这里好吃的。恭敬不如从命,点了一份奢侈的土豆烧牛肉。

我们狼吞虎咽的时候,开始回答他们的发问:

从哪里来?

派乡。

怎么来?

自己背包走过来的。

所用时间?

四天,今天从背崩过来。你们呢?

波密,有背夫背包,已经在这里休整了一天了,准备明天回108K,背夫也找好了。

那我们正好同路了,不过我们走得慢点。

那段路短好走,正好聊天,要不要帮你们找背夫?

谢谢了,我们能行。

吃完饭,他们想帮我们买单。千万别,这是我们自己的事。