其實這是在找相關的資料時看到的,只要修改"{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)