<?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>
以上