JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Application Server » Tomcat  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 在 freebsd上 的 tomcat + apache [分享] [精華]
marace

網路這份憾動力,言語實在很難表達



發文: 183
積分: 4
於 2003-12-03 18:48 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
在freebsd 4.9上
經過戲劇性的處理安裝jdk與tomca
並且run的很順利後
再來就打算著手處理apache和tomcat的整合了
(整合我的 apache2 和 tomcat4.1.29 )

想開始使用 jk2
不過問題又來了 = = (其實對我來說已經沒什麼好大驚小怪了...||Sleepy
在java支援狀況極為不佳的freebsd 4.x 上面
mod_jk的compile果然出了問題

在參考各地資料 ( jk2 for linux) 及教學資料後
抓回jakarta-tomcat-connector-jk2-2.0.2.tar.gz後
tra 解開此檔案後
1
2
3
4
cd /usr/local/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2 
./configure --with-jni --with-apxs2=/usr/local/sbin/apxs
make
 

此時 make 就會出現error = =
連make都make不起來...

我遇到的error訊息指出某檔案的語法或程式內容有問題(我猜的)

1
2
3
4
5
6
list=' server/apache2';  for i in $list; do  echo "Making $target in $i";  if test "$i" != "."; then  (cd $i && make) || exit 1;  fi;  done;
Making  in server/apache2
Error expanding embedded variable.
*** Error code 1
 
Stop in /usr/local/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2.


改用ports安裝mod_jk2更不用說也是出現error . stop in mod_jk2 = =

mod_jk compile 不過自然就找不到 mod_jk.so 這檔案了....


marace edited on 2003-12-04 12:16
reply to postreply to post
作者 Re:在 freebsd上 的 tomcat + apache [成功版] [Re:marace]
marace

網路這份憾動力,言語實在很難表達



發文: 183
積分: 4
於 2003-12-04 12:00 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
經過上面的經驗
發現到要用 jk2 來達到整合 apache2 與 tomcat
在 freebsd 4.9 上面可能是行不通的
( 4.5-4.9應該都差不多.可參考我的freebsd安裝java經驗那篇 )
( 當然!!並不保證每個人都一定會這樣... )

自己下載 jk2 回來解壓~編譯~
在 make mod_jk 時就會產生錯誤
用ports安裝 ( /usr/ports/www/mod_jk2 )
也會出現 Error Code 1 的錯誤代碼
( 如果事先更新過portstree.那恭喜了.應該會更糟 )

找了許多地方的資料都很難找到自己這狀況所需要的
因為多半是 linux 上的安裝教學與說明 .
freebsd可能是先前提及的sun已經不主動支援所以很難找到適用的技術文件了
找了許久最後到 freebsd.org 去找找看有沒有歷史資料
最後找到了 http://www.freebsd.org/cgi/cvsweb.cgi/ports/www/mod_jk2/
放著 mod_jk2 for freebsd 的 ports source . 並且選擇 4.9 release 的版本

在無計可施的情況下把所有檔案抓了回來
再把他們包成 mod_jk.tar.gz 檔 (包含五個檔案與一個files夾.內有三個檔案)
然後把自己server上的 /usr/ports/www/mod_jk2/ 的檔案全都刪除掉
1
2
cd /usr/ports/www/mod_jk2/ 
rm -r *


接著把自己做的 tar.gz 檔放進去並解壓
1
2
3
cp /你放檔案的地方/mod_jk.tar.gz /usr/ports/www/mod_jk2/ 
tar zxvf mod_jk.tar.gz
rm mod_jk.tar.gz


解出檔案並安置好後...就開使安裝看看囉...|||
1
make install clean

在這裡建議仔細看看 make install 顯示的訊息
尤其是各個path . 對之後的處理動作也比較有幫助
還有!!在freebsd.org剛那網頁中 先看看各個檔的 source code . 降會比較清楚他把編譯後的檔案安置在那裡!!!!


接著~到你的 apache2 設定檔的位置
( 一般如果你是 ports 安裝的話.應該在/usr/local/etc/apache2 中 )
1
2
cd /usr/local/etc/apache2
ls  // list一下看看所有檔案

你會發現多了workers.properties.sample 和 mod_jk.conf.sample 這兩個檔案
( 基本上這表示你的 mod_jk2 安裝是成功的 )

接著在同目錄建立 workers.properties 和 mod_jk.conf這兩個檔案
1
2
3
4
5
6
cp workers.properties.sample workers.properties
cp mod_jk.conf.sample mod_jk.conf
 
// 建議直接copy那兩個sample來改..
// 因為那兩個sample故名思意就是範例檔
// 裡面寫的語法及參數會比網路上任何文章都來的貼切適用 (就for freebsd而言)


接著修改這兩個檔案中的設定成你要的吧!!
先來處理 mod_jk.conf 設定檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ee mod_jk.conf // 我是用 ee 這個編輯器 . 你也可以用 vi
 
// mod_jk.conf 內容
 
# Incredibly simple workers.properties file, intended for connecting
# to one host, via AJP13.  See the tomcat documentation for
# information on more exotic configuration options.
#
# Change jsp-hostname to the hostname of your JSP server.
#
worker.list=jsp-hostname
 
worker.jsp-hostname.port=8009
worker.jsp-hostname.host=jsp-hostname
worker.jsp-hostname.type=ajp13
worker.jsp-hostname.lbfactor=1
 
// 看到一開始的註解了嗎?? intended for connecting to one host, via AJP13
// apache 會透過 AJP13 這個介面與tomcat host溝通喔!!
// 所以這裡指的 jsp-hostname 應該是能夠與 server 溝通的介面 ( 就是ajp13 ) 
// (個人想法.錯的話請告訴我^^") . 不要打成 ip 了喔
// port 不用說就是與 server 溝通的通訊埠 . 此為 8009
// 這裡的 host 與 jsp-hostname 不同 . 這裡才是指你 server 實際上 的 hostname
// type 就是通訊介面的類型 ( ajp13 ) 
// lbfactor 就是 loadbalancer factor . 先不改他吧 . 因為我也不確定參數的差別


所以我的 mod_jk.conf 檔範例 :
1
2
3
4
5
6
7
8
<IfModule mod_jk.c>
        JkWorkersFile /usr/local/etc/apache2/workers.properties
        JkLogFile  logs/jk.log
        JkLogLevel warn
 
        JkMount /*.jsp ajp13
        JkMount /servlet/* ajp13
</IfModule>


處理 workers.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 ee workers.properties
 
// workers.properties 裡面的內容
 
# Replace jsp-hostname with the hostname of your JSP server, as
# specified in workers.properties.
#
<IfModule mod_jk.c>
        JkWorkersFile /usr/local/etc/apache2/workers.properties
        JkLogFile  logs/jk.log
        JkLogLevel warn
 
        # Sample JkMounts.  Replace these with the paths you would
        # like to mount from your JSP server.
        JkMount /*.jsp jsp-hostname
        JkMount /servlet/* jsp-hostname
        JkMount /examples/* jsp-hostname
</IfModule>

// JkMount 是把你 jsp 的目錄掛載進來 . 視你自己的需求來設定
// jsp-hostname 是 tomcat server 的 hostname (廢話^^||)
// 剛提過 apache2 是透過 ajp13 與 tomcat 溝通的. 所以應該將 hostname 改為 ajp13


我的 workers.properties 設定範例 :
1
2
3
4
5
6
worker.list=ajp13
 
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1


接著就是對 apache2 本身來設定 mod_jk 模組的起用囉
1
2
3
4
5
6
7
8
9
10
ee httpd.conf
 
// 找到 #LoadModule jk_module 這行
 
#LoadModule jk_module  libexec/apache2/mod_jk.so
 
// 如果剛剛在 ports mod_jk2 個安裝過程中有仔細看的話
// 就會看到 [preparing module `jk' in /usr/local/etc/apache2/httpd.conf] 這訊息
// 表示 已經將 LoadModule jk_module 的設定在 apache2 的 httpd.conf 中處理好了
// 所以我們把 #LoadModule jk_module  libexec/apache2/mod_jk.so 的 # 拿掉就等於指定 jk_module 的載入了


好了!!!大功告成........了大部份
設定好之後
先來試試 apache2 和 tomcat 兩個 server 本身的運作狀況以確保 整合不起來的話並不是 apache2 和 tomcat 本身的問題
ps. tomcat 不需要將 port="8080" 改成 80 . 保持原設定就可以了

先 restart apache2 與 tomcat
開啟瀏覽器 ( 如果你沒有xwindow的話就在client做ㄅ ) .以本機為例n到 http://localhost/ <--- 看的到畫面就是 apache ok 啦 (例 index.html)
http://localhost:8080/ <--- 看的到畫面就是 tomcat 本身也 ok 啦 (例 index.jsp)

再來就是到 http://localhost/index.jsp
↑↑↑注意!!我要瀏覽 jsp 網頁不過我的沒有打 port 8080 喔↑↑↑

看到一隻貓了!!!! ( tomcat預設首頁 )
apache2 + tpmcat 成功 !!!! 真是可喜可樂.....

note :
這原本是小弟在 freebsd 4.x 上處理 apache2 + tomcat5 的經驗 ( 失敗與成功 )
因為小弟在這些日子來不斷搜尋的感想實在是覺得 java for freebsd 的相關文章與資料是少之又少又不清楚 ... |||
雖說 sun 不對 freebsd 提供技術上的支援
但總不能就因此叫這些 freebsd 的慣用者或愛好者就此放棄吧 =_=
所以順便以步驟式的內容 post 上來
一方面當作記錄一方面也希望對以後像我一樣遇到這類問題的人有些幫助

note2 :
不過 freebsd 真是亂七八遭
原本 ports 中提供的新版檔案 ( 支援java的套件與軟體 ) 竟然多半不能在 4.x 上使用
既然如此還提倡要常常更新 portstree 取得最新版本 =_+
freebsd 5 五想可能比較不會有這類問題 因為是新上加新
最好笑的是更新 portstree 後的 mod_jk2 不能用 反而自己去抓的 ports 套件就可以用 = = ( 不是一樣的東西嗎? )
再來就是 明明在任何地方 mod_jk2 的 workers.properties 當都改成 workers2.properties 了
在 freebsd上明明是裝 jk2 但檔案卻不是workers2.properties !?!?
會把世人給混淆了...= =

note3 :
我此篇文章實做的系統規格為
OS : freebsd 4.9 (4.5~4.9應該都差不多)
jdk : 1.4.1 ( 決對不能用1.4.2...會讓你的 freebsd 變成 windows98 )
tomcat : 4.1.29 ( 5.x 在 freebsd 4.x 上 run 會有問題 )
apache : 2.x
jk : jk2 ( 傳說中是... )


marace edited on 2003-12-08 18:37
reply to postreply to post
作者 Re:在 freebsd上 的 tomcat + apache [成功版] [Re:marace]
marace

網路這份憾動力,言語實在很難表達



發文: 183
積分: 4
於 2003-12-05 14:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
話說的太滿...

整合動做完成後
經過多次測試後出現了一個大問題
apache 在載入 mod_jk 後起動就會出現
1
Cannot load /usr/local/libexec/apache2/mod_jk.so into server: /usr/local/libexec/apache2/mod_jk.so: Undefined symbol "pthread_mutex_unlock"

錯誤訊息
查了查資料後 pthread_mutex_unlock 好像是以往 freebsd 的 bugs 之一
我還找不到辦法解決掉這問題 = = ( 如果有人會的請不吝指教!!! )
只好別再嘴硬..改灌 freebsd 5.1 這較新的版本試試 . 看看 5.1 對 java 的支援程度會不會比較好
再不然 .... 就只好徹底放棄 BSD 了 ...

還是有人有這方面的經驗可以提供參考嗎???


reply to postreply to post
作者 Re:在 freebsd上 的 tomcat + apache [分享] [Re:marace]
marace

網路這份憾動力,言語實在很難表達



發文: 183
積分: 4
於 2003-12-09 15:10 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
找了一陣子資料
apache2 on freebsd 的 pthread_mutex_unlock 問題找到了解決方法
必須重新安裝 apache2 (建議用ports安裝)
並在安裝時加入參數 WITH_THREADS=yes
1
2
cd /usr/ports/www/apache2
make WITH_THREADS=yes install clean


至於 mod_jk 使用方式下面可以去參考看看!!
寫的比較"簡單" Embaressed
而且也有 hosts 整合的範例nhttp://jakarta.apache.org/tomcat/tomcat-3.3-doc/mod_jk-howto.html#s64

上篇的 mod_jk 設定
步驟上來說是沒什麼大礙的
不過 mod_jk 等等內容還是去參考網址中的教學比較好 (因為我好像有不少錯誤Embaressed)

問題總算又順利解決了!!!!!!!


reply to postreply to post
作者 Re:在 freebsd上 的 tomcat + apache [分享] [Re:marace]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-12-14 16:59 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
十分感謝 marace 兄 ... 熱情的分享
本站也是使用 freebsd
因此本篇對於本站有一份非常好的參考價值 ... (呵 . 下次改版可能要用 linux 了 .. Tongue)
anyway .. 感謝 marace 兄 .... Thumbs upThumbs up


reply to postreply to post
作者 Re:在 freebsd上 的 tomcat + apache [分享] [Re:browser]
marace

網路這份憾動力,言語實在很難表達



發文: 183
積分: 4
於 2003-12-14 21:52 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
browser wrote:
十分感謝 marace 兄 ... 熱情的分享
本站也是使用 freebsd
因此本篇對於本站有一份非常好的參考價值 ... (呵 . 下次改版可能要用 linux 了 .. Tongue)
anyway .. 感謝 marace 兄 .... Thumbs upThumbs up


不敢當 Embaressed
不過改用 linux 的確是個 good idea ....Tounge


reply to postreply to post
作者 Re:在 freebsd上 的 tomcat + apache [分享] [Re:marace]
jekyll





發文: 8
積分: 1
於 2003-12-14 22:43 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
marace wrote:
不敢當 Embaressed
不過改用 linux 的確是個 good idea ....Tounge


改用 Linux 有某人可能會瘋掉....ccc.....


reply to postreply to post
作者 Re:在 freebsd上 的 tomcat + apache [分享] [Re:marace]
tenyi





發文: 6
積分: 0
於 2004-05-03 12:54 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
小弟用的是FreeBSD 4.9 p5,試了很久終於找到不能連結的原因了。
原因是以ports安裝的tomcat,會以www的user執行,用這個user是無法產生8009的port。
所以小弟暫時以root執行tomcat,才能讓jk2順利執行。

用ports安裝apache2, tomcat5, mod_jk2_apache2,比起自己手動方便很多,但是預設的tomcat50ctl這支程式會用diablo-jdk1.3.1執行,user是www,因此會有少許問題,小弟改用 ${tomcat}/bin/startup.sh與
{$tomcat}/bin/shutdown.sh來執行。

因為用root執行會有security的問題,希望各位大大能夠指導一下,如何在freebsd上可以用www也能順利使用8009 port。

此外,小弟是看以下這篇裝成的
http://www.javaworld.com.tw/jute/post/view?bid=9&id=27864&sty=1&tpg=1&age=-1


tenyi edited on 2004-05-03 13:08
reply to postreply to post
» JWorld@TW »  Application Server » Tomcat

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8