2010年7月30日 星期五

WebSphere Application Server Dynamic Cache

WAS會cache servlet、WAS指令及JSP執行結果,以增進應用程式執行效能。WAS將這些cache活動,如servlet、Web servcies、WebSphere Command整合到Dynamic Cache這個服務之下。

Dynamic cahce service執行於AP server所在的JVM中,攔截servlet service的呼叫或是WAS指令的執行,將其執行結果cache起來,之後再呼叫同樣的servlet時,就可直接裝cache起來的object回傳,以增進效能。

在WAS上開啟 dynamic cache的方法如下:
1.登入WAS admin server
2.選定要設定的server後,選取Container Services下面的Dynamic Cache Service
image

2010年5月18日 星期二

設定 Rational 軟體的語系

Rational語系設定依不同版本,有不同之設定方式:

For version 6.0.x:

  • Start IBM Rational Software Development Platform executable (rationalsdp.exe) with the -nl argument followed by the language en_US (for United States English) such as:
    rationalsdp.exe -nl en_US
  • Add the variable VMArgs=-Duser.language=en into the filerationalsdp.ini under the individual VMArgs section as shown below:

    ; Add other individual VMArgs with additional VMArgs keys i.e.
    ; VMArgs=arg1
    ; VMArgs=arg2

    VMArgs=-Duser.language=en

Both rationalsdp.exe and rationalsdp.ini are located by default in:
<IBM_INSTALL_DIR>\rational\SPD\6.0
(for example, C:\Program Files\IBM\Rational\SDP\6.0)

=========================================================================

For version 7.0.x:

  • Start IBM Rational Software Delivery Platform with the -nlargument followed by the language en_US (for United States English) such as:
    RSA
    "eclipse.exe" -nl en_US -product com.ibm.rational.rsa.product.ide

    RAD
    "eclipse.exe" -nl en_US -product com.ibm.rational.rad.product.ide
    RSM
    "eclipse.exe" -nl en_US -product com.ibm.rational.rsm.product.ide
    RSD
    "eclipse.exe" -nl en_US -product com.ibm.rational.rsd.product.ide
  • Add the variable VMArgs=-Duser.language=en into the fileeclipse.ini under the VMArgs section as shown below:
    ...
    -vmargs
    -Duser.language=en
    -Xquickstart
    ...

Both eclipse.exe and eclipse.ini are located by default in:
<IBM_INSTALL_DIR>\SPD70
(for example, C:\Program Files\IBM\SDP70)

=============================================================

For version 7.5.x:

  • Start IBM Rational Software Delivery Platform with the -nlargument followed by the language en_US (for United States English) such as:
RSA
"eclipse.exe" -nl en_US -product com.ibm.rational.rsa.product.ide

RAD
"eclipse.exe" -nl en_US -product com.ibm.rational.rad.product.ide
RSM
"eclipse.exe" -nl en_US -product com.ibm.rational.rsm.product.ide
RSA SE
"eclipse.exe" -nl en_US -product com.ibm.rational.rsastd.product.v75.ide
  • Add the variable VMArgs=-Duser.language=en into the fileeclipse.ini under the VMArgs section as shown below:
...
-vmargs
-Duser.language=en
-Xquickstart
...

Both eclipse.exe and eclipse.ini are located by default in:
<IBM_INSTALL_DIR>\SPD
(for example, C:\Program Files\IBM\SDP)
  • Add osgi.nl=en to the end of the config.ini file located under <IBM_INSTALL_DIR>\SPD\configuration

Identifying v.s. Non-Identifying relation --- Rational Data Architect

在建構 Logical or Physical Data Model時,Rational Data Architect提供了下列五種不同的選項來描述 Entity 之間的關係,以下描述這五種不同關係的差異性為何

  • Identifying Foreign Key Relationship
  • Non-Identifying Mandatory Foreign Key Relationship
  • Non-Identifying One-to-One Foreign Key Relationship
  • Non-Identifying Optional Foreign Key Relasionship
  • Many-to-Many Relationship

這裡先區辨Identifying 和 Non-Identifying的差異。 在一個Identifying的關係中,父Entity 中的Primary Key會被加到子Entity中成為Foreign Key,且此Foreign Key和子Entity的原本的Primary Key會組合成該子Entity的Composite Primary Key;相反地,Non-Identifying的關係中,父Entity的Primary Key只會單純地成為子Entity的Foreign Key,而子Entity還是使用自己原本的Primary Key,而不會與來自父Entity的Foreign Key結合為Composite Primary Key。見下圖

image

 

image

 

介紹完Identifying和Non-Identifying的差異後,接下來介紹Non-Identifying這一大類的關係。Non-Identifying又可再細分為Mandatory、One-to-One及Optional 等三種關係。依照建立關聯後,加到子Entity的Foreign Key是否允許空值,可分出(Mandatory + One-to-One) 與Optional的差異。Optional的關係中,建在子Entity的Foreign Key允許有空值;而Mandatory及One-to-One不允許空值。

再來,Mandatory與One-to-One Foreign Relationship的差異在於 Foreign Key的cardinality,即One-to-One的Foreign Key允許1對1的關係(Cardinality為 零 或 1);而Mandatory的Foreign Key則為1對多的關係(Cardinality為零或無限)

最後,Many-to-Many的關係則不會在子Entity中建立任何欄位 e.g. Foreign Key,只是單純地描述兩個Entity之間有多對多的關係。它的用處比較像是在Model high level的 Logical Data Model時使用,此時尚不討論到實作的細節。最後在實作時,可能是在父Entity及子Entity之間,新建一個Entity。而父Entity與子Entity分別與此新建Entity間,存在Identifying Foreign Relationship的關係

2010年5月2日 星期日

使用DB2 Sequence物件

在使用DB2時,若需要連續性地產生一連串數字做為ID,可以考慮使用DB2提供的 Sequence物件

產生Sequence物件

產生Sequence物件的方式很簡單,下面的例子會產生一個名稱ORG_SEQ的序列物件;數字會由1開始,每次增加1,不限制最大數字,且不重覆使用數字;另外會先cache 24個數字在記憶體中,以加快取得數字的效能

CREATE SEQUENCE ORG_SEQ
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 24



使用Sequence物件



使用Sequence物件語法如下



SELECT NEXTVAL FOR ORG_SEQ FROM staff WHERE id=10


重設Sequence物件


若要將Sequence的值重新歸零,只需執行下列指令
ALTER SEQUENCE ORG_SEQ RESTART


刪除Sequence物件


DROP SEQUENCE ORG_SEQ


參考網址 :http://www.ibm.com/developerworks/data/library/techarticle/0205pilaka/0205pilaka2.html#section4

2010年4月30日 星期五

DB2 Import資料時,設定來源資料 Date的格式

在使用 db2 import 指令匯入 DEL 格式的來源資料時,若來源資料中,date資料的表示方式與DB2預設的date表示方式不同,會造成無法匯入資料的問題。此時,可以在import指令中使用 modified by dateformat=’YYYY/MM/DD’來更改DB2預設的 date表現方式。參加下列指令

IMPORT FROM "USERS.csv" OF DEL modified by dateformat="YYYY/M/D" METHOD P (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) MESSAGES "C:\log"  INSERT INTO DB2ADMIN.USERS (USER_ID, FIRST_NAME, MIDDLE_NAME, LAST_NAME, BIRTHDAY , GENDER, ID_CARD, EMERGENCY_CONTACT, IS_CAREPROVIDER, IS_AA_USE_MAC, ADDRESS, EMAIL, PHONE, STATUS, CREATE_TIME, ID, UPDATED)

以下舉幾個date表現方式的例子 (注意1個M和2個M的差別):

YYYY/MM/DD:   可以對應到   1978/01/01
YYYY/M/D:       可以對應到   1978/1/1

2010年4月24日 星期六

使用 DB2 pureXML的功能將XML文件Shred到 Relational Tables

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
本介紹使用的例子是在這篇 developerworks文章所附的範例。將這個範例解開後,可發現內含下列內容

image

其中,crdb及crtable分別為建立資料庫及 表格的SQL指令。首先需先使用這兩個檔案,建立所需的表格。而mail.xml是要匯入的XML檔案;mails.xsd則為該XML的schema檔案。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

在DB2 V9中,可以使用下列兩種方式,將XML文件轉成Relational表格儲存

  1. 使用 Annotated XML decomposition功能
  2. 使用 XMLTABLE  functional call

其中,第一種方式需要將Annotated 過的 XML Schema註冊到 DB2的 XML Schema Repository(XSR)。Data Studio這個免費的程式可以協助在XML schema中進行annotation。Annotate 完成之後,再將其註冊到XSR中。註冊的方式有很多種,可以使用DB2 Command Line、呼叫DB2 提供的 Stored Procedure,或是直接用Java程式,透過DB2提供的JDBC Driver進行。這裡先介紹使用Command Line的方式

  1. REGISTER    XMLSCHEMA     ADD    'http://yourschemaURI'    FROM      'Schema檔案所在位置'     AS  userSchemaName.SchemaName
  2. 如果要匯入的XML Schema由多個Schema檔案組成,先使用上面的指令匯入主要的Schema後,再使用下列指令,加入其它的Schema檔案 
    ADD    XMLSCHEMA    DOCUMENT      TO     userSchemaName.SchemaName       ADD     ‘http://anotherSchemaURL’   FROM        ‘Schema檔案所在位置’
  3. 使用下列指令,完成Schema的註冊
    COMPLETE     XMLSCHEMA         userSchemaName.SchemaName

上面所述的  userSchemaName.SchemaName中, userSchemaName指的是 DB2的 Schema命名空間名稱;而SchemaName則是指匯入的Schema的XML Schema命名空間。

註冊完成後,還需啟用所匯入的Schema的 XML Decomposition功能。指令如下:
ALTER      XSROBJECT    xsrObjectName       ENABLE        DECOMPOSITION

最後,透過下列程式,可以將一個XML文件內容,轉成Relational Table。

///////////////////////////////////////////////////////////////////////////////
import java.sql.*;
import java.io.*;
public class AnnotatedXMLDecomposition {
/**這個程式用來測試使用DB2提供的Annotated XML Decomposition方法,來將XML的資料 parse到Relational Table中
* 使用這個方法來shred XML的前提是,DB2的 XSR(XML Schema Repository)必需先註冊要 Shred文件的 XML Schema。
* 註冊XML Schema的方法有很多,最簡單的方法是在DB2 Command Line中,執行下列指令
*      REGISTER XMLSCHEMA ADD 'http://yourschemaURI'
*                    FROM 'SchemaFileLocation' AS  userSchemaName.SchemaName
*     
*      其中,userSchemaName指的是 DB2的 current Schema name
*
*/
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String url = "jdbc:db2:MAILDCMP";
        try {
            Class.forName("com.ibm.db2.jcc.DB2Driver");
            Connection con = DriverManager.getConnection(url);//取得Connection
            String sql = "{CALL xdbDecompXML(?,?,?,?,?,NULL,NULL,NULL)}";
            CallableStatement cstmt = con.prepareCall(sql);
            String filename = "E:/DB2_pureXML_Study/mail/mail/mail.xml";
            File currFile = new File(filename);
            long length = currFile.length();
            //設定DB2 current Schema名稱
            cstmt.setString(1, "BIOFLASH");
            //設定 XML Schema名稱
            cstmt.setString(2, "MAILSCHEMA");
            //讀入XML文件
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(currFile));
            cstmt.setBinaryStream(3,bis, (int) length);
            //XML 文件 ID
            cstmt.setString(4, "TEST001");
            //設定要不要進行XML的 Schema validation
            int validate = 1;
            cstmt.setInt(5, validate);
            //其它的參數先放為NULL
            cstmt.execute();
            con.commit();
            cstmt.close();
        }
        catch (FileNotFoundException e){
            e.printStackTrace();
        }
        catch (SQLException e){
            e.printStackTrace();
        }
        catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
        }
    }

}

/////////////////////////////////////////////////////////

2010年4月14日 星期三

WebSphere Portal安裝

Portal的安裝有下列兩種模式

  • Administration:只安裝Administration portlet
  • Full:安裝Portal Server出廠時,內建的所有portlet

Portal的安裝Script檔名是install.bat,在安裝Portal時,它會去check系統是否已經有裝了WAS,若它找不到WAS的位置,可以傳入一個參數給install.bat,如下所示,安裝精靈就會到該目錄下尋找之前裝過的 WAS
   install.bat -W was.undetectedWas="/my/WAS/location".

安裝Portal時,可以設定讓Portal自行決定要用那些port,若在安裝完成後,想要知道Portal用了那些port,可以在wp_profile/ConfigEngine目錄下,執行下列指令
            ConfigEngine.bat list-server-ports -DWasPassword=password

可將port資訊寫到
wp_profile_root\ConfigEngine\log\wp_PortMatrix.txt 檔案中














2010年4月5日 星期一

如何刪除 WAS Profile

一般來說,刪除WASProfile需透過 WAS/AppServer/bin/manageprofile.bat –delete –profileName PROFILE 來刪除profile。但是在一次的執行動作中,發生了錯誤,經過檢視錯誤的log後,發現其實可以直接刪除記錄在WAS/AppServer/properties/profileRegistry.xml中的profileName,然後直接而刪除 profile所在的目錄即可。

另外,如果WAS安裝過程中,已將該WAS profile設為 windows service,另需刪除該Service,方法如下

  1. 打開regedit
  2. 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,找到相對應的service,把它刪除
  3. 重開機

不過以上方法還是建議在正常方法無法刪除的情況下才使用