2012年10月5日 星期五

Lotus Notes 加速大絕

其實這是在找相關的資料時看到的,只要修改"{notes}\framework\rcp\deploy"中的jvm.properties打開後將vmarg.Xmx=-Xmx256m改為 vmarg.Xmx=-Xmx512m,並且重開Notes,應該就會快很多。

PS.修改前請先確認本身的記憶體大小,不然Notes會當掉。

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

JTOpen用在Tomcat JNDI載入的使用辦法

其實沒什麼太特別的設定方法,只要將JTOpen的jar檔放在tomcat的lib中,並在在Server.xml中加上下面這段語法就行了
         
         
            
             
              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,得到奇怪的字元,所以有兩個方向可走。
  1. 確定讀取到的AS400資料庫CCSID為937,那translate binary可走預設(False)
  2. 如果不確定 AS400資料庫CCSID為何,那translate binary就預設為True,透過JTOpen來做轉碼


AS400相關的CCSID預設與Windows的對應

2012年5月30日 星期三

如何知道Java Class檔是使用那種版本的JDK complier出來的?

最近在試WebService的程式,希望能用來讓ERP系統串接其他系統使用,不過由於系統使用的是1.4.2的JDK…所以如果是太新的third party jar檔就無法使用
所以就引發了一個問題…如果什麼都沒寫連META-INF也都沒有…要怎麼知道這個Class是用那個Version的JDK生的?
Google了一下,其實方法不難…將該class檔用16進位的軟體讀出來就可以知道
查到的wiki中有說…找到第八個byte…
詳見下方的內容
J2SE 7    = 51 (0x33 hex),
J2SE 6.0 = 50 (0x32 hex),
J2SE 5.0 = 49 (0x31 hex),
JDK 1.4   = 48 (0x30 hex),
JDK 1.3   = 47 (0x2F hex),
JDK 1.2   = 46 (0x2E hex),
JDK 1.1   = 45 (0x2D hex).
要看的是0x後面紅色的部分(因為是使用16進位來看)
如果找到的是2E…那對應過去就是JDK 1.2版的依此類推…
如此一來就算只有class檔…也能分辨出來是使用那個版本的JDK 生出來的

reference
http://en.wikipedia.org/wiki/Class_%28file_format%29#General_layout

2012年5月14日 星期一

Apple iPad Camera Connection Kit無法讀照片的原因

之前媽媽的朋友家的小孩買了 iPad Camera Connection Kit,讓她能方便的直接將相機裡的照片轉到ipad中,這東西實在是方便,但也帶來了不便…
某天,該位朋友打給我說照片從別人那邊copy回來都無法放入ipad
我到他家也試了好久…google才發現原來事有奚翹
由於他自朋友那邊copy過來的檔名已經變了所以才無法讀取
原因是…不管什麼相機照出來的圖片檔名前面一定是八碼

EX:00000001.jpg

由於他copy過來的檔名已經被更動,所以ipad認為那不是相機拍出來的照片,所以就不會去理他(就算他是圖檔)

所以解法很簡單,找個重新命名的軟體將照片全部重新命名成八碼長度就可以讓ipad順利讀取啦

更新:記得要放到DCIM的資料夾中才能被讀取到

2012年4月19日 星期四

GIT好好玩

其實很早就聽過git這個版本控制軟體,但一直沒有去認真研究,直到這次參加osdc…才驚覺自己好像沒跟上這次的潮流…所以就開始學習關於git 和github的相關控制。還好之前有玩過cvs和svn…所以再學習git還滿快就上手的,只是玩了git真的會發現他的好…
這篇沒打算做相關的教學,只是要memo一下找到一些不錯的文章和slide

littlebtc寫給大家的Git教學 <-其實這個slide就介紹的滿完整的

ihower大大的Git and Github 演講投影片<-內有相關的系列文,還滿值得一看的

Git 初學筆記 - 指令操作教學  <-說明git必學的指令集

GIT Book

github help

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

2012年3月3日 星期六

重新開張!!!

        其實還是比較多的時間想說使用plurk來記錄自已平時做的事,但現在才發現不對,因為這類的微網誌無法記錄比較詳細的過程,又受Max和學弟的影響,所以決定重新回來這邊寫文章,好好的把自己在公司或是在網路上學習到的相關技術來分享,也會將之前寫過的東西慢慢的分享到這個Blog中…如內容寫的有問題,請大大們不吝指導!!!