一周前,老師讓我們用Java去做項目,說句實話,我對Java真的是一知半解,絕對是個門外漢,無奈,老師的任務不能不完成,只好硬著頭皮去做。
我們有一個項目叫“資料倉儲”,以前是師兄們做的,採用的是Tomcat做伺服器,JSP+JavaBean做開發。後來老師為了“提高項目的技術含量”,決定改做J2EE版本,我們這裡幾乎沒有人用J2EE做過項目,於是大家就開始到處找資料,下載編譯器,忙得不亦樂乎。
最終,大家決定使用Oracle9i作資料庫,Weblogic7+JBuilder7作開發環境,原因很簡單Weblogic對J2EE支援的比較好,JBuilder開發環境還不錯,對機器要求不是太高(我們的機子比較差,P3-550+256M記憶體,剛好滿足最低要求:),本來以為很簡單的配置,很容易就會搞定,但是結果卻讓人大吃一驚。
按照培訓資料上面說的,一步步裝好了Weblogic7,測試console,通過,然後再按照說明把JBuilder7也裝上,並按照順序配置好了,大致流程如下:
Weblogic和JBuilder7整合後,經過配置,做出的Session Bean是好的,說明配置正確。
然後測試實體Bean:
1、設定Oracle9i的驅動:
在JBuilder7中,Tools-->Enterprise Setup...-->Database Driver,點擊Add,選擇Oracle的位置D:/Oracle/Ora91/jdbc/lib/classes12.zip,確定後,驅動在列表中出現,然後重新啟動JBuilder
2、建立工程Demo,然後建立一個EJB Module 取名Hustli,然後匯入資料庫Schema資訊。
3、輸入資料庫的串連資訊:我採用的是別人的機器上的oracle9,機器名是flyers,SID=daito,具體資訊如下:
Driver: oracle.jdbc.driver.OracleDriver
URL: jdbc:oracle:thin:@flyers:1521:daito
user=daito password=daito
JNDI NAME : DataSource
4、成功後,建立CMP EJB,輸入EJB資訊,其中interface採用的是remote
5、配置Weblogic中JDBC Pool和Data Source:
JDBC Pool:
Name: Pool
URL: jdbc:oracle:thin:@flyers:1521:daito
Properties: user=daito
Password: daito
Initial Capacity: 5
Maximum Capacity:10
Test Table Name: hustli(我建的一個表)
在Targets裡面加入myserver,其餘採用預設配置。
Data Source:
Name: DataSource
JNDI Name:DataSource
Pool Name:Pool
在Targets裡面加入myserver,其餘採用預設配置
然後重新啟動weblogic的設定頁面,成功
6、對EJB打包,deploy成功。
7、利用JBuilder7自動產生測試程式,改動main函數如下:
public static void main(String[] args)
{
try
{
Client client = new Client();
HustliRemoteHome home=client.getHome();
HustliRemote r=home.findByPrimaryKey("jjli");
System.out.println(r.getAge());
}
catch (RemoteException ex)
{
ex.printStackTrace();
}
catch(FinderException e)
{
e.printStackTrace();
}
}
結果出現錯誤,在Object ref = ctx.lookup("HustliRemote");(自動產生的)
錯誤如下:
javax.naming.NameNotFoundException: Unable to resolve 'HustliRemote' Resolved: '' Unresolved:'HustliRemote' ; remaining name 'HustliRemote'
後來這個問題也在各位師兄的機器上出現,毫無例外。
對於這個問題,大家討論了半天也沒有解決,於是各自分頭散去,大家靜下心來,把各種資訊自信的研究了,發現有一個共同點:在程式編譯的時候,有一個警告,大家開始沒有注意,後來就都注意到這個問題了,警告大致的意思是:臨時檔案目錄有空格,可能導致致命的錯誤。
但是我們發現系統的環境變數裡面的確有2各設定:TEMP和TMP,但是在使用者變數裡面一個、系統變數裡面一個,按照我的觀點,編譯器應該先搜尋系統變數裡面的,系統變數裡面的值是C:/WINNT/TEMP,這應該沒有什麼問題,於是我們在C盤建了一個目錄,名字叫Temp,並且把使用者變數裡面的TEMP和TMP的值都設定為C:/Temp,然後儲存,啟動JBuilder7,一切OK!
這個問題,看來是不是很BT?我很奇怪為什麼JBuider會先找使用者變數?
如果上面的問題不叫問題,那是我們沒有注意警告,下面的問題就太讓人鬱悶了。
Weblogic+JBuilder裝好了之後,運行了2天,然後為了殺毒,我又裝上了幾個殺毒軟體,開始全盤掃描硬碟,使用LoveGate居然殺到了幾個病毒,然後把感染的檔案全部刪除,重新啟動機器,然後做了點別的事情,就把這件事情給忘掉了,等到明天啟動JBuilder,不幸的事情發生了,deploy組件的時候,發現報錯:無法串連t3:/localhost:7001。
這豈不是怪事?我的伺服器明明開著的,一點異常的表現都沒有,然後我關掉JBuilder,用Weblogic控制台開啟伺服器,運行良好,結果當在地址欄裡輸入:http://localhost:7001時,居然找不到串連。
開始我懷疑是weblogic出了問題,然後卸載了weblogic重新安裝,問題依舊,最後把weblogic和JBuilder一起卸掉,重新裝,問題依然頑固的出現在我面前,究竟是怎麼了?難道是殺毒的時候把重要的檔案刪除了?沒有辦法,只好重新格式化硬碟,重新裝了系統,首先把weblogic裝上,運行良好,裝上JBuilder,配置完畢,一切都沒有任何問題,然後把一系列的軟體裝上,自然也裝了殺毒的KV3000,然後運行JBuilder,那個奇怪的問題又出現了!!!!
為瞭解決問題,我決定把安裝的軟體一個個的卸載,最後發現,如果卸載了KV3000,JBuilder就沒有任何問題,否則,只要開啟即時監測,就無法運行JBuilder7。
沒有辦法,只好把KV3000卸載。個人懷疑是不是KV3000對Java的運行進行監視,然後當作病毒殺掉,當然這隻是猜測,如果有那位高手能夠指點一二,不勝感激。