顯示具有 ibm 標籤的文章。 顯示所有文章
顯示具有 ibm 標籤的文章。 顯示所有文章

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。
package my;

public class javaMain {
    public String getMessage(){
        return "This is Message from Java";
    }
} 

 
"我有相關用到的Jar檔要用,怎麼辦" ,解法有二。
  1. 選"匯入"到"保存"中(存到Server中)
  2. 放在"{NotesPath}\jvm\lib\ext"中(存在Clinet中)
這兩個差在那?讀取資料庫的效率!!如果Jar檔過大,在JVM開始載入相關的Jar檔,在保存中的Jar,需讀取下來,所以需要網路傳送的時間,所以效能較存在Clinet中慢。但如果存在Clinet中,會有發布的問題,因為是每個Clinet都要放置這個Jar檔,不然Notes會直接當給你看。

再來就可以寫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來抓取問題出來,以利問題的排除

其他
  1. JVM在第一次載入時會慢
  2. 一個JavaSeasion同名的Class只能有一個,先載入的為主,以Clinet為單位,所以只要JVM一將Class Load進來開不同的資料庫Seasion都會是同一個所Loading進來的Class也是共用
  3. 在Java 中寫System.out.println會出現在那?在NotesLotusClinet的工具列中的"工具\顯示JAVA偵錯控制台"所有的System.out.println都會出現在這
  4. 寫Java程式時,由於JVM已經起來,所以不會重新載入重寫過的Class,所以需將Notes重開,讓JVM重新載入新寫的Class

2012年4月18日 星期三

DB2系列:db2batch 的使用

在DB2中,如果需要評估SQL語法的效能,可以使用db2batch,相關參數說明如下

-d  dbname 資料庫名稱
-a username/password 帳號密碼
-f Filename 內容放SQL語法
-o 0 <-不輸出結果
p 2 <-顯示cpu的效能與執行時間

串起來長這樣
db2batch -d dbname -a username/password -f test.sql -o 0 p 2

不過需要有DB2的系統管理權的帳號才行使用

使用上很簡單,但要注意DB2版本的問題!!!
http://www-01.ibm.com/support/docview.wss?uid=swg1IY91197
剛好local裝的是V9.1
Server裝的是8.2
上面的解法是到Server 執行或是local改裝8.2的版本(換句話說就是在V9.1上是無解= =a)


reference
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/core/r0002043.htm

2012年3月5日 星期一

透過JDBC存取AS400的資料

在某天上班時,逛JavaWorld時正好看到這篇,發現到內有存取AS400的JDBC可使用,就去google了一下,找到了JTOpen這個IBM提供的tool...以下為實做與說明
自上述連接中下載 ,並解壓縮。裡面會有個lib的folder...這次需要的是jt400.jar這個jar 檔
將這個jar 檔放入專案中的Build path中
再來只要import進來

import com.ibm.as400.access.AS400JDBCDriver;

下面是連接AS400的語法

DriverManager.registerDriver(new AS400JDBCDriver());
Class.forName("com.ibm.as400.access.AS400JDBCConnection");
Connection conn = DriverManager.getConnection("jdbc:as400://"+YOUR AS400 IP, UserName, Password);

做完上述就能取得Connection,接下來就是和平常使用資料庫控制的方式一樣

其實設定的方式和一般資料庫的設定沒什麼差別,比較特別的地方應該是在對於table 控制的名稱 說明如下:
在AS400中
Library / Filename  <=來指定一個Table

而在JTOpen中
Library . Filename  <=來指定一個Table

此外…如果要對AS400中的某個member做讀寫,必需透過alias來完成
create alias AliasName For  Library.Filename(Member) 

當然,使用完後最好drop掉…不然AS400中會多一堆DDM File

2010年7月23日 星期五

使用 dom4j 解析 XML

寫的滿詳細的!!

算是長了一點XML的知識吧

小心得:
本來還以為上述的例子是完美的,結果實做後還是有發生一些問題!!
例子中的Dom4Jparser執行後 出現"c Nested exception: c"
原因是因為沒有"c:/Dtds/catalog.dtd"這個東西,但我加了一個假的還是沒用
所以只好修改前一支產生catalog.xml的java將"addDocType"的屬性拿掉
上述完成後,還以為都ok了…結果又出現了"nullpointexception" jaxen......
所以需再將dom4j.zip檔裡的jaxen.jar加入…就能順利產生"catalog-modified.xml"

待了解的部分
  • XPath 引擎

  • SAX

  • DOM