2011年2月28日

[E20] Creating Business mashups using a webservice in Webcenter PS3

WebCenter Suite 11g PS3の一つの主要な機能は、データコントロールやタスクフローを実行時に作成できる、というものです。SQLやWebサービスでデータコントロールを作成でき、このデータコントロールを、実行時に作成できるカスタムタスクフローにつなげることができます。マッシュアップスタイルを使ってデータコントロールを表示します。異なるデータコントロールを作成し、WebCenterスキーマを使って、それらをタスクフローを介してマッシュアップすることができます。 以下のスクリーンショットではActivityというWebCenterスキーマを使ってアセンブルされた様々なタスクフローです。

Webサービスからデータコントロールを作成する方法や、そのデータコントロールをWebCenter Spacesのページに表示する方法を見ていきましょう。簡単な通貨変換のWebサービスを用意し、それを使ってデータコントロールを作成することにします。
WSDLはこちら。
http://www.webservicex.net/CurrencyConvertor.asmx?WSDL

以下のような手順で作成できます。Viewletでも確認できます。
  1. SpacesのResource ManagementタブのData Controlへ移動
  2. Webサービスオプションを選択してデータコントロールを作成(データコントロールの名前や説明などの詳細情報も設定)
  3. WSDLを指定する。プロキシ情報を設定していることを確認し、[connect]をクリック
  4. 利用するメソッドを選択して、[Finish]をクリック
  5. Composer/Business Dictionaryから見えるようにするため、データコントロールの属性を[show]にする
  6. 空のマッシュアップスタイルのタスクフローを作成
  7. タスクフローを編集し、先ほど作成したデータコントロールを表示し、必要とする属性をADF Facesコンポーネントとして切り離す。
  8. Composer/Business Dictionaryから見えるようにするため、タスクフローの属性を[show]にする
  9.  ページを作成し、Composerを開くためのページを編集して、Business Dictionaryにある、事前に作成していたタスクフローを表示し、ページにタスクフローを追加
  10.  通貨変換Webサービスのマッシュアップガジェットをテスト

Unable to display content. Adobe Flash is required.


原文はこちら。
http://blogs.oracle.com/EnterpriseTwoDotOh/2011/02/creating_business_mashups_using_a_webservice_in_ps3.html

2011年2月27日

[E20] A couple of nice features when using OracleTextSearch

UCM/URMインスタンスを構成してOracle 11g Databaseを検索エンジンとして利用する場合、OracleTextSearchを検索定義として使うことができます。OracleTextSearchはOracle Text for indexing and searchingという先進機能を使います。これは、検索インデックス、高速なインデックス再作成ならびにインデックスの最適化の性能を十分に発揮するためのメタデータフィールドを指定することができます。
UCM10gをお使いの場合、CS10gR35UpgradeBundleコンポーネントに含まれているOracleTextSearchコンポーネントをロードする必要があります。UCM 11gをお使いの場合は追加コンポーネントは不要です。

[メモ]CS10gR35UpgradeBundleコンポーネントはパッチ#6907073として提供されています。My Oracle Supportからダウンロードできます。

My Oracle Support
http://support.oracle.com/

検索インデクサ名を
SearchIndexerEngineName=OracleTextSearch
という構成フラグで指定します。その他の構成や設定方法はドキュメントを参照してください。
それでは、OracleTextSearchのいくつかのユニークな機能をご紹介しましょう。まず、ドリルダウン機能です。


この機能を使うと、全結果からフィールドの結果を分解する特定のメタデータフィールドを指定できます。上図で、拡張子が分解され、各々の件数を確認できます。次に、リンクをクリックするだけで結果にドリルダウンします。この設定は、オプションリストのフィールドと取り得る値の異なる組み合わせを持つフィールドに適しています。デフォルトでは、フィールドタイプ、セキュリティグループ、アカウント(有効な場合)を使いますが、独自のフィールドを指定することもできます。UCM10gでは次の構成を指定できます。
DrillDownFields=xWebsiteObjectType,dExtension,dSecurityGroup,dDocType
11gでは、Configuration Managerのアプレットから指定できます。Advanced Search Designをクリックし、フィルタするフィールドを選択して、”Is a filter category”にチェックします。
OracleTextSearchの別の機能は、検索スニペットです。このスニペットで検索文字がコンテキストに出現することがわかります。Googleの検索結果の表示に非常に似ています。

10gではこれはデフォルトで利用可能です。11の場合は機能を有効にする必要があります。有効にするための設定は以下の通りです。
OracleTextDisableSearchSnippet=false
有効にすると、検索結果にスニペットを追加することができます。[Change View]> [Customize]に移動し、新しい検索結果ビューを追加します。"Special Section"の利用可能なフィールドからSnippetを選択し、[Main]もしくは[Additional Information]に移動します。

スニペットを従来の検索結果と共に表示したい場合、<$srfDocSnippet$>というidoc変数を追加すると表示できます。

一つ警告ですが、これは大量のコンテンツの検索性能に影響がありますので、それに応じたインフラを計画する必要があります。

原文はこちら。
http://blogs.oracle.com/kyle/2011/02/nice_features_oracletextsearch.html


[Database] Automatic Standby Recreation for Data Guard

不幸にして待機インスタンスを再作成しなければならないことがあります。これは多くの場合アーカイブログや待機データファイルをなくしたり、フェールオーバー、その他の理由で起こります。
これが、簡単に待機インスタンスを再作成するスクリプトを持っていたかった理由です。このスクリプトはいくつかの前提条件を考慮して待機系を再作成します。
  • Databaseのバージョンは少なくとも11gR1であること
  • ダミーインスタンスが待機ノードで開始していること(改良すれば不要になるかもしれません)
  • ブローカの構成は削除されていないこと
  • 2個のTNSNAMESファイルがあること。一つは待機系作成のため(SIDを使用)、もう一つはサービス名を使う本番系(ブローカサービス名を含む)
  • 環境変数が環境DBスクリプトに定義されていること(ORACLE_HOME、PATHなど)
  • 待機系のディレクトリツリーが修正されていないこと
現在このスクリプトを11gR2 Data Guardのテスト環境で使用しています。
改善点があればどしどしご意見お寄せください、お待ちしています。

#!/bin/ksh

###    NOMBRE / VERSION
###       recrea_dg.sh   v.1.00
###
###    DESCRIPCION
###       reacreacion de la Standby
###
###    DEVUELVE
###       0 Creacion de STANDBY correcta
###       1 Fallo
###
###    NOTAS
###       Este shell script NO DEBE MODIFICARSE.
###       Todas las variables y constantes necesarias se toman del entorno.
###
###    MODIFICADO POR:    FECHA:        COMENTARIOS:
###    ---------------    ----------    -------------------------------------
###      Oracle           15/02/2011    Creacion.
###


###
### Cargar entorno
###



V_ADMIN_DIR=`dirname $0`
${V_ADMIN_DIR}/entorno_bd.sh 1>>/dev/null
if [ $? -ne 0 ]
then
  echo "Error Loading the environment."
  exit 1
fi

V_RET=0

V_DATE=`/bin/date`
V_DATE_F=`/bin/date +%Y%m%d_%H%M%S`
V_LOGFILE=${V_TRAZAS}/recrea_dg_${V_DATE_F}.log
exec 4>&1
tee ${V_FICH_LOG} >&4 |&
exec 1>&p 2>&1

###
### Variables para Recrear el Data Guard
###

V_DB_BR=`echo ${V_DB_NAME}|tr '[:lower:]' '[:upper:]'`
if [ "${ORACLE_SID}" = "${V_DB_NAME}01" ]
then
        V_LOCAL_BR=${V_DB_BR}'01'
        V_REMOTE_BR=${V_DB_BR}'02'
else
        V_LOCAL_BR=${V_DB_BR}'02'
        V_REMOTE_BR=${V_DB_BR}'01'
fi

echo " Getting local instance ROLE ${ORACLE_SID} ..."
sqlplus -s /nolog 1>>/dev/null 2>&1 <<-!
whenever sqlerror exit 1
connect / as sysdba
variable salida number
declare
  v_database_role v\$database.database_role%type;
begin
  select database_role into v_database_role from v\$database;
  :salida := case v_database_role
       when 'PRIMARY' then 2
       when 'PHYSICAL STANDBY' then 3
       else 4
     end;
end;
/
exit :salida
!

case $? in
1) echo " ERROR: Cannot get instance ROLE ." | tee -a ${V_LOGFILE}   2>&1
   V_RET=1 ;;
2) echo " Local Instance with PRIMARY role." | tee -a ${V_LOGFILE}   2>&1
   V_DB_ROLE_LCL=PRIMARY ;;
3) echo " Local Instance with PHYSICAL STANDBY role." | tee -a ${V_LOGFILE}   2>&1
   V_DB_ROLE_LCL=STANDBY ;;
*) echo " ERROR: UNKNOWN ROLE." | tee -a ${V_LOGFILE}   2>&1
   V_RET=1 ;;
esac

if [ "${V_DB_ROLE_LCL}" = "PRIMARY" ]
then
        echo "####################################################################" | tee -a ${V_LOGFILE}   2>&1
        echo "${V_DATE} - Reacreating  STANDBY Instance." | tee -a ${V_LOGFILE}   2>&1
        echo "" | tee -a ${V_LOGFILE}   2>&1
        echo "DATAFILES, CONTROL FILES, REDO LOGS and ARCHIVE LOGS in standby instance ${V_REMOTE_BR} will be removed" | tee -a ${V_LOGFILE}   2>&1
        echo "" | tee -a ${V_LOGFILE}   2>&1
        V_PRIMARY=${V_LOCAL_BR}
        V_STANDBY=${V_REMOTE_BR}
fi

if [ "${V_DB_ROLE_LCL}" = "STANDBY" ]
then
        echo "####################################################################" | tee -a ${V_LOGFILE}   2>&1
        echo "${V_DATE} - Reacreating  STANDBY Instance." | tee -a ${V_LOGFILE}   2>&1
        echo "" | tee -a ${V_LOGFILE}   2>&1
        echo "DATAFILES, CONTROL FILES, REDO LOGS and ARCHIVE LOGS in standby instance ${V_LOCAL_BR} will be removed" | tee -a ${V_LOGFILE}   2>&1
        echo "" | tee -a ${V_LOGFILE}   2>&1
        V_PRIMARY=${V_REMOTE_BR}
        V_STANDBY=${V_LOCAL_BR}
fi

# Cargamos las variables de los hosts

# Cargamos las variables de los hosts

PRY_HOST=`sqlplus  /nolog << EOF | grep KEEP | sed 's/KEEP//;s/[   ]//g'
connect sys/${V_DB_PWD}@${V_PRIMARY} as sysdba
select 'KEEP',host_name from v\\$instance;
EOF`


SBY_HOST=`sqlplus  /nolog << EOF | grep KEEP | sed 's/KEEP//;s/[   ]//g'
connect sys/${V_DB_PWD}@${V_STANDBY} as sysdba
select 'KEEP',host_name from v\\$instance;
EOF`

echo "el HOST primary es: ${PRY_HOST}" | tee -a ${V_LOGFILE}   2>&1
echo "el HOST standby es: ${SBY_HOST}" | tee -a ${V_LOGFILE}   2>&1
echo "" | tee -a ${V_LOGFILE}   2>&1
##
## Paramos la instancia STANDBY
##
V_DATE=`/bin/date`
echo "${V_DATE} - Shutting down Standby instance" | tee -a ${V_LOGFILE}   2>&1
echo "" | tee -a ${V_LOGFILE}   2>&1
echo "********************************************************************************" | tee -a ${V_LOGFILE}   2>&1


##
## Paramos la instancia STANDBY
##

SBY_STATUS=`sqlplus  /nolog << EOF | grep KEEP | sed 's/KEEP//;s/[   ]//g'
connect sys/${V_DB_PWD}@${V_STANDBY} as sysdba
select 'KEEP',status from v\\$instance;
EOF`

if [ ${SBY_STATUS} = 'STARTED' ] || [ ${SBY_STATUS} = 'MOUNTED' ] || [ ${SBY_STATUS} = 'OPEN' ]
then
        echo "${V_DATE} - Standby instance shutdown in progress..." | tee -a ${V_LOGFILE}   2>&1
        echo "" | tee -a ${V_LOGFILE}   2>&1
        echo "********************************************************************************" | tee -a ${V_LOGFILE}   2>&1

        sqlplus -s /nolog 1>>/dev/null 2>&1 <<-!
        whenever sqlerror exit 1
        connect sys/${V_DB_PWD}@${V_STANDBY} as sysdba
        shutdown abort
        !
fi

V_DATE=`/bin/date`
echo ""
echo "${V_DATE} - Standby instance stopped" | tee -a ${V_LOGFILE}   2>&1
echo "" | tee -a ${V_LOGFILE}   2>&1
echo "********************************************************************************" | tee -a ${V_LOGFILE}   2>&1

##
## Eliminamos los ficheros de la base de datos
##

V_SBY_SID=`echo ${V_STANDBY}|tr '[:upper:]' '[:lower:]'`
V_PRY_SID=`echo ${V_PRIMARY}|tr '[:upper:]' '[:lower:]'`


ssh ${SBY_HOST} rm /opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/data/*.dbf
ssh ${SBY_HOST} rm /opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/arch/*.arc
ssh ${SBY_HOST} rm /opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/ctl/*.ctl
ssh ${SBY_HOST} rm /opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/redo/*.ctl
ssh ${SBY_HOST} rm /opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/redo/*.rdo



##
## Startup nomount stby instance
##

V_DATE=`/bin/date`
echo "" | tee -a ${V_LOGFILE}   2>&1
echo "${V_DATE} - Starting  DUMMY Standby Instance " | tee -a ${V_LOGFILE}   2>&1
echo "" | tee -a ${V_LOGFILE}   2>&1
echo "********************************************************************************" | tee -a ${V_LOGFILE}   2>&1


ssh ${SBY_HOST} touch /home/oracle/init_dg.ora
ssh ${SBY_HOST} 'echo "DB_NAME='${V_DB_NAME}'">>/home/oracle/init_dg.ora'
ssh ${SBY_HOST} touch /home/oracle/start_dummy.sh
ssh ${SBY_HOST} 'echo "ORACLE_HOME=/opt/oracle/db/db'${V_DB_NAME}'/soft/db11.2.0.2 ">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "export ORACLE_HOME">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "PATH=\$ORACLE_HOME/bin:\$PATH">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "export PATH">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "ORACLE_SID='${V_SBY_SID}'">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "export ORACLE_SID">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "sqlplus -s /nolog <<-!" >>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "      whenever sqlerror exit 1 ">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "      connect / as sysdba ">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "      startup nomount pfile='\''/home/oracle/init_dg.ora'\''">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'echo "! ">>/home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'chmod 744 /home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'sh /home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'rm /home/oracle/start_dummy.sh'
ssh ${SBY_HOST} 'rm /home/oracle/init_dg.ora'

##
## TNSNAMES change, specific for RMAN duplicate
##

V_DATE=`/bin/date`
echo "" | tee -a ${V_LOGFILE}   2>&1
echo "${V_DATE} - Setting up TNSNAMES in PRIMARY host " | tee -a ${V_LOGFILE}   2>&1
echo "" | tee -a ${V_LOGFILE}   2>&1
echo "********************************************************************************" | tee -a ${V_LOGFILE}   2>&1


ssh ${PRY_HOST} 'cp /opt/oracle/db/db'${V_DB_NAME}'/soft/db11.2.0.2/network/admin/tnsnames.ora.inst  /opt/oracle/db/db'${V_DB_NAME}'/soft/db11.2.0.2/network/admin/tnsnames.ora'

V_DATE=`/bin/date`
echo "" | tee -a ${V_LOGFILE}   2>&1
echo "${V_DATE} - Starting STANDBY creation with RMAN.. " | tee -a ${V_LOGFILE}   2>&1
echo "" | tee -a ${V_LOGFILE}   2>&1
echo "********************************************************************************" | tee -a ${V_LOGFILE}   2>&1


rman<<-! >>${V_LOGFILE}
connect target sys/${V_DB_PWD}@${V_PRIMARY}
connect auxiliary sys/${V_DB_PWD}@${V_STANDBY}
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '${V_PRY_SID}','${V_SBY_SID}'
set control_files='/opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/ctl/control01.ctl','/opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/redo/control02.ctl'
set db_file_name_convert='/opt/oracle/db/db${V_DB_NAME}/${V_PRY_SID}/','/opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/'
set log_file_name_convert='/opt/oracle/db/db${V_DB_NAME}/${V_PRY_SID}/','/opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/'
set 'db_unique_name'='${V_SBY_SID}'
set log_archive_config='DG_CONFIG=(${V_PRIMARY},${V_STANDBY})'
set fal_client='${V_STANDBY}'
set fal_server='${V_PRIMARY}'
set log_archive_dest_1='LOCATION=/opt/oracle/db/db${V_DB_NAME}/${V_SBY_SID}/arch DB_UNIQUE_NAME=${V_SBY_SID} MANDATORY VALID_FOR=(ALL_LOGFILES,ALL_ROLES)'
set log_archive_dest_2='SERVICE="${V_PRIMARY}"','SYNC AFFIRM DB_UNIQUE_NAME=${V_PRY_SID} DELAY=0 MAX_FAILURE=0 REOPEN=300 REGISTER VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)'
nofilenamecheck
;
}
!

V_DATE=`/bin/date`
if [ $? -ne 0 ]
then
        echo ""
        echo "${V_DATE} - Error creating STANDBY instance"
        echo ""
        echo "********************************************************************************"
else
        echo ""
        echo "${V_DATE} - STANDBY instance created SUCCESSFULLY "
        echo ""
        echo "********************************************************************************"
fi


sqlplus -s /nolog 1>>/dev/null 2>&1 <<-!
        whenever sqlerror exit 1
        connect sys/${V_DB_PWD}@${V_STANDBY} as sysdba
        alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=${SBY_HOST})(PORT=1544))' scope=both;
        alter system set service_names='${V_DB_NAME}.domain.com,${V_SBY_SID}.domain.com,${V_SBY_SID}_DGMGRL.domain.com' scope=both;
        alter database recover managed standby database using current logfile disconnect from session;
        alter system set dg_broker_start=true scope=both;
!

##
## TNSNAMES change, back to Production Mode
##

V_DATE=`/bin/date`
echo " " | tee -a ${V_LOGFILE}   2>&1
echo "${V_DATE} - Restoring TNSNAMES in PRIMARY "  | tee -a ${V_LOGFILE}   2>&1
echo ""  | tee -a ${V_LOGFILE}   2>&1
echo "********************************************************************************"  | tee -a ${V_LOGFILE}   2>&1


ssh ${PRY_HOST} 'cp /opt/oracle/db/db'${V_DB_NAME}'/soft/db11.2.0.2/network/admin/tnsnames.ora.prod  /opt/oracle/db/db'${V_DB_NAME}'/soft/db11.2.0.2/network/admin/tnsnames.ora'


echo ""  | tee -a ${V_LOGFILE}   2>&1
echo "${V_DATE} -  Waiting for media recovery before check the DATA GUARD Broker"  | tee -a ${V_LOGFILE}   2>&1
echo ""  | tee -a ${V_LOGFILE}   2>&1
echo "********************************************************************************"  | tee -a ${V_LOGFILE}   2>&1


sleep 200
dgmgrl <<-! | grep SUCCESS 1>/dev/null 2>&1
    connect ${V_DB_USR}/${V_DB_PWD}@${V_STANDBY}
    show configuration verbose;
!
if [ $? -ne 0 ] ; then
        echo "       ERROR: El status del Broker no es SUCCESS" | tee -a ${V_LOGFILE}   2>&1 ;
        V_RET=1
else
         echo "      DATA GUARD OK " | tee -a ${V_LOGFILE}   2>&1 ;

        V_RET=0
fi



原文はこちら。
http://blogs.oracle.com/bcndatabase/2011/02/automatic_standby_recreation_for_data_guard.html

[SOA] SOA Suite 11g Native Format Builder Complex Format Example

このエントリの目的は、SOA Suite11gのファイルアダプタおよびフォーマットビルダを使って、それぞれの注文を処理することです。以下のサンプルデータを使います。
001Square Widget            0245.98
102Triagular Widget         1120.00
403Circular Widget          0099.45
ORD8898302/01/2011
301Hexagon Widget           1150.98
ORD6735502/01/2011
このサンプルは、複数の明細データを持つ固定長データです。各注文データは3桁の数値で始まる品目データが1個以上含まれていて、その後に定数ORDで始まる1件のサマリーデータが続きます。
このファイルを処理して、最初のポーリングで1件目の注文データを取得するにはどうすればいいでしょうか。
001Square Widget            0245.98
102Triagular Widget         1120.00
403Circular Widget          0099.45
ORD8898302/01/2011
2件目の注文は?
301Hexagon Widget           1150.98
ORD6735502/01/2011
[メモ]1回のポーリングで1件以上のレコードを取得することもできます。この場合は、ファイルアダプタのStep 6/9のスナップショットにある「複数メッセージ」フィールドを確認してください。

この例で必要なもの
SOA Extension for JDeveloper 11.1.1.4.0をインストール済みのJDeveloper Studio Edition (11.1.1.4.0)
いずれもOTNからダウンロードできます。

なお、この手順を完成させたり、フォーマットビルダのテストを実施する上で、WebLogic Serverを起動する必要はありません。

ファイルアダプタを含むSOAコンポジットを作成する
フォーマットビルダはファイルアダプタの一部なので、新しいSOAプロジェクトとSOAコンポジットを作成するところからスタートです。
ここに簡単な手順をまとめました。
  • JDeveloperを起動
  • メインメニュー>ファイル>新規
  • 新規ギャラリで[一般]カテゴリを開き、アプリケーションを選択し、右側のペインでSOAアプリケーションを選択し、[OK]を押す
  • SOAアプリケーション作成ウィザードのStep1で、アプリケーション名とディレクトリを指定し、[次へ]を押す
  • SOAアプリケーション作成ウィザードのStep2は、デフォルトのまま[次へ]を押す
  • SOAアプリケーション作成ウィザードのStep3で、コンポジットの名前を指定して[終了]を押す
これらの手順を終了すると、新しいアプリケーションとSOAプロジェクトができあがります。このSOAプロジェクトにはcomposite.xmlファイルが含まれています。今回の例では手順を短くするため、MediatorやBPELプロセスを定義していませんが、今から作ろうとしているファイルアダプタを使うためには、MediatorやBPELプロセスが最終的には必要になります。

コンポーネントパレットからファイルアダプタのアイコンを、中央のペインの左側「公開されたサービス」もしくは右側「外部参照」のエリアにドラッグアンドドロップします(スナップショット中の緑の丸囲みを参照、この場合は「公開されたサービス」に配置)。左側にアダプタを配置すると、ファイルを処理してコンポジットに取り込みます。右側の場合はデータをファイルに出力します。
このときに、入出力とも同じフォーマットビルダの定義を利用することができます。 例えばコンポジットの左側でファイルアダプタとフォーマットを使って固定長データをXMLに処理し、コンポジットやBPELプロセス内でデータを変更して、コンポジットの右側でファイルアダプタと同じフォーマットを使い、同じ固定長データフォーマットにデータを書き出すこともできます。
ファイルアダプタをコンポジットに配置したら、ファイルアダプタ構成ウィザードが始まります。ようこそページは飛ばして、Step2でサービス名を指定し、[次へ]を押します。
Step3はデフォルトのまま[次へ]を押し、Step4では"Read File"を指定し、[次へ]を押します。
Step5では入力データが含まれているファイルの場所を指定し、[次へ]を押します。
Step6では、Step5で指定したディレクトリ中のどのファイルを入力ファイルとするかを指定します。今回は*.txtを指定しています。また、「ファイルが複数のメッセージを含む」フィールドのチェックがあり、[バッチでメッセージをパブリッシュする数]値に1が含まれていることを確認してください。この値を大きくすると、ファイルアダプタ1回のポーリングで取得できる論理注文グループデータを増やすことができます。つまり、ファイルアダプタを使って処理するMediatorやBPELプロセスの各インスタンスに流れる注文の個数を決定する値なのです。
Step7はデフォルトのまま[次へ]を押します。
Step8では、画面右側の歯車アイコンを押して、ネイティブフォーマットビルダを起動します。
ネイティブフォーマットビルダでの作業
フォーマット作成に入る前に、手順をまとめておきます。

方法(ボトムアップ)
注文データは品目データとサマリーデータで構成されているという前提で…
  1. 品目データ、サマリーデータと別々の複合タイプ(itemRecord、summaryRecord)をつくる
  2. 上で定義した複合タイプを束ねるグループのデータタイプ(LogicalOrderRecord)を作る。
  3. ルート要素(order)を定義する。このorderのデータ型はLogicalOrderRecord。
フォーマット定義
Step1では、[新規作成]、[複合タイプ]を指定し、[次へ]を押します。
Step2ではこのエントリのはじめに見せたテストデータを含むファイル(サンプルデータはこのエントリの最後にダウンロードできるようにしてあります)を選択、確認して、[次へ]を押します。 
Step3では入力データ各々の複合タイプを定義する必要があります。ルート要素を選択して、複合タイプを追加するアイコンをクリックします。 
アイコンをクリックすると、新しい空の複合タイプの定義が作成されます。一番簡単に定義を作成する方法は、サンプルデータの1行目を選択してドラッグし、<new_complex_type>にドロップすることです。
フォーマットビルダはデータを検知して、フィールドを特定するグリッドが現れます。ここで[複合タイプ名]を”itemRecord”に変更します。
その後、ルーラーをクリックして固定列の位置を指定します。必要であれば、赤の三角形アイコンをいじって正しい位置に設定します。既存の赤の三角形をダブルクリックすると、不要なエントリを削除することもできます。下の例の場合、0桁から3桁、4桁から28桁、29桁から行の最後までの3個のフィールドを定義しています。
フィールドの定義ができたら、[フィールドを生成]ボタンを押すとC1、C2、C3というフィールドを作成します。各フィールド名を変更し、問題なければ[OK]を押して複合タイプを保存します。
  • C1:itemNum
  • C2:itemDesc
  • C3:itemCost
次は、サマリーデータの複合タイプを定義します。
スキーマツリーのルート要素を選択して複合タイプ新規作成のアイコンをクリックします。そして、サンプルデータからサマリーデータを選択して<new_complex_type>にドラッグアンドドロップします。 
複合タイプの名前は"summaryRecord"に変更しておきます。
固定長フィールドとして、注文番号と注文日をマークし、[フィールドを生成]ボタンを押して、生成されたフィールド名を変更します。
  • C1:itemNum
  • C2:orderDate
最後の複合タイプで品目とサマリーデータを束ねるデータ型を定義します。
スキーマツリーのルート要素を選択し、複合タイプ新規作成アイコンをクリックして生成される<new_complex_type>を選択して、鉛筆アイコンをクリックします。
複合タイプ詳細の画面で、各フィールドの名前とデータ型を変更します。
  • 1行目:item、データ型はitemRecord
  • 2行目:summary、データ型はsummaryRecord
itemRecordは入力ファイル中で繰り返すので、その設定をするためにitemの行の右側にある鉛筆アイコンをクリックします。
詳細画面で[最大発生数]を1からUNBOUNDEDに変更します。

さらに、ItemRecordを探す方法を指定しておく必要があります。各々の品目データには32桁目に"."があるので、これを使って品目データとサマリーデータとを区別することができます。[先読み]に32を指定して、[検索]に"."を指定し、[OK]を押して保存しましょう。
最後に注文を表す最上位の要素を作成します。スキーマツリーのルート要素を選択し、要素の新規作成アイコンをクリックします。<new_element>をクリックして、鉛筆アイコンをクリックします。

要素名を”order”とし、データ型を”logicalOrderRecord”に変更します。[OK]ボタンを押して要素定義を保存します。
最後の設定で、以下のスクリーンショットのようになるはずです。[次へ]ボタンを押して、定義したソースを確認します。
[テスト]ボタンを押して定義のテストをしてみましょう。
緑の矢印アイコンを押してテストを実行しましょう。
すると喜ばしくないエラーが出てきます。このエラーはプロセッサが定義をチェックしている間にデータが不足した、というものです。つまり、itemRecordとsummaryRecordを区別できず、ファイル全体をitemRecordとして取り扱ってしまいました。ファイルの最後で”summary”部分が処理されずに残りましたが、これは必須項目です。

このエラーの根本原因は、itemRecordを判断するときに使う"lookAhead"定義が抜けているためです。これはネイティブフォーマットビルダ 11.1.1.4.0の不具合ですが、解決策があります。[キャンセル]を押してStep 4/4に戻り、手で
nxsd:lookAhead="32" nxsd:lookFor="."
を要素itemの属性maxOccursの後に追記します。

追記が終了したら、[テスト]ボタンを押してテスト画面の緑の三角形アイコンをクリックしてテストしましょう。今度はテストが成功し、ファイル中の最初の注文情報がファイルアダプタによって取り出されています。
以下は上図右側のペインに表示されているXMLデータです。

試してみよう!
上記手順を踏まなくても、サンプルファイルとできあがったスキーマファイルを使ってテストできます。
入力ファイルを頭から切り貼りするよりもずっと、この方法がよいでしょう。データが固定長なので、データ末尾のスペースに注意したり各行の最後にEnd-of-Lineが入っていることを確認することが非常に重要です。ダウンロードファイルは正しく整形されています。

テスト手順
  1. inputData.txtファイルをプロジェクトフォルダ中のxsdフォルダのような場所に保存
  2. inputData_6.xsdファイルをxsdフォルダに保存
  3. ネイティブフォーマットビルダのStep1で、[既存ファイルを編集]を選択し、inputData_6.xsdファイルを確認
  4. ネイティブフォーマットビルダのStep2で、inputData.txtファイルのパスとファイル名を指定
  5. テストページに移動し、テストを実行
  6. 属性lookAheadとlookForを消失するというウィザードのバグを思いだし、LogicalOrderRecord型に含まれる要素itemの属性maxOccursの後に、手で nxsd:lookAhead="32" nxsd:lookFor="." の追加が必要

原文はこちら。

2011年2月26日

[VM] What x86 hypervisor based virtualisation leaves for your application

x86マシンについて話をしているときに、VMwareの仮想環境を利用する場合、物理サーバのシステムのどれぐらいのパフォーマンスが使えるだろうか、ということでお客様と議論になることが時々あります。この話題のためのベンチマークほぼ無いので、具体的な数字を出すのはちょっと困難です。

この観点で、SAPが次のようなNoteをVMwareのサイト上にUpしています。ちょっと前にGoogleで違うものを検索しているときに見つけたのですが、非常に興味深い内容です。

SAP Note 675851 Virtualization on Windows on the VMware
https://www.vmware.com/files/pdf/partners/sap/sapnote_0000674851vsphere50_WIN.pdf

2009年の記事であり、私はOracleのSAP担当ではないので、SAPの現在の考察を確認することはできないのですが、一部の文章を引用します。最初の3個の文章はVMwareに関するものです。
SDのベンチマークのためにチューニングして(フラットメモリモデル、プロテクションなしなど)、そしていくつかの類似のベンチマークを持っている場合、物理ハードウェアの80%の性能に到達する。
SDベンチマークのためにチューニングした構成よりも、一般的かつ実用的な要件に適した標準構成であれば、内部テストで60%スケールすることがわかった。
仮想マシンからのシステム呼び出しは結果として性能低下につながる。これはメモリ管理、ネットワーク、ディスクI/Oに影響する。OS中で激しくページングしたりキャッシュヒット率が低いために、データベースバッファ中の変化が大きいシステム構成の場合、仮想環境でのパフォーマンスが著しく低下するだろう。
Hyper-Vに関しては以下の文章があがっています。
Hyper-Vに関しては、SAP ERPアプリケーションが動いているいくつかの仮想マシンを使って計算したところ、物理環境の60%の性能を出していることがわかった。
わかってもらえると思いますが、これが私がSolaris Containersを好む理由の一つなのです。

原文はこちら。
http://www.c0t0d0s0.org/archives/7164-What-x86-hypervisor-based-virtualisation-leaves-for-your-application.html

2011年2月25日

[Database] Shared Database Servers

多くの企業は、データベース環境を統合してプライベートクラウドへの取り組みを進めているので、ISVはExadataのような共有型の高性能なデータベースサーバー上で実行するようなシナリオの検討を迫られています。いくつかのISVは、共有環境でのパフォーマンスのSLAを懸念していますが、仮想環境でなくても、リソースの競合を避け、SLAを保証するために使用できるOracle Databaseの機能があります。その機能とは…
  1. インスタンス・ケージング
    これは割り当てられたCPUもしくはデータベースインスタンスが同時に利用できるCPUの最大個数(およびOracleプロセスの個数)を制限することを保証する機能です。この機能を使うと、データベースサーバが他のアプリケーションと共有されている場合でも、ISVは当該アプリケーションに十分にCPUを割り当てられていることを保証できます。
  2. データベースリソースマネージャを用いたCPUリソースの割り当て
    この機能は、データベースの種々のユーザーやアプリケーションが利用できるCPU時間を比率を指定して割り当てるものです。この機能を利用すると、ISVは優先ユーザもしくは優先するアプリケーションの負荷に対してCPUリソースを優先的に確保することができます。
  3. Exadata I/O リソースマネージャ
    Oracle Database 11gのデータベースリソースマネージャの機能がExadata向けに強化されました。この機能を使うと、I/O帯域幅を独占したり、ストレージを共有する他のデータベースのパフォーマンスに影響を与えるようなデータベースを恐れずに、データベース間でストレージを共有することができます。
    これは、同一サーバを共有する他のアプリケーションの設計がまずいためにパフォーマンスのボトルネックがI/Oによるものではないことを保証するために利用されることがあります。
参考URL
インスタンス・ケージング
http://download.oracle.com/docs/cd/E16338_01/server.112/b56301/dbrm007.htm#CFHJGBFC

データベースリソースマネージャ
http://download.oracle.com/docs/cd/E16338_01/server.112/b56301/dbrm.htm#i1010776

I/Oリソースマネージャ
http://www.oracle.com/us/solutions/datawarehousing/039572.pdf

原文はこちら。
http://blogs.oracle.com/ZEN/2011/02/shared_database_servers.html

[Exadata] Oracle Exadata Resource Kit available

超高性能なデータベースアプリケーションを非常に簡単に作る方法について詳細を知ってもらうために、Oracle Exadata Resource Kitをご利用されてはいかがでしょう。
これには以下のコンテンツが含まれています。
  • 社長Mark Hurdによる、Oracle ExadataのローンチWebcast
  • Oracle Exadataの期待を上回る性能に関する、IDCのレポート
  • Oracle Exadataの技術概要
  • 顧客事例、ビデオ、Podcastなど
このチャンスを利用して、データウェアハウスとオンライントランザクション処理アプリケーションを1台のハードウェアに統合することによって得られた、Oracle Exadataがとんでもない高性能ぶりを知っていただければと思います。

Oracle Exadata Resource Kitはこちらからアクセスできます。

原文はこちら。
http://blogs.oracle.com/exadatapartnercommunity/2011/02/oracle_exadata_resource_kit_available.html

[Java] Oracle now ready with JDK 7 Developer Preview

[訳注]Javaエバンジェリストの寺田佳央さん (@yoshioterada)のブログで、すでに「JDK 7 Developer Preview( http://blogs.sun.com/mr/entry/jdk7_preview )」の内容が紹介されていますので、ちょっと違うエントリをご紹介します。

http://yoshio3.com/2011/02/24/jdk-7-developer-preview-release/



OracleのMark ReinholdがJDK Developer Previewのリリースを発表しました。これは完全なベータ版ではありませんが、約1ヶ月前に新機能追加を凍結してから500近い不具合が修正されています。

JDK 7 Developer Preview
http://blogs.sun.com/mr/entry/jdk7_preview

リリース日が近づくにつれて、修正を入れることが難しくなりますので、問題があれば、専用のフォーラムページから問題を報告してください。(訳注:通常のバグ報告ツールも利用できます)

専用のフォーラムページ
http://www.java.net/forums/jdk/java-se-snapshots-project-feedback

なお、今回のDeveloper PreviewはMac OS X用のバージョンは含まれていませんが、以下のリンクにある通り、Apple愛好家の方も是非お試しください。

Build and package scripts for OpenJDK 1.7 under OS/X
http://code.google.com/p/openjdk-osx-build/

原文はこちら。
http://blogs.sun.com/theaquarium/entry/oracle_now_ready_with_jdk

[WLS] 3月16日「第15回 WebLogic Server勉強会@東京」受付開始

タイトルからもわかる通り、日本語です。

弊社Javaエバンジェリストの寺田佳央( @yoshioterada )からJDeveloperやADFをご紹介します。前回のW-1グランプリ優勝者の山本裕介さんがWebLogic Server上でtwitterのアップデートをクライアントに通知するJavaアプリケーションについてデモを交えて解説する、ということなので、楽しみですね。

原文はこちら。
http://blogs.oracle.com/MasaSasaki/2011/02/31615_weblogic_server.html

[Linux] VirtualBox and the Unbreakable Enterprise Kernel

2度躓いたので、書き留めておきたいと思います。

Oracle Linux 5とOracle Linux 6はカーネルを選ぶことができます。
  • 100% Red Hat互換カーネル
  • Unbreakable Enterprise Kernel
VirtualBoxもしくはVirtualBox Guest Additionsをインストールするとき、利用しているLinuxのバージョンに応じたカーネルドライバをビルドしインストールする必要があります。それゆえ、カーネルドライバのビルドをするために数個のパッケージをインストールしておかねばなりません。

標準カーネルを利用する場合

 yum update
 yum install gcc
 yum install kernel-devel
Unbreakable Enterprise Kernelを利用する場合
 yum update
 yum install gcc
 yum install kernel-uek-deve

原文はこちら。
http://blogs.sun.com/fatbloke/entry/virtualbox_and_the_unbreakable_enterprise

[Database, Linux] Migrating from IBM AIX/DB2 Power systems to Oracle Technologies

AIX Power Systems上のIBM DB2をよりオープンにして性能のよい環境 --- 低メンテナンス費用だけでなく、柔軟性、クラスタリング、可用性、セキュリティに優れた環境 --- に移行することをお考えなら、Oracle Sun Fire X4800 Server上で動作するOracle Database 11gとOracle Linuxへの移行概要を説明したガイドをダウンロードすることをお勧めします。

このガイドでは以下の要件を解決する方法をご案内しています。
  • IBM Power System上のIBM DB2を使ったサンプルアプリケーションをOracle Database 11gR2へ移行する方法
  • Oracle LinuxとOracle Database 11gR2をOracle Sun Fire X4800 Serverにインストールする方法
  • エンドユーザーのデータベースをIBM Power SystemからOracle Sun Fire X4800 Serverへ移行する方法
ガイドは以下のURLからダウンロードできます。

Migrate Your IBM DB2/AIX Environment to the Latest Oracle Technologies
http://www.oracle.com/go/?&Src=7011686&Act=21&pcode=WWMK10035409MPP012

原文はこちら。
http://blogs.oracle.com/linux/2011/02/migrating_from_ibm_aixdb2_power_systems_to_oracle_technologies.html

2011年2月24日

[E20] Oracle UCM GET_SEARCH_RESULTS service with full text search

UCMドキュメントの全文検索が可能なポートレットを作成し、RidcやCIS APIの検証をしていました。例えば引用符は、うまく使わないと、たいていの状況ではUCMは例外を投げる、といった感じでいくつか気をつけておくべき項目があります。検証期間中に全文検索が問題なく動作する解決策を作成することができたので共有したいと思います。
final IdcClientManager idcManager = new IdcClientManager();
final IdcClient idcClient = idcManager.createClient("idc://127.0.0.1:4444");
final IdcContext idcContext = new IdcContext("sysadmin");

final DataBinder binder = idcClient.createBinder();
// populate the binder with the parameters
binder.putLocal ("IdcService", "GET_SEARCH_RESULTS");
binder.putLocal ("QueryText", "dDocFullText <substring> <qsch>"+yourSearchWordOrWords+"</qsch>"); 
binder.putLocal ("SearchEngineName", "databasefulltext");
binder.putLocal ("ResultCount", "20");
// execute the request
ServiceResponse response = idcClient.sendRequest (idcContext, binder);
// get the binder
DataBinder serverBinder = response.getResponseAsBinder ();
DataResultSet resultSet = serverBinder.getResultSet ("SearchResults");
// loop over the results
for (DataObject dataObject : resultSet.getRows ()) {
System.out.println ("Title is: " + dataObject.get ("dDocTitle"));
System.out.println ("Author is: " + dataObject.get ("dDocAuthor"));
}

全文検索を宣言する行以外で特別なものはありません。全文検索を使えるようにするためには、検索クエリのdDocFullTextという属性を使う必要があります。<substring>タグは'like'と同じです。また、問題となるかもしれない検索文字列や単語を引用符で囲む必要があるので、<qsch>タグを使いました。このタグを使うと、コードが壊れたり解析の例外が発生せずに引用符を検索文字列中に入れることができます。
サンプルをテストするには、UCM内でテキスト全文検索が可能である必要があります。 以下のURLを参考にして全文検索を可能にした上で、UCMのドキュメントのインデックスを再構成してください。

UCM: Enabling full text search

より具体的に全文検索を交換したいと思うなら、Kyleのエントリが参考になると思います。UCMクエリを定義する方法についての非常に良い内容です。
Getting the Query Syntax for a Search in UCM

[OSB] Enhanced REST Support in Oracle Service Bus 11gR1

RESTとOracle Service Busに関する過去のエントリで、相対URLの一部としてRESクエリ文字列を実際にエンコードしました。たとえば、次のようなURIを考えます。
http://localhost:7001/SimpleREST/Products/id=1234 
このアプローチは技術的に問題ありませんが、一般的には検索パラメータをクエリ文字列にエンコードします。次のURLではこの原則に則っています。
>http://localhost:7001/SimpleREST/Products?id=1234
一見些細な違いのように見えますが、このアプローチはより直感的で、特に複数のパラメータを渡す場合には有効です。たとえば、
http://localhost:7001/SimpleREST/Products?cat=electronics&subcat=television&mfg=sony
上のURIはSonyで作られたテレビの一覧を取得するために使われていることが明らかです。前バージョンのOSB(11gR1 PS3より前)では、URIのクエリ文字列処理が難しかったのですが、最新リリースの11gR1 PS3ではクエリ文字列の処理が簡単になったので、OSBでRESTサービスを開発することも以前より簡単になりました。このエントリでは、過去のエントリで作成した、パラメータ情報を渡すためのクエリ文字列を使ったRESTful Productsサービスを再実装していきます。

まずは、Products RESTサービスの実装を始めましょう。このサービスはプロジェクト中のProducts.proxyファイルで実装されています。以下のスクリーンショットのようなサービスの全体構成で始まります。

これはOracle Service BusにおけるRESTサービスの共通パターンです。サービスがサポートしておくべきHTTPの操作ごとに異なるフローを実装します。GETをどのように実装するかみてみましょう。これはブラウザに入れるべきPathです。
http://localhost:7001/SimpleREST/Products/id=1234
リクエストパイプラインに割り当てアクションがあり、そこでクエリパラメータを取り出しています。 idパラメータを抽出するために使われている式は以下のようです。
$inbound/ctx:transport/ctx:request/http:query-parameters/http:parameter[@name="id"]/@value
割り当てアクションでOSBの変数idに値を格納します。この手のXPath式を使うと、任意の変数を変数名でクエリすることができます。このときパラメータリストの順序を考える必要はありません。

ログアクションは単にOSBコンソールにデバッグ情報を表示するためです。レスポンスパイプラインには交換アクションがあり、RESTサービスの応答ドキュメントを作成しています。ほとんどの応答データは静的ですが、返り値のIDフィールドにはRESTプロキシへ渡されたクエリパラメータの結果を設定します。
ブラウザでRESTサービスをテストするのはとても簡単で、先ほど示したURLを入れるだけですが、ブラウザは本当に簡単なGETサービスのテストにしか利用できません。OSBテストコンソールは任意のHTTPの操作でも使えるずっと堅牢なテスト環境です。テストコンソールを使ってこのGETサービスをテストするところを見てみましょう。

OSBコンソール (http://{ホスト名 or IP}:{ポート番号}/sbconsole) を開き、管理者としてログインします。SimpleRESTプロジェクトのProductsプロキシサービスのテストコンソールのアイコン(小さな虫のアイコン)をクリックすると、テストコンソールウィンドウが立ち上がります。SOAPサービスとは異なり、リクエスト情報のすべてがサービスのURIにエンコードされるので、リクエストドキュメントの設定は不要です。テストコンソールの[リクエストドキュメント]の下はトランスポートセクションです。このセクションを拡大し、クエリパラメータやHTTPメソッドフィールドを以下のスクリーンショットのように編集しましょう。
 
デフォルトでは、クエリパラメータのフィールドには定義済みのタグが入っていますので、サービスに渡したいパラメータのタグを追加すればOKです。この特別な呼び出しのために、以下のようなクエリパラメータを設定します。
<tp:query-parameters xmlns:tp="http://www.bea.com/wli/sb/transports/http">
<tp:parameter name="id" value="1234" />
</tp:query-parameters>
これで実行ボタンを押す準備ができました。ボタンを押せば結果が確認できます。

ここまでで、OSBを使用してクエリパラメータを解析するための手順をカバーしていますが、もしRESTfulサービスを利用するOSBプロキシサービスが存在する場合はどうすればよいでしょうか。OSBにクエリパラメータを外部サービスに通知するように指示するにはどうすればよいでしょうか。
このサンプルコードには2番目のプロキシサービス(CallREST)を用意しています。これは任意のRESTサービスを呼び出すのと全く同じ方法で、Productsプロキシサービスを呼び出します。CallRESTプロキシサービスはSOAPサービスとして定義しており、これにより、OSBのサービスコンシューマとサービスプロバイダ間を取り持ち、両者の結合レベルを弱める機能(疎結合性)をデモすることができます。 
CallRESTプロキシサービスのメッセージフローを検証するには、Operationalブランチを使って、SOAPサービスとして定義されている各オペレーションの処理ロジックを分けます。getProductDetailブランチに着目すると、これはProducts RESTサービスをHTTP GETで呼び出しています。getProductパイプラインとステージノードを開きます。SOAPリクエストからproductIDを取り出し、ローカルOSB変数にproductIDを格納する一つの割り当てアクションがあります。特に驚くようなことはありません。
実際の処理はパイプライン以下のルートノードでやっています。第一に覚えておくべきことは、RESTサービスを呼び出す際には、サービスコールアウトやパブリッシュアクションではなく、ルートノードを使う必要があるということです。特にビジネスサービスを呼び出すときには、ルーティングアクションだけが$outbound変数にアクセスできるというのがその理由です。

ルーティングアクションには3個の挿入アクションがあります。第1の挿入アクションではHTTPの操作をGETとして指定する方法を示しています。
 
 第2の挿入アクションは単にXMLノードをリクエストにインサートします。このエレメントはデフォルトではリクエストメッセージ中に存在しませんので、手動で追加する必要があります。

アウトバウンドリクエストにエレメントを定義したので、RESTサービスに送信したいパラメータでエレメントを埋めることができます。次のスクリーンショットでは、SOAPリクエストドキュメントから抽出しておいたproductIDの値をidパラメータに指定する方法がわかります。

この式ではidという名前を持つパラメータを探し、その値を取り出します。
これで終了です。Oracle Service Bus 11gR1PS3のクエリパラメータを解析する能力を最大限に活用する方法についてご理解いただけたかと思います。
サンプルコードはこちらです。 rest2_sbconfig.jar

Ubuntu and the OSB Test Console
Ubuntuやその他のLinux Distribution上でOSBテストコンソールを使おうとするとエラーが起きる可能性があります。このエラーはテストコンソールサービスが起動していないことを示しています(下図)。

この問題の解決するのは簡単で、WebLogic Serverの管理コンソールを開き(通常はhttp://localhost:7001/console)、左のドメイン構造のペインで[環境]の下の[サーバー]を選択します。

コンソールのメインウィンドウで管理サーバを選択します。デフォルトでは[構成]の[一般]タブの内容が表示されているはずです。[リスニング・アドレス]を探すと、デフォルトでは空白になっています。これは任意のインターフェースを受け付けるという意味ですが、Ubuntuではこの設定を嫌うため、空白の代わりにlocalhostもしくは特定のIPアドレス、DNSで解決できるホスト名(開発環境では通常localhostを使います)を指定、変更を保存してサーバを再起動してください。これにより、テストコンソールは正常に動作するはずです。

参考URL
RESTful Services with Oracle Service Bus(過去のエントリ)
http://blogs.oracle.com/jeffdavies/2009/06/restful_services_with_oracle_s_1.html


原文はこちら。
http://blogs.oracle.com/jeffdavies/2011/02/enhanced_rest_support_in_oracl.html

[SOA] Change Logging Level for SOA 11g

この内容はすでに多くのエントリで紹介されていますが、今なお多くの人に尋ねられるため、個人的にまとめておきます。
  1. Enterprise Manager Fusion Middeware Controlにログインします。
    http://{ホスト名 or IP}:{ポート番号}/em
  2. SOAフォルダを開き、soa_infra (soa_server1)フォルダを右クリック、 Log > Log Customization を選します。

  3. 監視したいコンポーネントのログレベルを変更します。必要なら、親パッケージのログレベルを変更することもできます。親のログレベルをFINESTに設定すると、大量のログが出力されてしまいますので、あまりおすすめしません。
  4. 変更を適用するか否かの確認メッセージが出ますので、Yesとしてから変更を反映します。
原文はこちら。
http://blogs.oracle.com/middleware/2011/02/change_logging_level_for_soa_11g.html