內容 |
|
原本的JForum 2.1.8內sqlserver支援的是SQL Server 2005,且只能手動安裝,如果拿到SQL Server 2000上執行將無法執行成功,我參考了 http://www.jforum.net/jira/browse/JF-656,重新修改並測試後已可於SQL Server 2000上正常執行JForum 2.1.8,且可透過網頁介面方式安裝。
使用方式:
1.下載 jforum-2.1.8.zip或 jforum-2.1.8-src.zip,並解壓縮到Tomcat的webapps目錄下,重新命名為jforum
2.下載附加檔案後,解開到JForum安裝的目錄下,會覆蓋掉原來的install.htm並新增sqlserver2000相關目錄及JDBC Driver jtds-1.2.2.jar等。
3.附加檔案內的class是以Java 5.0編譯而成,如果需要可自行重新編譯
4.在SQL Server 2000上建立jforum資料庫,可透過Enterprise Manager執行下列動作:
4.1. 資料庫=>新增資料庫=>名稱:jforum
4.2. 安全性=>登入=>新增登入=>
[一般]
名稱:jforum
SQL Server的帳戶驗證
密碼:jforum
資料庫:jforum
[伺服器角色]
Database Creators
[資料庫存取]
請指定此登入者可存取的資料庫
jforum
'jforum'的資料庫角色
db_owner
確定=>確認密碼:jforum=>確定
5.連到http://your_server_name/jforum/install.jsp,資料庫選擇SQL Server 2000,其他依照畫面操作即可。
|
 |
|
除了此外,要讓文章一發表時如果有附件就立即能顯示附件圖示,還要修改net.jforum.view.forum.PostAction這個類別的insertSave()和editSave()兩個methods,主要是在新增完附件後,設定Topic物件的hasAttach屬性為true。我們可透過判斷Post物件的hasAttachments()來決定剛發表或修改的文章有沒有附件,另外,為避免被最後一篇發表的文章誤導,我們還要用原本Topc已有的hasAttach()來一起判斷,只要兩個其中一個為true,即表示該主題有附件:
insertSave():
attachments.insertAttachments(p);
t.setHasAttach(t.hasAttach() || p.hasAttachments());
editSave():
attachments.insertAttachments(post);
t.setHasAttach(t.hasAttach() || post.hasAttachments());
不過,這個方法有個bug,就是如果該主題只有一篇文章有附件,然後又把附件都刪光了,還是會顯示有附件。但是,一般來說通常發表有附件的文章後不太會去刪附件,而且重先載入JForum後也會正常顯示,所以這個應該算可以接受的bug吧!
|
 |
|
原來的版本有幾個小錯誤會造成執行跟RSS有關的功能出現錯誤畫面,另外有附加檔案的主題前面的小圖示也不會出現,只要將附加檔案下載後替換掉原來的WEB-INF/config/database/oracle/oracle.sql即可。
|
 |
|
一般我們設定Nortel Application Switch 2216(以前叫作Alteon Application Switch 2216)時,對於電子商務型網站等應用,需要讓使用者登入後存取同樣的伺服器(建立Persistence),通常會使用minmiss,hash或phash metric,針對來源IP去計算出hash值,然後找出對應的real server。不過這樣的方式,通常會導致如果來源IP是proxy或公司內部OA網路NAT出來的上網IP,甚至為了作壓力測試時產生的一堆模擬用戶,通通被導致同一部主機,造成空有一堆主機的computing power卻只能跑到一部主機的負載量。這樣子恐怕不是公司花錢買一堆伺服器想要看到的事。
那要如何解決這個問題呢?由於上述的方法是在connection建立之時,決定real server是哪部,我們可以改為等connection建立完畢之後,再決定real server是哪部,這樣子稱為delay binding。而決定的方式可以透過cookie來達成。主要的原理大致如下:
1. 用戶端送出未含Cookie的HTTP Request給負載平衡交換器
2. 負載平衡交換器將該HTTP Request依metric(例如round-robin)決定出後端real server
3. 伺服器處理完之後將HTTP Response送給用戶端時, 負載平衡交換器自動插入一個cookie,名稱可以自行定義,例如real_server
4. 用戶端下次送出的HTTP Request表頭將含有剛剛的real_server Cookie,此時負載平衡交換器會自動處理,以判斷出real server。
如此一來,透過round-robin這種輪流分配的負載平衡演算法,將可以平均分散負載到整個server farm的每部主機,即使來源端是同一個IP,也可以有效分散到各部主機。
詳細的說明及設定步驟可以參考以下原廠的網址或由本站下載附件:
http://www116.nortel.com/docs/bvdoc/alteon/tt/TT-0501402a.pdf
|
 |
|
|
 |
|
在大型的網站架構中,通常會使用上多部網頁伺服器來組成server farm,並在前面架設負載平衡交換器,以便隨時因應訪客量及伺服器負載而增減伺服器,達到高可用性的架構。
在只有一部網頁伺服器(假設包含應用伺服器,例如Apache+Tomcat)時,我們的網頁應用程式只要上傳一次到網頁伺服器指定目錄下即可,如果變成兩部時,那就得傳兩次,加到三部時,就傳三次,照這樣的邏輯推論下去,當主機成長到N部時,我們就得傳N次,N>=1。
不知道大家對上傳網頁程式這件事的看法為何,尤其在上線後,還要修修改改時,如有哪部主機忘了傳,就會造成網頁資料不同步,其實是滿繁瑣的一件事。
如果可以上傳一次到主要的伺服器,然後由這部主機自動再傳到其他主機器去,則管他N等於多少,我們都只需要手動上傳一次。而且如果有刪除檔案還會自動擴散到其他主機,省去到各部主機找檔案並刪除的時間。這麼棒的東西,難道只能是作夢嗎?不,科技始終來自於人性,想偷懶,其實還是推動進步的原動力之一啊。老早就有人做出來了,而且還是免費的,我們只要學會怎麼用就可以了。
這裡我們推薦一個工具-- rsync,可透過ssh將有差異部分的檔案備份到遠端主機去的方式,只要再設定crontab定時自動執行一個shell script,即可達到網站間安全同步的功能。
首先讓主要伺服器可以不需要輸入密碼透過ssh登入到備份伺服器:
1.在主要伺服器產生public/private dsa key pair檔案
[root@www ~]# cd /root/.ssh
[root@www .ssh]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
8f:f7:45:87:a0:11:a2:a7:ec:88:45:e8:33:21:35:3f root@www.andowson.com
產生兩個檔案:id_dsa和id_dsa.pub
[root@www .ssh]# ls -la
總計 24
drwx------ 2 root root 4096 11月 10 11:39 .
drwxr-x--- 7 root root 4096 10月 20 14:13 ..
-rw------- 1 root root 668 11月 10 11:39 id_dsa
-rw-r--r-- 1 root root 611 11月 10 11:39 id_dsa.pub
-rw-r--r-- 1 root root 2794 10月 9 22:41 known_hosts
2.將id_dsa.pub傳到備份伺服器的/root/.ssh目錄下,且更名為authorized_keys2
[root@www .ssh]# scp id_dsa.pub 192.168.1.4:/root/.ssh/authorized_keys2
The authenticity of host '192.168.1.4 (192.168.1.4)' can't be established.
RSA key fingerprint is e2:61:f0:78:31:21:72:ce:06:dd:da:02:f1:41:05:ec.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.4' (RSA) to the list of known hosts.
root@192.168.1.4's password:
id_dsa.pub 100% 611 0.6KB/s 00:00
3.測試是否可以不用輸入密碼登入備份伺服器
[root@www .ssh]# ssh 192.168.1.4
Last login: Sat Nov 10 11:37:58 2007 from 192.168.1.2
接下來就是將主要伺服器的檔案備份過去即可,
4.編輯一個shell script /root/admin/autosync.sh來做這件事:
#! /bin/bash
hosts="192.168.1.4"
for siteuser in `cat /root/admin/sites.txt`
do
if [ -d /home/${siteuser} ]
then
for host in $hosts
do
echo "sending $siteuser files to $host ..."
rsync -avlR --delete -e ssh /home/${siteuser}/ ${host}:/
done
fi
done
echo "done"
 注意到接收端的目錄要設為/,否則會在備份伺服器上多開一層home目錄。
如果有兩部以上備份主機則用空白隔開,例如hosts="192.168.1.4 192.168.1.5"
另外我採用另外編輯一個檔案/root/admin/sites.txt來控制要備份的目錄,如果全部都要備份可以用 ls /home即可。
/root/admin/sites.txt內容如下:
andowson
30elite
ezmatch
我們可以將上面的檔案存檔為/root/admin/autosync.sh,並設定為可執行
chmod 755 /root/admin/autosync.sh
參數意義如下﹕
-a, --archive
It is a quick way of saying you want recursion and want to preserve almost everything.
-v, --verbose
This option increases the amount of information you are given during the transfer.
-l, --links
When symlinks are encountered, recreate the symlink on the destination.
-R, --relative
Use relative paths. 保留相對路徑...才不會讓子目錄跟 parent 擠在同一層...
--delete
是指如果Server端刪除了一文件,那客戶端也相應把這一文件刪除,保持真正的一致。
-e ssh
建立起加密的連接。
參數的使用因人而異...您可以man rsync來使用更多的參數...
5.測試autosync.sh
/root/admin/autosync.sh
第一次會把全部的檔案都加入複製清單,如果到備份伺服器上有看到檔案被複製過來,就差不多了,可以順便測試看看在主要伺服器上刪除一些檔案,然後再執行一次,看會不會同步刪除,就大致測試完成了。
最後,將autosync.sh加到crontab去,可設定每兩分鐘同步一次
6. 編輯 /etc/crontab
*/2 * * * * /root/admin/autosync.sh
大功告成,以後便只需要上傳一次到主要伺服器,後續就由主要伺服器去同步複製到備份伺服器了。
問題討論:
1.如果有開放讓使用者上傳檔案,例如個人頭像(avatar)或是附件(attachment),則上傳到哪部主機是由負載平衡交換器動態決定,這部分要如何處理,才能讓使用者不管連到哪部伺服器都看得到檔案?
2.如果讓系統管理者新增最新消息或系統公告之類的東西,由於內容每次看都一樣,可於儲存內容到資料庫後,由系統自動寫成靜態網頁(省去每次都要連接資料庫撈取資料再轉成網頁的處理時間),這時寫到哪部主機也是不一定的,應該如何處理,才能讓使用者不管連到哪部伺服器都看得到檔案?(同樣也可適用於由系統跑出來的統計報表)
參考資料:
http://www.adj.idv.tw/server/linux_rsync.php
|
 |
|
將下面的程式儲存為/var/lib/pgsql/createdb.sh
psql -c "create user $1 createdb;" template1
psql -c "create database $1 with encoding 'unicode';" -U $1 template1
psql -c "alter user $1 nocreatedb;" template1
psql -c "alter user $1 with encrypted password '$1';" template1
然後將createdb.sh設定為可執行
chmod 755 createdb.sh
後續要新增資料庫執行下面的指令即可
su - postgres
./createdb.sh dbname
會產生名稱為dbname的使用者,密碼也是dbname,而資料庫名稱也是dbname
|
 |
|
公司的資料庫系統用的是裝在Solaris 9作業系統上的Oracle 9i R2,由於最近很多應用程式越跑越慢,於是得找一下Performance Tuning的資料,剛好找到 Sun BluePrints的資料,網址如下:
http://www.filibeto.org/sun/lib/blueprints/817-3835.pdf
|
 |
|
在CentOS 4.x上安裝Oracle9i Database Release 2 (9.2.0.4.0) for Linux x86時,依照 Oracle文件的說明,必須到 Metalink下載patch 4198954,以取得以下兩個套件才行:
compat-oracle-rhel4-1.0-5.i386.rpm
compat-libcwait-2.1-1.i386.rpm
如果沒有安裝在執行runInstaller時將會遇到下列的錯誤訊息:
symbol __libc_wait, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
由於沒有Oracle Metalink的帳號,勢必無法下載到patch,如此一來,安裝資料庫的任務便等著失敗了。
還好,在網路上找到資料,原來Oracle把這些檔案也放在網路上,供大家下載,網址如下:
http://oss.oracle.com/projects/compat-oracle/dist/files/RedHat/compat-libcwait-2.1-1.i386.rpm
http://oss.oracle.com/projects/compat-oracle/dist/files/RedHat/compat-oracle-rhel4-1.0-5.i386.rpm
下載並安裝後,果然就可以執行runInstaller了。
參考資料:
http://www.oracle-base.com/articles/9i/Oracle9iInstallationOnRedHatAS4AndCentos4.php
http://www.linuxsir.org/bbs/thread232668.html
|
 |
|
|
 |
|
今天嘗試安裝CentOS 5.0+ Oracle Application Server 10g, 一開始Oracle就顯示只支援Red Hat Enterprise Linux AS/ES 3.0 (Update 3以後版本)和Red Hat Enterprise Linux AS/ES 4.0 (Update 1以後版本)以及SUSE Linux Enterprise Server 9, 雖然靠著修改/etc/redhat-release內容的方式, 騙過了檢查作業系統版本這個關卡, 結果到了最後一個步驟卻出現找不到libdb.so.2的錯誤訊息, 無法啟動Apache, 等於白裝了, 希望大家少走這條冤枉路.
參考資料:
http://www.oracle-base.com/articles/10g/OracleAS10g3InstallationOnRedHatAndCentOS.php
http://download.oracle.com/docs/cd/B31017_01/linux.1013/install/reqs.htm#CIHHHDHB
|
 |
|
顯示系統Process使用狀態(類似Linux的top指令)
$ prstat
顯示系統組態
$ /usr/platform/`uname -i`/sbin/prtdiag
System Configuration: Sun Microsystems sun4u Sun Fire 480R
系統時鐘頻率:150 MHz
記憶體大小:8192 百萬位元組
========================= CPUs ===============================================
執行 E$ CPU CPU
Brd CPU MHz MB Impl. 遮罩
--- --- --- ---- ------- ----
A 0 1050 8.0 US-III+ 11.0
A 2 1050 8.0 US-III+ 11.0
B 1 1050 8.0 US-III+ 11.0
B 3 1050 8.0 US-III+ 11.0
========================= 記憶體配置 ===============================
邏輯 邏輯 邏輯
MC 記憶庫 記憶庫 記憶庫 DIMM 交插 已交插
Brd ID num 大小 狀態 大小 係數 與
--- --- ---- ------ ----------- ------ ---------- -----------
A 0 0 512MB no_status 256MB 8-way 0
A 0 1 512MB no_status 256MB 8-way 0
A 0 2 512MB no_status 256MB 8-way 0
A 0 3 512MB no_status 256MB 8-way 0
A 2 0 512MB no_status 256MB 8-way 0
A 2 1 512MB no_status 256MB 8-way 0
A 2 2 512MB no_status 256MB 8-way 0
A 2 3 512MB no_status 256MB 8-way 0
B 1 0 512MB no_status 256MB 8-way 1
B 1 1 512MB no_status 256MB 8-way 1
B 1 2 512MB no_status 256MB 8-way 1
B 1 3 512MB no_status 256MB 8-way 1
B 3 0 512MB no_status 256MB 8-way 1
B 3 1 512MB no_status 256MB 8-way 1
B 3 2 512MB no_status 256MB 8-way 1
B 3 3 512MB no_status 256MB 8-way 1
========================= IO 卡 =========================
Bus Max
IO Port Bus Freq Bus Dev,
Type ID Side Slot MHz Freq Func State Name Model
---- ---- ---- ---- ---- ---- ---- ----- -------------------------------- ----- -----------------
PCI 8 B 5 33 33 5,0 ok SUNW,XVR-100 SUNW ,375-3126
顯示CPU速度、型號
$ /usr/sbin/psrinfo -v
Status of processor 0 as of: 10/18/07 22:16:42
Processor has been on-line since 01/15/07 16:27:48.
The sparcv9 processor operates at 1050 MHz,
and has a sparcv9 floating point processor.
Status of processor 1 as of: 10/18/07 22:16:42
Processor has been on-line since 01/15/07 16:27:48.
The sparcv9 processor operates at 1050 MHz,
and has a sparcv9 floating point processor.
Status of processor 2 as of: 10/18/07 22:16:42
Processor has been on-line since 01/15/07 16:27:48.
The sparcv9 processor operates at 1050 MHz,
and has a sparcv9 floating point processor.
Status of processor 3 as of: 10/18/07 22:16:42
Processor has been on-line since 01/15/07 16:27:45.
The sparcv9 processor operates at 1050 MHz,
and has a sparcv9 floating point processor.
顯示周邊設備清單
$ prtconf -D
System Configuration: Sun Microsystems sun4u
Memory size: 8192 Megabytes
System Peripherals (Software Nodes):
SUNW,Sun-Fire-480R
packages
SUNW,builtin-drivers
deblocker
disk-label
terminal-emulator
SUNW,debug
dropins
obp-tftp
kbd-translator
SUNW,i2c-ram-device
SUNW,fru-device
ufs-file-system
chosen
openprom
client-services
options, instance #0 (driver name: options)
aliases
memory
virtual-memory
SUNW,UltraSPARC-III+ (driver name: us)
memory-controller, instance #0 (driver name: mc-us3)
SUNW,UltraSPARC-III+ (driver name: us)
memory-controller, instance #1 (driver name: mc-us3)
SUNW,UltraSPARC-III+ (driver name: us)
memory-controller, instance #2 (driver name: mc-us3)
SUNW,UltraSPARC-III+ (driver name: us)
memory-controller, instance #3 (driver name: mc-us3)
pci, instance #0 (driver name: pcisch)
SUNW,XVR-100, instance #0 (driver name: pfb)
ide, instance #0 (driver name: uata)
disk (driver name: dad)
cdrom (driver name: sd)
sd, instance #0 (driver name: sd)
pci, instance #1 (driver name: pcisch)
pci, instance #2 (driver name: pcisch)
ebus, instance #0 (driver name: ebus)
flashprom
bbc (driver name: bbc)
power (driver name: power)
i2c, instance #1 (driver name: pcf8584)
fru, instance #0 (driver name: seeprom)
fru, instance #1 (driver name: seeprom)
fru, instance #2 (driver name: seeprom)
fru, instance #3 (driver name: seeprom)
fru, instance #4 (driver name: seeprom)
fru, instance #5 (driver name: seeprom)
fru, instance #6 (driver name: seeprom)
fru, instance #7 (driver name: seeprom)
fru, instance #8 (driver name: seeprom)
fru, instance #9 (driver name: seeprom)
fru, instance #10 (driver name: seeprom)
fru, instance #11 (driver name: seeprom)
fru, instance #12 (driver name: seeprom)
fru, instance #13 (driver name: seeprom)
fru, instance #14 (driver name: seeprom)
fru, instance #15 (driver name: seeprom)
fru, instance #16 (driver name: seeprom)
fru, instance #17 (driver name: seeprom)
fru, instance #18 (driver name: seeprom)
fru, instance #19 (driver name: seeprom)
fru, instance #20 (driver name: seeprom)
fru, instance #21 (driver name: seeprom)
fru, instance #22 (driver name: seeprom)
fru, instance #23 (driver name: seeprom)
fru, instance #24 (driver name: seeprom)
fru, instance #25 (driver name: seeprom)
fru, instance #26 (driver name: seeprom)
fru, instance #27 (driver name: seeprom)
fru, instance #28 (driver name: seeprom)
fru, instance #29 (driver name: seeprom)
fru, instance #30 (driver name: seeprom)
fru, instance #31 (driver name: seeprom)
fru, instance #32 (driver name: seeprom)
fru, instance #33 (driver name: seeprom)
nvram, instance #34 (driver name: seeprom)
idprom
fru, instance #35 (driver name: seeprom)
fru, instance #36 (driver name: seeprom)
i2c, instance #0 (driver name: pcf8584)
temperature, instance #0 (driver name: max1617)
temperature, instance #1 (driver name: max1617)
temperature, instance #2 (driver name: max1617)
ioexp, instance #0 (driver name: pcf8574)
ioexp, instance #1 (driver name: pcf8574)
ioexp, instance #2 (driver name: pcf8574)
temperature, instance #3 (driver name: max1617)
ioexp, instance #3 (driver name: pcf8574)
ioexp, instance #4 (driver name: pcf8574)
ioexp, instance #0 (driver name: ssc050)
ioexp, instance #1 (driver name: ssc050)
temperature-sensor, instance #0 (driver name: lm75)
fru, instance #37 (driver name: seeprom)
fru, instance #38 (driver name: seeprom)
fru, instance #39 (driver name: seeprom)
fru, instance #40 (driver name: seeprom)
fru, instance #41 (driver name: seeprom)
rscrtc
rtc, instance #0 (driver name: todds1287)
gpio (driver name: gpio_87317)
pmc (driver name: pmc)
rsc-control, instance #0 (driver name: su)
rsc-console, instance #1 (driver name: su)
serial, instance #0 (driver name: se)
usb, instance #0 (driver name: ohci)
network, instance #1 (driver name: ce)
pci, instance #3 (driver name: pcisch)
network, instance #2 (driver name: ce)
SUNW,qlc, instance #0 (driver name: qlc)
fp (driver name: fp)
disk (driver name: ssd)
fp, instance #0 (driver name: fp)
ssd, instance #0 (driver name: ssd)
ssd, instance #1 (driver name: ssd)
os-io
pseudo, instance #0 (driver name: pseudo)
顯示系統資訊
$ sysdef
檢查作業系統是64-bit還是32-bit
$ isalist -v
sparcv9+vis2 sparcv9+vis sparcv9 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
$ isainfo -v
64-bit sparcv9 applications
32-bit sparc applications
顯示硬碟資訊
$ iostat -E
sd0 Soft Errors: 0 Hard Errors: 2 Transport Errors: 0
Vendor: TOSHIBA Product: DVD-ROM SD-C2612 Revision: 1011 Serial No: 04/17/02
Size: 18446744073.71GB <-1 bytes>
Media Error: 0 Device Not Ready: 2 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0
ssd0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: HITACHI Product: DK32EJ72FSUN72G Revision: 2Q09 Serial No: 0336W1C5PQ
Size: 73.40GB <73400057856 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0
ssd1 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: HITACHI Product: DK32EJ72FSUN72G Revision: 2Q09 Serial No: 0336W1939F
Size: 73.40GB <73400057856 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0
參考資料:
http://www.optix.org/~dxy/solaris/command/
http://blog.joycode.com/peon/articles/47128.aspx
|
 |
|
今天為了升級Load Balance Switch的Firmware需要找TFTP Server的軟體,搜尋了一下發現了TFTPD32 是一個免費的TFTP Server軟體工具,由 Philippe Jounin (philippe@jounin.net) 開發,解開後直接點兩下執行檔就可以開始服務了。
您可直接到 http://tftpd32.jounin.net/網站去下載或是由本站下載附件。
|
 |
|
|
 |
|
今天試著熟悉一下OLAT的功能, Demo course一個一個去try, 到了Demo course wiki的時候發現無法用Search去新增wiki, 出現下面的錯誤訊息:
2007-10-15 00:00:39,911 [TP-Processor17] ERROR Window - OLAT::ERROR ^%^ E1 ^%^ org.olat.core.gui.components ^%^ administrator ^%^ 220.139.220.139 ^%^ http://www.andowson.com/olat/auth/1%3A-1%3A0%3A0%3A0/ ^%^ Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7 ^%^ **RedScreen** exception while rendering component 'wikiarticle' (org.olat.core.gui.components.velocity.VelocityContainer) listener:[org.olat.modules.wiki.WikiMainController@14cd198 [cListener:-]]
Message of exception: MethodInvocationException occured while merging template: methName:render, refName:r ::_:: ::_:: ^%^ >>>stack of 1.cause::org.olat.core.logging.OLATRuntimeException: exception while rendering component 'wikiarticle' (org.olat.core.gui.components.velocity.VelocityContainer) listener:[org.olat.modules.wiki.WikiMainController@14cd198 [cListener:-]]
Message of exception: MethodInvocationException occured while merging template: methName:render, refName:r -> at org.olat.core.gui.components.Window.dispatchRequest(Window.java:533) at org.olat.core.gui.components.Window.doDispatchRequest(Window.java:153) at org.olat.core.gui.components.Component.dispatchRequest(Component.java:119) at org.olat.dispatcher.AuthenticatedDispatcher.execute(AuthenticatedDispatcher.java:202) at org.olat.core.dispatcher.DispatcherAction.execute(DispatcherAction.java:182) at org.olat.core.servlets.OLATServlet.doPost(OLATServlet.java:137) at org.olat.core.servlets.OLATServlet.doGet(OLATServlet.java:121) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)>>>stack of 2.cause::org.olat.core.logging.OLATRuntimeException: MethodInvocationException occured while merging template: methName:render, refName:r -> at org.olat.core.gui.render.velocity.VelocityHelper.merge(VelocityHelper.java:108) at org.olat.core.gui.render.velocity.VelocityHelper.mergeContent(VelocityHelper.java:124) at org.olat.core.gui.components.velocity.VelocityContainerRenderer.render(VelocityContainerRenderer.java:102) at org.olat.core.gui.render.Renderer.render(Renderer.java:311) at org.olat.core.gui.components.tabbedpane.TabbedPaneRenderer.render(TabbedPaneRenderer.java:138) at org.olat.core.gui.render.Renderer.render(Renderer.java:311) at org.olat.core.gui.render.Renderer.render(Renderer.java:211) at org.olat.core.gui.render.velocity.VelocityRenderDecorator.doRender(VelocityRenderDecorator.java:483) at org.olat.core.gui.render.velocity.VelocityRenderDecorator.render(VelocityRenderDecorator.java:327) at sun.reflect.GeneratedMethodAccessor1419.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)>>>stack of 3.cause::java.lang.StackOverflowError: null -> at java.util.regex.Pattern.isSurrogate(Pattern.java:2850) at java.util.regex.Pattern.isSupplementary(Pattern.java:1733) at java.util.regex.Pattern.newSingle(Pattern.java:2949) at java.util.regex.Pattern.atom(Pattern.java:1985) at java.util.regex.Pattern.sequence(Pattern.java:1885) at java.util.regex.Pattern.expr(Pattern.java:1752) at java.util.regex.Pattern.compile(Pattern.java:1460) at java.util.regex.Pattern.<init>(Pattern.java:1133) at java.util.regex.Pattern.compile(Pattern.java:823) at java.lang.String.replaceAll(String.java:2190) at org.olat.modules.wiki.gui.components.wikiToHtml.FilterUtil.normalizeWikiLink(FilterUtil.java:52)
2007-10-15 00:00:56,075 [TP-Processor10] ERROR syslog - Method render threw exception for reference $r in template org/olat/modules/wiki/_content/article.html at [75,25]
不過在[olat_developers]的mailing-list上已經有發布解決方案了, 就是把附檔下載後解開來, 將五個檔案上傳到OLAT安裝目錄下的/WEB-INF/classes目錄下, 再重新啟動Tomcat即可.
|
 |
|
|
|