2012年8月25日 星期六

NHibernate Query Generator的問題

要了解 NHibernate Query Generator(NHQG) 一定要到這個網站 http://ayende.com/blog
NHQG目前是已經停止開發了, 但是你可以在 https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/deprecated/NHibernate.Query.Generator 取得舊的Source.
一開始我是用Ryan Cromwell 的方法, 但是會找不到NHQG, 我的方法如下:
echo Off
rem set path=%path%;c:\tools\svn-win32-1.4.4\bin
rem C:\Program Files\CollabNet\Subversion Client\svn.exe
echo get Trunk (Non-Recursive)…
svn co https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk trunk -q -N
echo done
echo get Art…
svn co https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/Art trunk/Art -q
echo done
echo get SharedLibs…
svn co https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/SharedLibs trunk/SharedLibs -q
echo done
echo get NHQG…
rem jk, modify
rem svn co https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/NHibernate.Query.Generator trunk/NHibernate.Query.Generator -q
svn co https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/deprecated/NHibernate.Query.Generator
echo done
echo build NHQG…
pushd .
cd trunk\NHibernate.Query.Generator
rem jk, modify
rem %windir%\Microsoft.NET\Framework64\v2.0.50727\msbuild.exe default.build 
%windir%\Microsoft.NET\Framework\v2.0.50727\msbuild.exe default.build 
echo done
echo build Installer
cd NHibernate.Query.Generator.Setup
%windir%\Microsoft.NET\Framework\v2.0.50727\msbuild.exe Setup.wixproj 
echo done
popd
PAUSE
上述batch主要是載Rhino-Tools,但我們主要是看NHQG. so, 載完後NHQG有三個專案:
NHibernate.Query.Generator, NHibernate.Query.Generator.Model, NHibernate.Query.Generator.Tests,
但是經過Build後, Test專案會有一個錯誤, Test專案是用 Model.dll 參考來產生hbm.xml檔, 所以 dll內有一個CS沒有按照 urn:nhibernate-mapping-2.2 的規範, 就會出錯.
System.Xml.Schema.XmlSchemaValidationException: The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'property' in namespace 'urn:nhibernate-mapping-2.2'. List of possible elements expected: 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id' in namespace 'urn:nhibernate-mapping-2.2'.
原因是WierdClass.cs 的 MesajIst 類別沒有 Id ?
我的解決方式, 是把它註解 ?! Test專案也不去測 MesajIst ?!
還沒仔細研究, 先測試過吧.

2012年8月3日 星期五

Eclipse+SysdeoTomcatPlugin

要記錄一件很X的事件, 花了我一天, 剛好一天!
  因為要追 directjngine 的問題,  去載了它1.0的source. 因為看到它的eclipse專案匯入後用到.tomcatplugin, 所以就想說要去載Sysdeo的Plugin來試試看.之前知道這個PlugIn, 只知道它可以啟動tomcat; 看了http://www.eclipsetotale.com/tomcatPlugin.html 的說明, 看到 DevLoader 好像不錯(說明), 因為它可以直接從Eclipse啟動tomcat, 並動態載入class及jar, 按照它的說明,
1.Eclipse安裝了Plugin.
2.設定的tomcat.
3.將eclipse下dropins/com.sysdeo.eclipse.tomcat_3.3.0(我的載3.3.0版)的DevLoader.zip解壓到tomcat/common/classes裡面.(jk, 發現了嗎?紅字的部份)
4.將tomcat啟動(當然是用plugin的方式啟動)
結果, 還沒有作第3步時的錯誤: java.lang.ClassNotFoundException: org.apache.catalina.loader.DevLoader
變成
java.lang.NoClassDefFoundError: org/apache/catalina/loader/WebappLoader

接下來就是花了一天的時間作白工.

專案Properties內Tomcat的DevLoader Classpoath的Active DevLoader要啟動(打勾)
不是專案reloaderable=true的問題.
不是DevLoader.java的問題,我甚到還重新compile了DevLoader.
(DevLoader 繼承自 WebappLoader )
不是Tomcat版本的問題, 雖然網路上說它只支援到Tomcat5.x

是我解錯誤位置了, 應該要將DevLoader.zip 解到  [tomcat]\server\classes
重新啟動tomcat後, 看到console內有 
...

[DevLoader] Starting DevLoader
[DevLoader] projectdir=C:\Users\xxx\Documents\JavaProjects\xxx\WebContent
[DevLoader] added file:/C:/Users....

...
就是成功了.

大概是新手才會碰到的問題, 但是還是記錄一下, 免得再浪費一天.

如果是Tomcat6, 請將DevLoader 包成jar檔, 放在Tomcat6\lib下