2008年9月18日星期四

显示帮助的div

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<HEAD>  
<TITLE>code by:haiwa - 随滚动条移动的层 - 中国asp之家 - www.aspxhome.com</TITLE>  
<META HTTP-EQUIV="Content-Type" CONTENT="text/html" charset="gb2312">  
</HEAD>  
<style>  
<!--  
.div{  
position: absolute;  
border: 2px solid red;  
background-color: #EFEFEF;  
line-height:90px;  
font-size:12px;  
z-index:1000;  
}  
-->  
</style>  
<BODY>  
<div id="Javascript.Div1" class="div" style="width: 240px; height:90px" align="center">正中...</div>  
<SCRIPT LANGUAGE="JavaScript">  
function sc1(){  
document.getElementById("Javascript.Div1").style.top=(document.documentElement.scrollTop+(document.documentElement.clientHeight-document.getElementById("Javascript.Div1").offsetHeight)/2)+"px";  
document.getElementById("Javascript.Div1").style.left=(document.documentElement.scrollLeft+(document.documentElement.clientWidth-document.getElementById("Javascript.Div1").offsetWidth)/2)+"px";  
}  
</SCRIPT>  


<div id="Javascript.Div2" class="div" style="width: 240px; height:90px" align="center">左上...</div>  
<SCRIPT LANGUAGE="JavaScript">  
function sc2(){  
document.getElementById("Javascript.Div2").style.top=(document.documentElement.scrollTop)+"px";  
document.getElementById("Javascript.Div2").style.left=(document.documentElement.scrollLeft)+"px";  
}  
</SCRIPT>  

<div id="Javascript.Div3" class="div" style="width: 240px; height:90px" align="center">左下...</div>  
<SCRIPT LANGUAGE="JavaScript">  
function sc3(){  
document.getElementById("Javascript.Div3").style.top=(document.documentElement.scrollTop+document.documentElement.clientHeight-document.getElementById("Javascript.Div3").offsetHeight)+"px";  
document.getElementById("Javascript.Div3").style.left=(document.documentElement.scrollLeft)+"px";  
}  
</SCRIPT>  

<div id="Javascript.Div4" class="div" style="width: 240px; height:90px" align="center">右上...</div>  
<SCRIPT LANGUAGE="JavaScript">  
function sc4(){  
document.getElementById("Javascript.Div4").style.top=(document.documentElement.scrollTop)+"px";  
document.getElementById("Javascript.Div4").style.left=(document.documentElement.scrollLeft+document.documentElement.clientWidth-document.getElementById("Javascript.Div4").offsetWidth)+"px";  
}  
</SCRIPT>  

<div id="Javascript.Div5" class="div" style="width: 240px; height:90px" align="center">右下...</div>  
<SCRIPT LANGUAGE="JavaScript">  
function sc5(){  
document.getElementById("Javascript.Div5").style.top=(document.documentElement.scrollTop+document.documentElement.clientHeight-document.getElementById("Javascript.Div5").offsetHeight)+"px";  
document.getElementById("Javascript.Div5").style.left=(document.documentElement.scrollLeft+document.documentElement.clientWidth-document.getElementById("Javascript.Div5").offsetWidth)+"px";  
}  
</SCRIPT>  


<SCRIPT LANGUAGE="JavaScript">  
<!--  
function scall(){  
sc1();sc2();sc3();sc4();sc5();  
}  
window.onscroll=scall;  
window.onresize=scall;  
window.onload=scall;  
//-->  
</SCRIPT>  
<div style="position: absolute; top: 0px; left: 0px; width: 10000px; height: 4000px;"></div>  
</BODY>  
</HTML>

2008年9月16日星期二

第一次使用Subversion,Attempted to lock an already-locked dir

一直苦恼与不能实现广域网的版本控制,终于发现Google code就提供这种服务,它使用Subversion来控制版本,下了一个TortoiseSVN 1.5.1
装上,捣鼓了半天终于上传上Google code了,哈哈。有成就感
这两天有搞了个eclipse插件subclipse,运行起来以后无论commit还是update都提示错误:

Attempted to lock an already-locked dir

通过搜索,解决办法是 执行clearup操作,就好了
记录在这,Subversion还要继续研究

Google Code Host的使用说明(转)

by shootsoft

http://www.shootsoft.net

1. Eclipse的Subversion使用说明

开发工具以Eclipse为主,所以Eclipse首先需要安装一个Subversion的插件。参考下面的网址:

http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/

项目组的所有成员必须都要按照以上的操作安装好插件,并且注册Google的Gmail帐户。

2.Google Code Host说明

项目组组长到http://code.google.com/hosting/创建新项目(Create a new project)过程省略。最后会看到项目的协作平台网址:http://code.google.com/p/group6homework/。(group6homework是项目名称)组长创建完成后还需要把组员的帐户添加进来:通过[Administer]—[Project Members]就可以对项目组成员帐户进行管理。

创建完成后组长需要安装http://tortoisesvn.net/downloads Subversion的客户端插件进行项目首次的Check In操作。

操作如下:

到Eclipse的项目的workspace目录下,进入需要协作的项目的目录,比如我的:

D:"shootsoft"GP6Platform

单击鼠标右键,选择[TortoiseSVN]—[Import]然后输入:

https://group6homework.googlecode.com/svn/trunk/

注意:

  • 这里网址如果你不太清楚可以登录

http://code.google.com/p/group6homework/source查看

  • Google Code Host使用的密码是随机生成的,如果已经登录Google,可以查看以下网址获得密码:

http://code.google.com/hosting/settings

首次登录可能需要安装证书和输入密码。完成后TortoiseSVN就会自动把文件夹

D:"shootsoft"workspace"GP6Platform下的所有文件同步到服务器上去了。

3. Google Code Host与Eclipse

Check In操作完成后组长还需要将项目Check Out出来,真正和Eclipse中的项目结合,组员也需要这样做:

1.将自己的项目文件夹备份并且从Eclipse中删除。需要选择第一项,连同文件夹一起删除。

2.按照http://www.ibm.com/developerworks/cn/opensource/os-ecl-subversion/中的说明进行Import操作,操作结果如下所示:

3.这时点击Next按钮,选择第一项,然后点击Finish按钮。

4.通过Windows菜单,[Show View]—[Other]

5.在弹出的新窗口中选择“SVN—SVN资源库”

6.在刚才Import进来的那个资源库上单击鼠标右键,选择“检出为(A)...”

7.然后在新窗口中中输入项目名称

点击“Finish”按钮。

稍微等待一会儿,程序就会全部下载回来了。

8.我的Tomcat5补丁放在了D:"Tomcat5补丁目录下,请各位参考我的未知把补丁放置好。

如果导入的项目有红叉叉,在项目上点击鼠标右键,选择“Close Project”然后再打开就好了。这时可以清楚的看到项目上图标发生了一点点变化:

在上面的第3步上,按道理应该可以作为项目可以直接检出,但是我这里操作总是出错,所以只有按照稍微烦琐一点的步骤来操作了。

4. Subversion的使用

如果你对某一个文件进行了修改,想要把这个文件提交到服务器上去,就需要在需要提交的文件上单击鼠标右键,通过Team菜单来[提交]

如果你需要把修改过的文件使用服务器上的来覆盖,可以通过Team菜单的[更新]来进行。

Subversion的使用非常简单,但是要深入探究也可以说上几千字,还是建议通过官方或者非官方的教程来学习:

http://www.baidu.com/s?tn=searches_dg&ie=utf-8&word=subversion+%E6%95%99%E7%A8%8B

http://www.baidu.com/s?wd=Subversion+Eclipse&cl=3

2008年9月12日星期五

普元EOS培训第二天

今天剖析了昨天三下两下生成的增删改查的代码(能看到的代码也仅仅限于jsp页面中的一些标签),其他的要看的话都是xml,要用EOS的设计器看才是类似于流程图的东西

感觉看不到亲切的java代码很不爽,呵呵

然后练习自定义运算逻辑,这下自己写类了呵呵,eos能够由向导自动生成类和方法体,就像Myeclipse中新建struts的action一样,发现eos的方法都是静态的,都是返回一个int整型值,参数列表也都是Document doc, BizContext param,看起来只有方法名可以自定义了,呵呵!

之前说过普元这套东西都是用xml格式传递参数的,这里就是从param中获取xml,然后拆解每个要用到的节点,来获取传入的参数,然后经过处理后把返回值再放到xml节点中,好费劲。

然后是handler,为了灵活的加入新的处理,可以在一个业务逻辑的前后加入多个handler,跟一般的过滤器写法没什么差别。

然后是jsp Tag自定义,也是继承了javax.servlet.jsp.tagext.TagSupport,没有普元的东西

再然后是复杂查询,多表查询,他是创建一个查询实体,就是视图啦

一天下来对普元EOS了解的多了些,它以方法为单位作为构成构件,以达到重用的目的,各个层之间以xml格式作为联系,开发人员基本上已图形化开发,不接触底层技术,给程序员的门槛降低了(大学生就业更难了呵呵),开发系统开始工业化,把零件装起来,螺丝拧上就OK了

可能经历实际开发了,会有多一些不一样的感触吧

还是没闹明白难道这就是所谓SOA吗???

用Zoundry发blog

想找个离线发布blog的工具,折腾了一晚上

大家评论说Zoundry不错,就下载下来安装了,如何配置成为了一个问题,我有多个blog想同时更新

下面搜集了几个blog配置的地址,供参考

blogjava

http://www.blogjava.net/yourblog/services/metaweblog.aspx

bloggers

https://www.blogger.com/feeds/default/blogs (不稳定,有时成功有时不成功,可能是太和谐了)

blogbus

http://rpc.blogbus.com/blogger

csdn blog

http://blog.csdn.net/youraccount/services/MetaBlogApi.aspx

2008年9月11日星期四

普元EOS培训第一天

普元EOS,面向构件的开发

公司要购进普元的EOS开发工具,组织为期5天的培训

为了今天的培训我把我的笔记本系统都重装了,折腾了半天装数据库,装EOS,装EOS补丁,不知道干嘛不做一个集成了补丁的安装包

安装过程中要配置数据库,要初始化数据库,会向数据库中自动建好多表,然后安装成功后可以在服务控制台管理。

首先做了个HelloWorld

界面就是这样的


首先新建一个构件包(面向构件的开发嘛),每个构建包下有页面构件page,展现逻辑构件pr,业务逻辑构件biz,数据逻辑构件data等等。

我的理解就是每个构件就相当于分层架构中的一层,page就是jsp页面,pr是Struts的action,biz是spring的bean,data是hibernate的映射,普元在这之上又进行了封装,以前我们在各个层之间传递数据通常由一个DTO数据传递对象,而普元在各个层用xml来传递,普元把普遍通用的实现逻辑处理都封装成了构件,我们只要调用构件就行了。

       之后又来了复杂点有刺激的,通过向导实现对一个单表的增删改查,向导跟vs.net中的那个数据连接,数据适配器拖到页面上选择表,选择字段,就自动生成了增删改查,只是vs.net中可以看到生成的C#的代码,而普元生成的只是一堆xml。


原来一天未必能完成的事,现在十分钟做完,能傻瓜的都傻瓜了,真的也要下岗了。

哦,对了,这些和SOA怎么联系上呢?

2008年9月5日星期五

jsp下载文件的问题

要提供给客户一个下载xml文件备份的功能
思路确定了
生成xml
在服务器指定目录创建文件
取得文件路径,弹出下载框

Java语言:01 <%@ page contentType="text/html;charset=UTF-8" language="java"%>
02 <%@ page import="java.io.*" %>
03 <%
04      String pathurl = (String)request.getAttribute("pathurl");
05      if(pathurl !=null && !pathurl.equals("")){
06    
07             String addressReport = application.getRealPath("/")+"saveFiles"+File.separator+pathurl;
08             //String addressReport = PageConstraint.XML_PATH_SEND+pathurl;
09            addressReport = addressReport.replace(File.separator,File.separator+File.separator);
10           
11           //   设置响应头和下载保存的文件名
12           response.setContentType("APPLICATION/OCTET-STREAM;charset=UTF-8");
13           response.setHeader("Content-Disposition",
14           "attachment;   filename=\""   +   pathurl   +   "\"");
15           
16           //   打开指定文件的流信息
17           java.io.FileInputStream   fileInputStream   =
18           new   java.io.FileInputStream(addressReport);
19           
20           写出流信息
21           int   i;
22           while   ((i=fileInputStream.read())   !=   -1)   {
23               out.write(i);
24           }
25    
26           fileInputStream.close();
27           out.close();
28           
29     }
30   %>
这么写在jsp文件中的代码,开始试验没有问题,但是如果xml中有中文,就会是乱码,xml文件是使用utf8生成的,猜想可能是在流读取的时候编码不对,于是在网上搜得了下面这样的写法,通过InputStreamReader设置了编码UTF-8
测试成功

Java语言:
01 <%@ page contentType="text/html;charset=UTF-8" language="java"%>
02 <%@ page import="java.io.*" %>
03 <%
04      String pathurl = (String)request.getAttribute("pathurl");
05      if(pathurl !=null && !pathurl.equals("")){
06    
07             String addressReport = application.getRealPath("/")+"saveFiles"+File.separator+pathurl;
08             //String addressReport = PageConstraint.XML_PATH_SEND+pathurl;
09            addressReport = addressReport.replace(File.separator,File.separator+File.separator);
10           
11           //   设置响应头和下载保存的文件名
12           response.setContentType("APPLICATION/OCTET-STREAM;charset=UTF-8");
13           response.setHeader("Content-Disposition",
14           "attachment;   filename=\""   +   pathurl   +   "\"");
15           
16           //   打开指定文件的流信息
17           java.io.FileInputStream   fileInputStream   =
18           new   java.io.FileInputStream(addressReport);
19           
20           //   写出流信息
21           //int   i;
22           //while   ((i=fileInputStream.read())   !=   -1)   {
23           //out.write(i);
24           //}
25    
26           //fileInputStream.close();
27           //out.close();
28          
29           InputStreamReader   reader=new   InputStreamReader(fileInputStream,"UTF-8");
30           int   i=0;
31           while((i=reader.read())!=-1){
32               out.write(i);
33
34           }
35           reader.close();
36           fileInputStream.close();
37           out.close();
38     }
39 %>
总结:还是对java的流相关只是掌握不清啊,不能熟练运用

sqlServer2000与sqlServer2005的错误

一哥们在学C#,同时学的是sqlServer2005,是啊,我接触C#那会儿才.net1.1,现在都3.x了
让我帮忙调式一下程序,而我的机器尚没有sql05,只有sql2000,期间听说过05和2000可以同时安装,装吧,要不没法附加他那2005的数据库,费了好大劲装好了,开始附加数据库,但是死活附加不上去,错误提示:执行Transact_SQL语句或批处理时发生了异常。未能在sysindexes中找到数据库ID 9 对象ID 1 对应的行,请对sysindexes运行DBCC CHECKTABLE


按照提示,执行 DBCC CHECKTABLE 还是没有效果
遂在google上搜,有网友遇到这个问题是因为同时装了sql2000,卸载了2000重装sql2005就成功了
晕,这下功夫耗大了
卸载吧,同学提供了一个干净卸载的工具来卸载,早就知道卸载sql2000卸不干净,重装会出问题,于是采用此工具
“微软的Windows_Installer_清理实用工具msicuu2”
可谁知道,这东西帮了倒忙,好像得先运行卸载程序,再运行这个“微软的Windows_Installer_清理实用工具msicuu2”可以帮忙将注册表之类的垃圾清理掉,但是我直接运行了这个“微软的Windows_Installer_清理实用工具msicuu2”,结果sql2000还在并且可以运行,在控制面板卸载,提示 找不到D:\Program Files\Microsoft SQL Server\MSSQL\Uninst.isu
晕,这是干啥的啊
接着google
找到一网友的播客http://www.anywolfs.com/liuhui/article.asp?id=257,提出了解决办法,用之,终于可以卸载了
接着卸载sql2005,哎,等等,现在是不是可以附加了呢,试,.....还是不行,呵呵
卸载吧
哦?从控制面板貌似sql05也卸载不了了,卸了好几次也没反应啊,倒是不报错

试了好几次,貌似选哪个都不好使,点下一步,一会儿窗口就自己消失了
啊,啊啊,晕,先睡觉,明儿再搞定05
谁位大哥遇到过,提示一下啊......

难道是hibernate装聪明?

今天开发中遇到一个奇怪的hibernate错误
我的数据库中一个表中有个字段名叫id,但是它并不是主键
用hibernate映射后为

XML语言:1 <id name="apprId" type="java.lang.Long">
2     <column name="APPR_ID" precision="11" scale="0" />
3     <generator class="assigned" />
4 </id>
5 <property name="Id" type="java.lang.Long">
6     <column name="ID" precision="11" scale="0" />
7 </property>而我当执行这样的hibernate的HQL的时候
SQL语言:1 from RcUApprInfo as model where model.Id = ?
hibernate解析成sql语句竟然是
SQL语言:1 select ...... from rc_u_appr_info where as model where model.APPR_ID = ?

跟踪了好几遍,都是这样

在确定自己的代码没问题后,想到可能是hibernate理解错了
于是将Id改成了别的名
再试,竟然没问题了
难道hibernate将凡是叫Id的都认为成主键??不解 不解

试用Google的浏览器

早上上班来,打开电脑,看到一则最新消息,google发布自己的浏览器了

9月3日消息 9月3日凌晨,谷歌中国与全球同步推出其开源浏览器Google Chrome测试版,中文名为谷歌浏览器.
         下载地址为:http://www.google.com/chrome

记得前几天还看见csdn上新闻说google澄清不会出浏览器跟IE竞争,晕,现在成现实了,google的所有服务差不多用了个遍,这个也不例外,下了一个,惊讶下载文件竟然只有几百K,开始安装才知道也是采用windows live那样的安装方式,还要下载一通。

终于安装完啦,打开


第一感觉很简单,把所有空间都给了页面显示,就像IE按了F11一样,因为在公司是使用代理上网,纳闷的是我也没有配置代理居然一下就能上网,于是打开选项查找,有个设置代理的按钮,点击打开的竟然是IE的选项窗口,google的浏览器调用IE的internate选项,这不是成了遨游?

什么是SOA

引用:面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

今天公司组织了一个SOA培训,请的普元公司的工程师来的,按工程师的话说SOA是一种方法,这种方法已经由来已久了也算,在欧美国家早就用这种方法来开发标准的软件系统,那是不是能成为SOA是一种方法呢,呵呵
培训中,工程师演示了普元的产品,他们的一个开发工具EOS包含了AppFream,Report,RishWeb,WorkFlow,软件开发的各个层面都覆盖到了,俺的个娘啊,感觉就是要是这些东西用起来还要我们这些程序员干嘛,只要项目经理就行了,项目经理跟客户确认好需求,然后用普元的工具一通拖拽画出流程图,完了,这就完工了,流程图画出的同时我们的应用也能运行了,看效果吧,呵呵
貌似,做测试的也可以下岗了,因为每一步都是自动生成的,并且可以监控每一步的运行情况。
半天的培训下来,突然有种危机感,如果总经理真的决定在我们部门推行这个EOS系统,那我们岂不是离下岗不远啦?
程序员真不如民工喽。。。

自己的一点点理解 ,功力尚浅,呵呵,欢迎拍砖

控制td换行的css样式

遇到一个棘手的问题,即便是给td限定的宽度,但是如果里面的内容是连续的,IE就认为是一个单词,不会换行,瞎聪明,google了一通,用css把问题解决了,css这玩意太强了,收藏一下,控制td换行的css样式:style="word-wrap:break-word;word-break:break-all;"

1<table width="100%" border="0" cellspacing="1" cellpadding="0">       
2 <tr>
3  <td width="25%" style="word-wrap:break-word;word-break:break-all;"   valign="bottom" >
4   abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc</td>
5 </tr>
6</table>

2008年9月3日星期三

试用Google的浏览器 chrome

早上上班来,打开电脑,看到一则最新消息,google发布自己的浏览器了

9月3日消息 9月3日凌晨,谷歌中国与全球同步推出其开源浏览器Google Chrome测试版,中文名为谷歌浏览器.
         下载地址为:http://www.google.com/chrome

记得前几天还看见csdn上新闻说google澄清不会出浏览器跟IE竞争,晕,现在成现实了,google的所有服务差不多用了个遍,这个也不例外,下了一个,惊讶下载文件竟然只有几百K,开始安装才知道也是采用windows live那样的安装方式,还要下载一通。

终于安装完啦,打开

第一感觉很简单,把所有空间都给了页面显示,就像IE按了F11一样,因为在公司是使用代理上网,纳闷的是我也没有配置代理居然一下就能上网,于是打开选项查找,有个设置代理的按钮,点击打开的竟然是IE的选项窗口,google的浏览器调用IE的internate选项,这不是成了遨游?

一点心得

忙里偷闲
一直想写一个blog程序
架子打起来了,用struts1.2+hibernate

如何为用户的url做转向,比如http://www.blogjava.net/liuspring,怎样转向属于liuspring的文章、留言、评论啊等等,简单的说就是liuspring的页面,
这个问题可把我难住了(功力太浅),于是google上搜开源的blog系统,看他们的源码,首先下的roller,费了好大劲把系统配起来了,运行起来那个高兴,接下来晕了,新版本是struts2,还没研究过,看了一下好像struts2能很容易实现我要的,可是我用的是1.x啊,接着搜,Pebble,blojsom DLOG4Jmyblog,都试用了,其中blojsom使用了一个servlet,在里面解析URI,比如请求的地址是/blog/spring/,那么就被解析成/blogView.do?go=spring,以这个地址转向,从而被struts的控制器接收。
这里得用(并且redirectURL必须是相对路径,用完整路径好像还不行,在我这报404错误)
1httpServletRequest.getRequestDispatcher(redirectURL.toString())
2             .forward((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse);不能用
1httpServletResponse.sendRedirect(redirectURL.toString());因为这样是使IE重定向,请求的URL也随之改变,这个圈儿就转不下去了。

又建立了一个过滤器,用以判断session中的用户是否是当前访问的博客的管理员,比如访问/blog/spring/,判断session中保存的用户是否是spring,然后往request,setAttribute中放一个标示,标示是否具有管理员权限,在jsp页面中获取这个参数以决定是否显示后台管理连接。
到这里,最基本,最挠头的问题暂时解决了,感觉肯定有更加方便、更加精妙、更加简单的方法,只是功力还没涉到那么深,哪位博友看到了不胜赐教,接下来还要攻克的,如何产生静态html页面,如何rss......

2008年9月1日星期一

web.xml中的3种写法

① 完全匹配

    <url-pattern>/test/list.do</url-pattern>

② 目录匹配

    <url-pattern>/test/*</url-pattern>

③ 扩展名匹配

    <url-pattern>*.do</url-pattern>

servlet-mapping的重要规则:

☆ 容器会首先查找完全匹配,如果找不到,再查找目录匹配,如果也找不到,就查找扩展名匹配。

☆ 如果一个请求匹配多个“目录匹配”,容器会选择最长的匹配。

2008年8月27日星期三

真的好久没更新了

几乎每天都在,只是好久都是只看不写了,看看谁来过了,回访一下,看看谁留言了,回复一下,看看访问量多少了
呵呵,瞅瞅下面的一篇到现在足有两个多月了,时间过得好快啊
最近一段时间,事儿真的很多,公司的事不算忙了,所以也没什么技术问题写一写,一直想弄个blog,还没弄起来,家里有很多事忙
上周末回了趟家,正好赶上下雨,庆幸买上了火车票,还有坐,倒霉的还没赶上火车,到火车站停止检票了,在麦当劳蹲了一宿
凌晨4:30上车,开始闹肚子,哎呦,一直到家,一宿没睡,还闹肚子,我太坚强了,呵呵

想点招,赚钱,极度缺钱

为什么baidu空间不能用windows live writer这样的客户端写blog呢,落伍了啊

2008年6月13日星期五

八兄弟

一直讨厌看电视剧,大都又臭又长
向来只是吃饭的时候,有时候看电视,也总是遥控器不离手,不停的换台
无意中看了会儿 八兄弟~~觉得还不错
讲的是咱老百姓的事儿
讽刺~幽默~
生活~就是不停的迈一道道的坎啊


讲话了,要当就当棍

2008年6月12日星期四

hibernate的save()疑惑

刚整明白一个,呵呵,笨
hibernate save的时候必须启用事务,也就是必须
beginTransaction();
然后
commit();
要不然不会insert

看孙卫琴.精通Hibernate:Java对象持久化技术详解上讲
调用save方法后,hibernate并不会立即insert,而是保存在缓存里,等清理缓存时再insert
什么时候清理缓存呢?
1、事务commit();
2、find方法(hibernate3被废)
3、显示调用flush();
而为什么不用事务,只是在save();后直接显示调用flush();还是没有insert呢?
参考csdn的一个帖子http://topic.csdn.net/u/20080603/19/d6918606-3a62-43a4-b63d-cd292242bbc6.html
因为数据源的问题
真正的原因是数据源conn默认的提交方式,hibernate不管这件事,大部分开源数据源都是默认false的

我试了hibernate的默认连接池,和tomcat中配的连接池用使用事务都没有insert。
下面这段代码能够insert可以说明一些问题
public static void main(String[] args) throws Exception {
SessionFactory sf=HibernateSessionFactory.getSessionFactory();
Session session=sf.openSession();
System.out.println(session.connection().getAutoCommit());
session.connection().setAutoCommit(true);
User u=new User();
u.setName("aaa");
session.save(u);
}

}
而commit和flush的区别就是commit先flush再提交,而flush没有提交
而在close的时候,孙卫琴.精通Hibernate:Java对象持久化技术详解上讲的是hibernate会清空缓存,一个清理,一个清空,一字之差,呵呵

2008年6月4日星期三

roller blog

因为一直想写个自己的blog,用什么架构呢,遂驱使着在网上搜索有什么开放源码的blog程序,roller4.0,貌似挺有名,但资料不多,蒸腾了两天才把系统跑起来
看在OpenSource的介绍:
              Roller Weblogger这个weblogging 设计得比较精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS syndication,blogroll管理和提供一个XML-RPC 接口。

很好的学习资料,哈哈,那就学习学习吧
不过到现在也没看出个什么门道来
系统用了struts2 不熟,struts1还行
用了JPA,不熟,确切的说刚知道这东西
用了velocity,没用过
....还有很多没见过的名词,狂晕
打了个断点跟了几圈,就晕了
呵呵