其實這是在找相關的資料時看到的,只要修改"{notes}\framework\rcp\deploy"中的jvm.properties打開後將vmarg.Xmx=-Xmx256m改為 vmarg.Xmx=-Xmx512m,並且重開Notes,應該就會快很多。
PS.修改前請先確認本身的記憶體大小,不然Notes會當掉。
2012年10月5日 星期五
LotusNotes的LS2J
最近公司使用LotusNotes(以下簡稱Notes)從R5升到R8.5.3,其中就有個新的功能LS2J(其實在R6版本就開始有)。由於先前需寫WebSphere MQ的Java程式,剛好就發現了這項功能的好處與缺點。其實國外的相關文件滿多可以參考的,以下就做個簡要的說明與實做。
在LotusDomino Designer(以下簡稱Designer)中建立一個資料庫。 Notes會自動將所需要的內容建起來。
在來就是在"程式碼\Script程式庫" 中"新增Script程式庫",名稱暫時叫"testJava",類型記得改成"Java",確定後,Designer就會幫我們做相關的配置。再來就是在Src中建立所需要的Package與Class啦…也可以在別的地方寫好的Java做匯入的動作,就能將寫好的程式直接載入進來。這邊放入個簡單回傳的code。
"我有相關用到的Jar檔要用,怎麼辦" ,解法有二。
再來就可以寫LotusScript(LSX)的部分了 ,這邊用代理程式來測試,首先,新增一個代理程式,名稱就叫"testJAVAFromAgent",類型選"LotusScript",建立後,在"Options"中加入下述兩行
第二行就是等一下會使用到的LS2J的元件
選Initialize,並加入下述程式碼
建立JavaSession,再由JavaSession取得要使用的Class名稱並給JavaClass,再由JavaClass產生Object出來,最後就是呼叫該Object有的method。最後Catch的部分則是當如果程式在Java中有throw exception時,可以透過catch來抓取問題出來,以利問題的排除
其他
在LotusDomino Designer(以下簡稱Designer)中建立一個資料庫。 Notes會自動將所需要的內容建起來。
在來就是在"程式碼\Script程式庫" 中"新增Script程式庫",名稱暫時叫"testJava",類型記得改成"Java",確定後,Designer就會幫我們做相關的配置。再來就是在Src中建立所需要的Package與Class啦…也可以在別的地方寫好的Java做匯入的動作,就能將寫好的程式直接載入進來。這邊放入個簡單回傳的code。
package my; public class javaMain { public String getMessage(){ return "This is Message from Java"; } }
"我有相關用到的Jar檔要用,怎麼辦" ,解法有二。
- 選"匯入"到"保存"中(存到Server中)
- 放在"{NotesPath}\jvm\lib\ext"中(存在Clinet中)
再來就可以寫LotusScript(LSX)的部分了 ,這邊用代理程式來測試,首先,新增一個代理程式,名稱就叫"testJAVAFromAgent",類型選"LotusScript",建立後,在"Options"中加入下述兩行
Use "testJava" UseLSX "*javacon"第一行就是上面寫的Script程式庫的名稱
第二行就是等一下會使用到的LS2J的元件
選Initialize,並加入下述程式碼
Sub Initialize Dim jsession As JavaSession Dim jclass As JavaClass Dim jObject As JavaObject Dim jerr As JavaError On Error GoTo Catch Set jsession = New JavaSession Set jclass = jsession.GetClass("my.javaMain") Set jObject = jclass.Createobject() MesssageBox jObject.getMessage() Catch: MessageBox "LS Error: " & Error Set jerr = jsession.GetLastJavaError() ret=ErrorHandling1(jerr.ErrorMsg()) MessageBox " Stack trace: " & jerr.Stacktrace() jsession.Clearjavaerror End Sub
建立JavaSession,再由JavaSession取得要使用的Class名稱並給JavaClass,再由JavaClass產生Object出來,最後就是呼叫該Object有的method。最後Catch的部分則是當如果程式在Java中有throw exception時,可以透過catch來抓取問題出來,以利問題的排除
其他
- JVM在第一次載入時會慢
- 一個JavaSeasion同名的Class只能有一個,先載入的為主,以Clinet為單位,所以只要JVM一將Class Load進來開不同的資料庫Seasion都會是同一個所Loading進來的Class也是共用
- 在Java 中寫System.out.println會出現在那?在NotesLotusClinet的工具列中的"工具\顯示JAVA偵錯控制台"所有的System.out.println都會出現在這
- 寫Java程式時,由於JVM已經起來,所以不會重新載入重寫過的Class,所以需將Notes重開,讓JVM重新載入新寫的Class
JTOpen用在Tomcat JNDI載入的使用辦法
其實沒什麼太特別的設定方法,只要將JTOpen的jar檔放在tomcat的lib中,並在在Server.xml中加上下面這段語法就行了
其中要注意的地方,就是"translate binary"這個parameter,由於AS400早期的資料庫編碼是EBCDIT,這個parameter預設為false,也就是不自動轉碼。如果AS400資料庫的CCSID為65535,也是不自動轉碼,所以透過JNDI取得的每個字元都會變成2byte,得到奇怪的字元,所以有兩個方向可走。
AS400相關的CCSID預設與Windows的對應
factory org.apache.commons.dbcp.BasicDataSourceFactory driverClassName com.ibm.as400.access.AS400JDBCDriver url jdbc:as400://ServerIP;translate binary=true username username password xxxxxxx minEvictableIdleTimeMillis 30000 maxActive 1000 maxIdle 8 maxWait 10000
其中要注意的地方,就是"translate binary"這個parameter,由於AS400早期的資料庫編碼是EBCDIT,這個parameter預設為false,也就是不自動轉碼。如果AS400資料庫的CCSID為65535,也是不自動轉碼,所以透過JNDI取得的每個字元都會變成2byte,得到奇怪的字元,所以有兩個方向可走。
- 確定讀取到的AS400資料庫CCSID為937,那translate binary可走預設(False)
- 如果不確定 AS400資料庫CCSID為何,那translate binary就預設為True,透過JTOpen來做轉碼
AS400相關的CCSID預設與Windows的對應
訂閱:
文章 (Atom)