포럼: Open Discussion (Thread #5266)

Viewerについて (2004-05-28 11:15 by saiken #9673)

はじめまして、saikenと申します。

私共の会社のLinux環境に、OpenOLAPを導入して1週間が経過しました。
付属のテキストを一通り目を通しながら環境構築、順調に稼働しておりますが、一つ気になった点が有ります。

Viewerを使ってOpenOLAPにログインの際、$CATALINA_HOME/conf/server.xml で<DefaultContext>タグ内のurl記述で固定されているので、環境の初期設定時点で特定の1つのDBだけにしかアクセスできない仕組みになっています。これをViewerのログイン画面でコンボボックスなどによる切り替えにより、OLAPのメタファイルを組み込んだ複数のDBにアクセスできればと思ったところですが、どうなんでしょうか?

ちなみにDesignerですと、コネクトソースの最後にあるDB名を自分の手で書き換えてあげる事で、OLAPのメタファイルを組み込んだいろんなDBにアクセスできますよね?
(ただし、$CATALINA_HOME/webapps/designer/login.ini のコネクト情報でCONNECT_SOURCEのDB名部分を記述しない、LIST_NAME/USER_NAME/SCHEMA_NAMEが各DBとも同じである事が条件ですが)

発端は、業種が製造業であるゆえ、このOpenOLAPを使って近日に品質関係のDBを構築したいと考えています。
ただし、一言で品質関係といっても苦情処理や製品検査NGの記録、部品受け入れの検査NGと様々の情報がありますので、1つのDB内に各情報を詰め込むのではなく、各情報をDBによって独立させて管理したいと考えています。
これによって運用メンテナンスが容易ですし、万が一うちの1つのDB(情報)が破損して使えなくなっても他のDBは生きてますから、エンドユーザーに対するリスクは比較的少ないと思います。

前述のように、Designerなら管理者・開発者だけのアクセスに限定して使うのでコネクトソースの記述変更で複数のOLAPメタ入りのDBにアクセスできますが、Viewerのログイン画面もアクセスしたいDBに切り替えて、複数のDBにアクセスできるようにしたいと思ったところです。如何なものでしょうか??



RE: Viewerについて (2004-06-03 15:04 by miyamo #9748)

miyamoです。

> Viewerを使ってOpenOLAPにログインの際、$CATALINA_HOME/conf/server.xml
> で<DefaultContext>タグ内のurl記述で固定されているので、環境の初期設定時点で特定
> の1つのDBだけにしかアクセスできない仕組みになっています。

このような仕様にした理由は、2点あります。

1.開発時のコンセプトとして、
Designerの使用ユーザー数は、開発ユーザーなので、少数。
Viewerの使用ユーザー数は、参照ユーザー(一般ユーザー)なので、多数と想定。

2.Designerユーザー(開発ユーザー)は、DBのスキーマを理解しているため、
DBの切り替えをしつつ、開発をすることが想定される。(開発DB -> 本番DB等)
Viewerのユーザーは、DBの物理構造を意識することなく、参照すべきであり、
逆に、DBの切り替えリストボックスがあると、
そこからDBがいくつあるかがわかってしまい、セキュリティー上も望ましくない。

上記点を実装するため、技術的には、Desinerは、SessionごとにDBに接続をかけていますが、
Viewerは、ConnectionPooling(DBCP)機能を利用しています。

> Viewerのログイン画面もアクセスしたいDBに切り替えて、
> 複数のDBにアクセスできるようにしたいと思ったところです。
以下のような方法で接続先を切り替えることができると思います。

1.server.xmlを修正
*********************************************************
<DefaultContext>
<!-- 既存のコネクションプーリングの設定 -->
<Resource name="jdbc/WroxTC41" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/WroxTC41">
<!-- 略 -->
</ResourceParams>

<!-- ここに、追加するコネクションプーリングの設定を記述する。-->
<Resource name="jdbc/AnotherDB" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/AnotherDB">
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:postgresql://localhost:5432/別DB名</value>
</parameter>
<!-- 略 -->
</ResourceParams>
</DefaultContext>
*********************************************************

2.web.xmlへ、追加するコネクションプーリングの設定を記述
*********************************************************
<resource-ref>
<res-ref-name>jdbc/WroxTC41</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

<!-- ここから追加 -->
<resource-ref>
<res-ref-name>jdbc/AnotherDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
*********************************************************

3.ソースを修正
1.login.jspにリストボックスを追加するように修正
2.PostgresDAOFactory.javaの39行目
DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/WroxTC41"); //$NON-NLS-1$
の部分にリストボックスの情報を引き渡し、
WroxTC41 or AnotherDBのどちらかに接続するよう変更


以上で接続先をわけることが可能だと思います。

※3でプログラムを修正するのが面倒な場合は、
DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/AnotherDB"); //$NON-NLS-1$
と修正し、コンパイルをかけ、複数のWebAppを作り、URLを切り替えることで、
接続先を分ければOKだと思います。

以上です。

Reply to #9673