原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/create_weblogic_server_domain_withOracle WebLogic Server 12.2.1ではMultitenancyをサポートしています。WebLogic Server Multitenancyでは、WebLogic Serverをドメインだけでなく、一つ以上のパーティションを使って構成することができます。パーティションにはWebLogic Server Multitenancyで導入された新たな要素(リソースグループ、リソースグループテンプレート、仮想ターゲットなど)が含まれています。パーティションを持つドメインを構成する場合、通常のWebLogicドメインの構成に比べて追加の手順が必要です。こうした新しいWebLogic Server Multitenancyに関連するコンセプトは、末尾のReferencesセクションに記載のドキュメントをご覧ください。
OracleはFusion Middleware Control(FMWC)で(Restricted JRFテンプレートを使い)WebLogicドメインを作成することを推奨していますが、WLSTを使ってWebLogic Serverこのエントリでは、2個のパーティションを持つWebLogicドメインをWLSTで作成する方法をご紹介します。
Using Fusion Middleware Control to Manage WebLogic Server
http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/manage_wls_fmc/obe.html
Oracle® Fusion Middleware Domain Template Reference 12c (12.2.1)
Oracle Restricted JRF Template
https://docs.oracle.com/middleware/1221/wls/WLDTR/fmw_templates.htm#WLDTR524
Oracle® Fusion Middleware Oracle WebLogic Scripting Tool 12c Release 1 (12.1.1)
Creating WebLogic Domains Using WLST Offline
http://docs.oracle.com/cd/E24329_01/web.1211/e24491/domains.htm#WLSTG156
1.Domain Topology
このエントリでは、以下のような構成のドメインを作成します。- adminという1個の管理サーバと、パーティションcoke、パーティションpepsiがある
- パーティションcokeには、リソースグループcoke-rg1があり、仮想ターゲットcoke-vtに向けられている
- パーティションpepsiには、リソースグループpepsi-rg1があり、仮想ターゲットpepsi-vtに向けられている
- アプリケーションhelloTenant.earをドメイン、パーティションcokeのリソースグループcoke-rg1、パーティションpepsiのリソースグループpepsi-rg1にデプロイする。
- ドメイン
- セキュリティ構成
- レルム:myrealm
- レルム:coke_realm
- レルム:pepsi_realm
- Server: admin(管理サーバ)
- 仮想ターゲット:coke-vt
- 仮想ターゲット:pepsi-vt
- パーティション:coke
- リソースグループ:coke-rg1
- アプリケーションデプロイメント:helloTenant-coke
- デフォルトターゲット:coke-vt
- パーティション:pepsi
- リソースグループ:pepsi-rg1
- アプリケーションデプロイメント:helloTenant-pepsi
- デフォルトターゲット:pepsi-vt
- アプリケーションデプロイメント:helloTenant
2. Create a domain with partitions
上記のトポロジーを有するドメインを作成するには、以下の手順が必要です。- 通常のWebLogicドメインを作成
- ドメインを起動
- ドメインにパーティションを作成
- パーティション用セキュリティレルムを作成
- パーティション用のユーザーを作成
- セキュリティレルムのグループにユーザーを追加
- 仮想ターゲットを作成
- パーティションを作成
- リソースグループの作成
- 仮想ターゲットをデフォルトターゲットに設定
- パーティション用のセキュリティIDD(アイデンティティドメイン)を設定
- サーバを再起動
- パーティションの開始
2.1 Create a traditional WLS domain
構成ウィザードを使って通常のWebLogicドメインを作成することができます。コマンドスクリプトから構成ウィザードを起動します。設定はすべてデフォルトですが、ドメイン名、管理者ユーザー名、パスワードは以下のものを使います。sh $MW_Home/oracle_common/common/bin/config.sh
- ドメイン名:base_domain
- 管理者ユーザ名:weblogic
- 管理者ユーザのパスワード:welcome1
2.2 Start the domain
cd $MW_Home/user_projects/domains/base_domain/
sh startWebLogic.sh
2.3 Create a partition: coke in a domain
WLSTを開始するには以下の手順が必要です。以下のコマンドでWLSTを起動します。管理サーバadminに管理ユーザweblogicとその資格証明を使って接続してから、以下のWLSTコマンドのすべてを実行できます。sh $MW_Home/oracle_common/common/bin/wlst.sh
これで、パーティションcokeのセットアップのためのWLSTコマンド実行の準備ができました。パーティションcokeには以下の設定を使います。connect("weblogic", "welcome1", "t3://localhost:7001")
- パーティション名:coke
- パーティション管理者ユーザ名:mtadmin1
- パーティション管理者ユーザのパスワード:welcome1
2.3.1 Create a security realm for the partition
標準的なWebLogic ServerのAPIを使ってセキュリティレルムを作成します。edit()
startEdit()
realmName = 'coke_realm'
security = cmo.getSecurityConfiguration()
print 'realm name is ' + realmName
realm = security.createRealm(realmName)
# ATN
atnp = realm.createAuthenticationProvider(
'ATNPartition','weblogic.security.providers.authentication.DefaultAuthenticator')
atna = realm.createAuthenticationProvider(
'ATNAdmin','weblogic.security.providers.authentication.DefaultAuthenticator')
# IA
ia = realm.createAuthenticationProvider(
'IA','weblogic.security.providers.authentication.DefaultIdentityAsserter')
ia.setActiveTypes(['AuthenticatedUser'])
# ATZ/Role
realm.createRoleMapper(
'Role','weblogic.security.providers.xacml.authorization.XACMLRoleMapper')
realm.createAuthorizer(
'ATZ','weblogic.security.providers.xacml.authorization.XACMLAuthorizer')
# Adjudicator
realm.createAdjudicator('
ADJ','weblogic.security.providers.authorization.DefaultAdjudicator')
# Auditor
realm.createAuditor('
AUD','weblogic.security.providers.audit.DefaultAuditor')
# Cred Mapper
realm.createCredentialMapper(
'CM','weblogic.security.providers.credentials.DefaultCredentialMapper')
# Cert Path
realm.setCertPathBuilder(realm.createCertPathProvider(
'CP','weblogic.security.providers.pk.WebLogicCertPathProvider'))
# Password Validator
pv = realm.createPasswordValidator('PV',
'com.bea.security.providers.authentication.passwordvalidator.SystemPasswordValidator')
pv.setMinPasswordLength(8)
pv.setMinNumericOrSpecialCharacters(1)
save()
activate()
2.3.2 Add a user and group to the security realm for the partition
ユーザを作成し、ユーザをレルムのセキュリティグループに追加します。このユースケースでは、パーティションcokeの管理ユーザ名とパスワードはmtadmin1 と welcome1です。edit()
startEdit()
realmName = 'coke_realm'
userName = 'mtadmin1'
groupName = 'Administrators'
print 'add user: realmName ' + realmName
if realmName == 'DEFAULT_REALM':
realm = cmo.getSecurityConfiguration().getDefaultRealm()
else:
realm = cmo.getSecurityConfiguration().lookupRealm(realmName)
print "Creating user " + userName + " in realm: " + realm.getName()
atn = realm.lookupAuthenticationProvider('ATNPartition')
if atn.userExists(userName):
print "User already exists."
else:
atn.createUser(userName, '${password}', realmName + ' Realm User')
print "Done creating user. ${password}"
print "Creating group " + groupName + " in realm: " + realm.getName()
if atn.groupExists(groupName):
print "Group already exists."
else:
atn.createGroup(groupName, realmName + ' Realm Group')
if atn.isMember(groupName,userName,true) == 0:
atn.addMemberToGroup(groupName, userName)
else:
print "User is already member of the group."
save()
activate()
2.3.3 Create a virtual target for the partition
この仮想ターゲットは管理サーバをターゲットにします。UriPrefixは /coke です。このurl接頭辞は、WebLogic ServerのMBeanServerへのJMX接続を作成するために使われます。edit()
startEdit()
vt = cmo.createVirtualTarget("coke-vt")
vt.setHostNames(array(["localhost"],java.lang.String))
vt.setUriPrefix("/coke")
as = cmo.lookupServer("admin")
vt.addTarget(as)
save()
activate()
2.3.4 Create the partition: coke
パーティション名はcokeです。パーティションcokeを仮想ターゲットcoke-vtにターゲット指定します。edit()
startEdit()
vt = cmo.lookupVirtualTarget("coke-vt")
p = cmo.createPartition('coke')
p.addAvailableTarget(vt)
p.addDefaultTarget(vt)
rg=p.createResourceGroup('coke-rg1')
rg.addTarget(vt)
realm = cmo.getSecurityConfiguration().lookupRealm("coke-realm")
p.setRealm(realm)
save()
activate()
2.3.5 Setup IDD for the partition
パーティションのプライマリ・アイデンティティドメイン(IDD)を設定します。edit()
startEdit()
sec = cmo.getSecurityConfiguration()
sec.setAdministrativeIdentityDomain("AdminIDD")
realmName = 'coke_realm'
realm = cmo.getSecurityConfiguration().lookupRealm(realmName)
# ATN
defAtnP = realm.lookupAuthenticationProvider('ATNPartition')
defAtnP.setIdentityDomain('cokeIDD')
defAtnA = realm.lookupAuthenticationProvider('ATNAdmin')
defAtnA.setIdentityDomain("AdminIDD")
# Partition
pcoke= cmo.lookupPartition('coke')
pcoke.setPrimaryIdentityDomain('cokeIDD')
# Default realm
realm = sec.getDefaultRealm()
defAtn = realm.lookupAuthenticationProvider('DefaultAuthenticator')
defAtn.setIdentityDomain("AdminIDD")
save()
activate()
2.3.6 Restart the Server
セキュリティ設定の変更を反映するため、WebLogic Serverを再起動します。2.3.7 Start the partition
パーティションがリクエストを受け付けるようにするために、以下の手順が必要です。edit()
startEdit()
partitionBean=cmo.lookupPartition('coke')
# start the partition (required)
startPartitionWait(partitionBean)
save()
activate()
2.4 Create another partition: pepsi in a domain
2.3の手順を繰り返し、別のパーティションpepsiを作成します。ただし、以下の値はパーティションcokeと違うものを使います。- パーティション名:pepsi
- パーティション管理者名:mtadmin2
- パーティション管理者のパスワード:welcome2
- セキュリティレルム:pepsi_realm
- アイデンティティドメイン名:pepsiIDD
- 仮想ターゲット名:pepsi-vt
- リソースグループ名:pepsi-rg1
2.5 Deploy User Application
これでドメインが利用できるようになりましたので、アプリケーションのearファイルをデプロイしましょう。今回はhelloTenant.earというアプリケーションをWebLogic Serverドメイン、パーティションcoke、パーティションpepsiにデプロイします。edit()
startEdit()
deploy(appName='helloTenant',target='admin,path='${path-to-the-ear-file}/helloTenant.ear')
deploy(appName='helloTenant-coke',partition='coke',resourceGroup='coke-rg1',path='${path-to-the-ear-file}/helloTenant.ear')
deploy(appName='helloTenant-pepsi',partition='pepsi',resourceGroup='pepsi-rg1',path='${path-to-the-ear-file}/helloTenant.ear')
save()
activate()
2.6 Domain config file sample
すべての手順が完了したら、$DOMAIN_HOME/config/config.xml(ドメイン構成ファイル)にはドメインやパーティションに必要なすべての情報が含まれています。以下はconfig.xmlのパーティションcokeに関連するスニペットの例です。パーティションpepsiの場合、パーティションpepsiに対応する<virtual-target>要素と<partition>要素がconfig.xmlに追加されています。<server>
<name>admin</name>
<listen-address>localhost</listen-address>
</server>
<configuration-version>12.2.1.0.0</configuration-version>
<app-deployment>
<name>helloTenant</name>
<target>admin</target>
<module-type>ear</module-type>
<source-path>${path-to-the-ear-file}/helloTenant.ear</source-path>
<security-dd-model>DDOnly</security-dd-model>
<staging-mode xsi:nil="true"></staging-mode>
<plan-staging-mode xsi:nil="true"></plan-staging-mode>
<cache-in-app-directory>false</cache-in-app-directory>
</app-deployment>
<virtual-target>
<name>coke-vt</name>
<target>admin</target>
<host-name>localhost</host-name>
<uri-prefix>/coke</uri-prefix>
<web-server>
<web-server-log>
<number-of-files-limited>false</number-of-files-limited>
</web-server-log>
</web-server>
</virtual-target>
<admin-server-name>admin</admin-server-name>
<partition>
<name>coke</name>
<resource-group>
<name>coke-rg1</name>
<app-deployment>
<name>helloTenant-coke</name>
<module-type>ear</module-type>
<source-path>${path-to-the-ear-file}/helloTenant.ear</source-path>
<security-dd-model>DDOnly</security-dd-model>
<staging-mode xsi:nil="true"></staging-mode>
<plan-staging-mode xsi:nil="true"></plan-staging-mode>
<cache-in-app-directory>false</cache-in-app-directory>
</app-deployment>
<target>coke-vt</target>
<use-default-target>false</use-default-target>
</resource-group>
<default-target>coke-vt</default-target>
<available-target>coke-vt</available-target>
<realm>coke_realm</realm>
<partition-id>2d044835-3ca9-4928-915f-6bd1d158f490</partition-id>
<primary-identity-domain>cokeIDD</primary-identity-domain>
</partition>
これで、2個のパーティションを持つドメインを作成し、リクエストを受け付ける準備ができました。ユーザーはこのドメインにデプロイしたアプリケーションにアクセスすることができます。WebLogic Server 12.2.1 Multitenancy環境のMBeanServersに登録されたアプリケーションMBeanにアクセスする方法については、以下のエントリをご覧ください。
Application MBeans Visibility in Oracle WebLogic Server 12.2.1
https://blogs.oracle.com/WebLogicServer/entry/application_mbeans_visibility_in_oracle
3. Debug Flags
ドメイン作成時にエラーが発生した場合、以下のデバッグフラグを使って、エラーの切り分けが可能です。- セキュリティレルムの設定に関連するエラーの場合、以下のデバッグフラグを使ってWebLogic Serverを再起動します。
-Dweblogic.debug.DebugSecurityAtn=true -Dweblogic.debug.DebugSecurity=true -Dweblogic.debug.DebugSecurityRealm=true
- ドメインでのBean構成エラーに関連するエラーの場合、以下のデバッグフラグを使ってWebLogic Serverを再起動します。
-Dweblogic.debug.DebugJMXCore=true -Dweblogic.debug.DebugJMXDomain=true
- 編集セッションの問題に関連するエラーの場合、以下のデバッグフラグを使ってWebLogic Serverを再起動します。
-Dweblogic.debug.DebugConfigurationEdit=true -Dweblogic.debug.DebugDeploymentService=true -Dweblogic.debug.DebugDeploymentServiceInternal=true -Dweblogic.debug.DebugDeploymentServiceTransportHttp=true
4. Conclusion
Oracle WebLogic Server 12.2.1のドメインにはパーティションを含めることができます。パーティションを持つドメインを作成するには、通常のWebLogicドメインを作成する手順に加え、さらに追加の手順が必要です。このエントリではWLSTを使ったドメイン作成方法をご紹介しました。パーティション付きのドメイン作成は、Fusion Middleware Controlを使って作成することも可能です。パーティション付きのドメイン作成方法は、Referencesセクションに列挙したドキュメントやエントリをご確認ください。5. References
Oracle® Fusion Middleware Installing and Configuring Oracle WebLogic Server and Coherence 12c (12.2.1)
Creating and Configuring the WebLogic Domain
http://docs.oracle.com/middleware/1221/core/WLSIG/GUID-4AECC00D-782D-4E77-85DF-F74DD61391B4.htm#WLSIG283
Domain Partitions for Multi-tenancy in WebLogic Server 12.2.1
https://blogs.oracle.com/WebLogicServer/entry/domain_partitions_for_multi_tenancy
http://orablogs-jp.blogspot.jp/2015/11/domain-partitions-for-multi-tenancy-in.html
Using Fusion Middleware Control to Manage WebLogic Server
http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/manage_wls_fmc/obe.html
Oracle® Fusion Middleware Installing and Configuring the Oracle Fusion Middleware Infrastructure 12c (12.2.1)
Creating Database Schemas
https://docs.oracle.com/middleware/1221/core/INFIN/GUID-CA80A6E9-8903-4E19-81D7-A3647A11D0A6.htm#INFIN356
Oracle® Fusion Middleware Oracle WebLogic Scripting Tool 12c Release 1 (12.1.1)
Creating WebLogic Domains Using WLST Offline
http://docs.oracle.com/cd/E24329_01/web.1211/e24491/domains.htm#WLSTG156
Oracle® Fusion Middleware Domain Template Reference 12c (12.2.1)
Oracle Restricted JRF Template
https://docs.oracle.com/middleware/1221/wls/WLDTR/fmw_templates.htm#WLDTR524
Oracle® Fusion Middleware Administering Security for Oracle WebLogic Server 12.2.1 12c (12.2.1)
Configuring Security for a WebLogic Domain
http://docs.oracle.com/middleware/1221/wls/SECMG/conf-security-for-domain.htm#SECMG777
Oracle® Fusion Middleware Deploying Applications to Oracle WebLogic Server 12c (12.2.1)
Understanding WebLogic Server Deployment
https://docs.oracle.com/middleware/1221/wls/DEPGD/understanding.htm#DEPGD114
WebLogic Server Debug Flags
http://weblogic-wonders.com/weblogic/2010/11/18/weblogic-server-debug-flags/