XPagesからDB2に接続する

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

	<xp:button value="query" id="button1">
		<xp:eventHandler event="onclick" submit="true"
			refreshMode="partial" refreshId="dataTable1">
			<xp:this.action><![CDATA[#{javascript:try{
	var connection:java.sql.Connection;
	var statement:java.sql.Statement;
	var resultSet:java.sql.ResultSet;
	var sql = "SELECT ID, FIRST_NAME, LAST_NAME FROM EMP";
	
	connection = @JdbcGetConnection("db2");	//WebContent - WEB-INF - jdbc - 接続名.jdbc
	statement = connection.createStatement();
	resultSet = statement.executeQuery(sql);
	
	viewScope.result =[];
	
	while (resultSet.next()){
		var item = {};
		item.ID = resultSet.getString(1).trim();
		item.FIRSTNAME = resultSet.getString(2).trim();
		item.LASTNAME = resultSet.getString(3).trim();
		viewScope.result.push(item);	
	}
	}catch(e){
		print("error:"+e);
	}finally{
		if(resultSet != null){resultSet.close()}
		if(statement != null){statement.close()}
		if(connection != null){connection.close()}
	}
}]]></xp:this.action>
		</xp:eventHandler></xp:button>

	<xp:dataTable id="dataTable1" rows="30" value="#{viewScope.result}"
		var="items" indexVar="itemIndex">
		<xp:column id="column1">
			<xp:this.facets>
				<xp:label value="ID" xp:key="header" id="label1"></xp:label>
			</xp:this.facets>
			<xp:inputText id="ID" value="#{items.ID}" readonly="true"></xp:inputText>
		</xp:column>

		<xp:column id="column2">
			<xp:this.facets>
				<xp:label value="FirstName" id="label2" xp:key="header"></xp:label>
			</xp:this.facets>
			<xp:inputText id="inputText1" value="#{items.FIRSTNAME}" readonly="true"></xp:inputText>
		</xp:column>
		
		<xp:column id="column3">
			<xp:this.facets>
				<xp:label value="LastName" id="label3" xp:key="header"></xp:label>
			</xp:this.facets>
			<xp:inputText id="inputText2" value="#{items.LASTNAME}" readonly="true"></xp:inputText>
		</xp:column>
	</xp:dataTable>
</xp:view>





サンプルコードを実行するためには、事前にJDBCDriverの準備が必要です。

動作環境

DominoServer 9.0.1FP9 (NonProduction / Linux)

DB2 Express-C (Docker Image / Linux)
(参考)DockerでDb2 Developer-C登場
    https://www.ibm.com/blogs/solutions/jp-ja/db2-docker/

DB2がVersion11なので、JDBC 4.0 Driver (db2jcc4.jar)を使います。
http://www-01.ibm.com/support/docview.wss?uid=swg21363866

 

JDBC Driver Pluginの作成

UpdateSite.nsfにインポートするためのJDBC Driver Pluginを作成します。

ファイルが生成されます。

※2020/01/27追記
DB2のJDBCドライバに不具合があり、DB2への接続後、Dominoサーバーコンソールに1分ごとに以下のExceptionエラーが出力されつづけます。

参考:https://stackoverflow.com/questions/34212501/how-to-avoid-db2-driver-classloader-memory-leak-on-tomcat-application-war-file?rq=1

HTTP JVM: java.lang.NullPointerException
HTTP JVM:  at com.ibm.domino.xsp.module.nsf.ModuleClassLoader.getResource(ModuleClassLoader.java:206)
HTTP JVM:  at com.ibm.db2.jcc.am.ch.run(ch.java:50)
HTTP JVM:  at java.security.AccessController.doPrivileged(AccessController.java:638)
HTTP JVM:  at com.ibm.db2.jcc.am.GlobalProperties.a(GlobalProperties.java:146)
HTTP JVM:  at com.ibm.db2.jcc.am.GlobalProperties.d(GlobalProperties.java:100)
HTTP JVM:  at com.ibm.db2.jcc.am.lw.run(lw.java:125)
HTTP JVM:  at java.util.TimerThread.mainLoop(Timer.java:566)
HTTP JVM:  at java.util.TimerThread.run(Timer.java:516)

JDBCドライバのバージョンは、「4.18.60」については、上記エラーが出力されないことを確認してあります。


UpdateSite.nsfへのインポート

Import Local Update Site…を選択し、JDBC Driver Pluginのsite.xmlを指定します。


Importが終わったら、Domino HTTPサーバーを再起動します。

JDBC DriverがImportされているか確認します。
>tell http osgi ss db2
[00978:00002-00007F10DA121740] 2018/07/17 16:55:20   Framework is launched.
[00978:00002-00007F10DA121740] 2018/07/17 16:55:20   id State       Bundle
[00978:00002-00007F10DA121740] 2018/07/17 16:55:20   18 RESOLVED    com.ibm.db2.jdbc.driver_1.0.0.20171017-1344

 

コネクションプールの設定

901FP8から利用できる@JdbcGetConnection()を使う場合、コネクションプール設定文書を作成します。
Domino Designerで、「ウィンドウ」-「Eclipseビューの表示」から、パッケージエクスプローラーを開きます。
WEB-INFの配下に、jdbcフォルダを作成し、「接続名.jdbc」ファイルを作成します。
ここでは、db2.jdbcとしています。

「接続名.jdbc」に接続情報を記述します。
<jdbc type="simple">
    <driver>com.ibm.db2.jcc.DB2Driver</driver>
    <url>jdbc:db2://IPアドレス:50000/データベース名</url>
    <user>ユーザー名</user>
    <password>パスワード</password>
    <simple>
        <maxPoolSize>10</maxPoolSize>
        <maxConnectionSize>5</maxConnectionSize>
    </simple>
</jdbc>

以上
 


XPages
onota
July 18, 2018 at 10:11 AM
Rating
0





No comments yetLogin first to comment...