培訓最后一天,報表~
感覺普元的報表有點水晶的味道,弄了個分組報表,又建數據源又建數據集有設行分組,列分組的,趕緊挺麻煩,沒有用潤乾好使,雖然潤乾工作量也挺大
看來老板要貼了心上普元了,接下來可能要實戰了,不知道啥樣,現在有兩點困難;
1\、普元報的錯誤,無從下手,不知道哪出的毛病,比如有時在展現層的毛病,而在邏輯處理層報錯,摸不著頭腦啊。
2、普元的構件不熟悉,據說有1000多個構件,不像java api一樣按照功能分的包,它是按層分的包,業務邏輯層構件、運算層構件、展現層構件。要實現一個功能怎么能知道構件包里有沒有現成的,恐怕這只能慢慢熟悉那些構件庫了
3、覺得普元的報表系統不怎么樣,至少沒有什么讓人耳目一新的,工作流系統還挺強,對工作流不熟悉,不敢說什么,然后就是可維護性,可擴展性,可能一直是自己寫代碼的,看不見代碼總覺得不踏實最然功能實現了并以更迅速的
4、聽頭兒說這是未來軟件開發的趨勢,聽得我直郁悶,未來開發就是這么托構件然后用連線一拉基本完事兒了嗎?!得,要不我還是轉行做小買賣去吧,嗚嗚,總的來說,覺得這種模式對程序員個人的發展沒多大好處,核心代碼都被封裝好了,不知道什么是類,對象,方法,面向對象,也能輕而易舉做軟件工程師了,呵呵,工程師以后不值錢嘍。
自己的一點感覺,胡侃一通,不知道合不合乎邏輯,在前面的blog里有朋友留言說"千萬別被普元忽悠了",哈哈,不知道那位兄弟的理由是什么,想多聽聽大家的意見,望廣留言,多謝多謝多謝?。?!
例子1:Entity的格式
<root>
<data>
<myEntity>
<myField1>1234</myField1>
<myField2>This is demo</myField2>
</myEntity>
</data>
</root>
例子2:EntityList的格式為
<root>
<data>
<list length=2>
<myEntity name="test1">
<myField1>1234</myField1>
<myField2>This is demo</myField2>
</myEntity>
<myEntity name="test2">
<myField1>2345</myField1>
<myField2>This is demo</myField2>
</myEntity>
<list>
</data>
</root>
通過Xpath來訪問數據,比如
/root/data /myEntity將訪問到例子1中的<myEntity>實體
/root/data/myEntity/ myField1 將訪問到例子1中的myField1,結果為1234
/root/data/list/myEntity[@name="test1"]將訪問例子2中的<myEntity name="test1"> 實體
/root/data/list/myEntity[@name="test1"]/myField1將訪問例子2中的myField1,值為1234
第四天還沒來得及寫呢,現在已經是第五天了呵呵
昨天臨時以前的項目要改寫東西,聽的斷斷續續
還是一些關于工作流的知識,只是更加復雜一下,跟著文檔一個勁兒的復制黏貼
也不知道所以然
據說下午還要考試,暈
摘要: 今天接著培訓普元EOS講rishWeb和工作流上午實現了一個在一個table中實現增刪改查,有個控件datacell,一下子就把我搞蒙了, 一個勁兒的復制黏貼,也不知道哪是哪,看起來好像類似與那個.net中的那個DataGrid,關鍵是還不大明白那些輸入輸出參數應該以什么套路配置。應該是在開始的時候就配置輸入輸出參數,但是又是如何跳回到jsp的呢,<datacell:datacell ...
閱讀全文
一直苦惱與不能實現廣域網的版本控制,終于發現Google code就提供這種服務,它使用Subversion來控制版本,下了一個
TortoiseSVN 1.5.1
裝上,搗鼓了半天終于上傳上Google code了,哈哈。有成就感
這兩天有搞了個eclipse插件
subclipse,運行起來以后無論commit還是update都提示錯誤:
Attempted to lock an already-locked dir
通過搜索,解決辦法是 執行clearup操作,就好了
記錄在這,Subversion還要繼續研究
今天剖析了昨天三下兩下生成的增刪改查的代碼(能看到的代碼也僅僅限于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嗎???
普元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怎么聯系上呢?
要提供給客戶一個下載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的流相關只是掌握不清啊,不能熟練運用
一哥們在學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錯誤
我的數據庫中一個表中有個字段名叫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發布自己的瀏覽器了
9月3日消息 9月3日凌晨,谷歌中國與全球同步推出其開源瀏覽器Google Chrome測試版,中文名為谷歌瀏覽器.
下載地址為:http://www.google.com/chrome
記得前幾天還看見csdn上新聞說google澄清不會出瀏覽器跟IE競爭,暈,現在成現實了,google的所有服務差不多用了個遍,這個也不例外,下了一個,驚訝下載文件竟然只有幾百K,開始安裝才知道也是采用windows live那樣的安裝方式,還要下載一通。
終于安裝完啦,打開

第一感覺很簡單,把所有空間都給了頁面顯示,就像IE按了F11一樣,因為在公司是使用代理上網,納悶的是我也沒有配置代理居然一下就能上網,于是打開選項查找,有個設置代理的按鈕,點擊打開的竟然是IE的選項窗口,google的瀏覽器調用IE的internate選項,這不是成了遨游?
引用:面向服務的體系結構(service-oriented architecture,SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立于實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種這樣的系統中的服務可以以一種統一和通用的方式進行交互。
今天公司組織了一個SOA培訓,請的
普元公司的工程師來的,按工程師的話說SOA是一種方法,這種方法已經由來已久了也算,在歐美國家早就用這種方法來開發標準的軟件系統,那是不是能成為SOA是一種方法呢,呵呵
培訓中,工程師演示了普元的產品,他們的一個開發工具EOS包含了AppFream,Report,RishWeb,WorkFlow,軟件開發的各個層面都覆蓋到了,俺的個娘啊,感覺就是要是這些東西用起來還要我們這些程序員干嘛,只要項目經理就行了,項目經理跟客戶確認好需求,然后用普元的工具一通拖拽畫出流程圖,完了,這就完工了,流程圖畫出的同時我們的應用也能運行了,看效果吧,呵呵
貌似,做測試的也可以下崗了,因為每一步都是自動生成的,并且可以監控每一步的運行情況。
半天的培訓下來,突然有種危機感,如果總經理真的決定在我們部門推行這個EOS系統,那我們豈不是離下崗不遠啦?
程序員真不如民工嘍。。。
自己的一點點理解 ,功力尚淺,呵呵,歡迎拍磚
忙里偷閑
一直想寫一個blog程序
架子打起來了,用struts1.2+hibernate
如何為用戶的url做轉向,比如
http://www.aygfsteel.com/liuspring,怎樣轉向屬于liuspring的文章、留言、評論啊等等,簡單的說就是liuspring的頁面,
這個問題可把我難住了(功力太淺),于是google上搜開源的blog系統,看他們的源碼,首先下的
roller,費了好大勁把系統配起來了,運行起來那個高興,接下來暈了,新版本是
struts2,還沒研究過,看了一下好像struts2能很容易實現我要的,可是我用的是1.x啊,接著搜,
Pebble,
blojsom ,
DLOG4J ,
myblog,都試用了,其中
blojsom使用了一個servlet,在里面解析URI,比如請求的地址是/blog/spring/,那么就被解析成/blogView.do?go=spring,以這個地址轉向,從而被struts的控制器接收。
這里得用(并且redirectURL必須是相對路徑,用完整路徑好像還不行,在我這報404錯誤)
1
httpServletRequest.getRequestDispatcher(redirectURL.toString())
2
.forward((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse);
不能用
1
httpServletResponse.sendRedirect(redirectURL.toString());
因為這樣是使IE重定向,請求的URL也隨之改變,這個圈兒就轉不下去了。
又建立了一個過濾器,用以判斷session中的用戶是否是當前訪問的博客的管理員,比如訪問/blog/spring/,判斷session中保存的用戶是否是spring,然后往request,setAttribute中放一個標示,標示是否具有管理員權限,在jsp頁面中獲取這個參數以決定是否顯示后臺管理連接。
到這里,最基本,最撓頭的問題暫時解決了,感覺肯定有更加方便、更加精妙、更加簡單的方法,只是功力還沒涉到那么深,哪位博友看到了不勝賜教,接下來還要攻克的,如何產生靜態html頁面,如何rss......