public interface RelationServiceMBean
修飾子と型 | メソッドと説明 |
---|---|
void |
addRelation(ObjectName relationObjectName)
ユーザーによって作成されてMBean Serverに登録されるMBeanを、関係として関係サービスに追加します。
|
void |
addRelationType(RelationType relationTypeObj)
指定されたオブジェクトを関係タイプとして追加します。
|
Integer |
checkRoleReading(String roleName, String relationTypeName)
指定された型の関係で、指定されたRoleの読取りが可能かどうかをチェックします。
|
Integer |
checkRoleWriting(Role role, String relationTypeName, Boolean initFlag)
指定された型の関係で、指定されたRoleの設定が可能かどうかをチェックします。
|
void |
createRelation(String relationId, String relationTypeName, RoleList roleList)
指定された関係タイプの単純な関係(RelationSupportオブジェクト)を作成し、これを関係サービスに追加します。
|
void |
createRelationType(String relationTypeName, RoleInfo[] roleInfoArray)
RoleInfoオブジェクトから提供されたロール情報を使って、関係タイプ(RelationTypeSupportオブジェクト)を作成し、関係サービスへ追加します。
|
Map<ObjectName,List<String>> |
findAssociatedMBeans(ObjectName mbeanName, String relationTypeName, String roleName)
関係内の指定されたMBeanに関連付けられたMBeanを取得します。
|
Map<String,List<String>> |
findReferencingRelations(ObjectName mbeanName, String relationTypeName, String roleName)
指定されたMBeanが参照される関係を取得します。
|
List<String> |
findRelationsOfType(String relationTypeName)
指定された型の関係の関係IDを返します。
|
List<String> |
getAllRelationIds()
関係サービスによって処理されるすべての関係のすべての関係IDを返します。
|
List<String> |
getAllRelationTypeNames()
既知のすべての関係タイプの名前を取得します。
|
RoleResult |
getAllRoles(String relationId)
関係に含まれるすべてのロールを返します。
|
boolean |
getPurgeFlag()
関係内の参照対象のMBeanの登録解除の通知をいつ受信したか、関係をただちに「パージ」(有効でなくなった関係を検索)する必要があるかどうか、またはpurgeRelationsメソッドが明示的に呼び出される場合にのみパージが実行されるかどうかを示すフラグを返します。
|
Map<ObjectName,List<String>> |
getReferencedMBeans(String relationId)
関係のさまざまなロールで参照されるMBeanを取得します。
|
String |
getRelationTypeName(String relationId)
指定された関係の関係タイプの名前を返します。
|
List<ObjectName> |
getRole(String relationId, String roleName)
指定された関係に含まれる指定されたロール名のロール値を取得します。
|
Integer |
getRoleCardinality(String relationId, String roleName)
指定されたロール内で現在参照されているMBeanの数を取得します。
|
RoleInfo |
getRoleInfo(String relationTypeName, String roleInfoName)
指定された関係タイプの指定されたロールの情報を取得します。
|
List<RoleInfo> |
getRoleInfos(String relationTypeName)
指定された関係タイプのロール情報(RoleInfoオブジェクト)のリストを取得します。
|
RoleResult |
getRoles(String relationId, String[] roleNameArray)
指定された関係に含まれる指定された名前のロールの値を取得します。
|
Boolean |
hasRelation(String relationId)
関係サービス内に指定された関係IDで識別される関係があるかどうかをチェックします。
|
void |
isActive()
関係サービスがアクティブかどうかをチェックします。
|
String |
isRelation(ObjectName objectName)
MBeanが関係として関係サービスに追加されている場合、指定されたObjectNameに関連付けられる関係IDを返します。
|
ObjectName |
isRelationMBean(String relationId)
関係がMBean (ユーザーによって作成され、関係として関係サービスに追加されたもの)によって表される場合、MBeanのObjectNameを返します。
|
void |
purgeRelations()
関係をパージします。
|
void |
removeRelation(String relationId)
指定された関係タイプを関係サービスから削除します。
|
void |
removeRelationType(String relationTypeName)
指定された関係タイプを関係サービスから削除します。
|
void |
sendRelationCreationNotification(String relationId)
関係作成の通知(RelationNotification)を送信します。
|
void |
sendRelationRemovalNotification(String relationId, List<ObjectName> unregMBeanList)
関係削除の通知(RelationNotification)を送信します。
|
void |
sendRoleUpdateNotification(String relationId, Role newRole, List<ObjectName> oldRoleValue)
指定された関係内のロール更新の通知(RelationNotification)を送信します。
|
void |
setPurgeFlag(boolean purgeFlag)
関係内の参照対象のMBeanの登録解除の通知をいつ受信したか、関係をただちに「パージ」(有効でなくなった関係を検索)する必要があるかどうか、またはpurgeRelationsメソッドが明示的に呼び出される場合にのみパージが実行されるかどうかを示すフラグを設定します。
|
void |
setRole(String relationId, Role role)
指定された関係内の指定されたロールを設定します。
|
RoleResult |
setRoles(String relationId, RoleList roleList)
指定された関係内の指定されたロールを設定します。
|
void |
updateRoleMap(String relationId, Role newRole, List<ObjectName> oldRoleValue)
指定された関係内の指定されたロールを更新するため、関係サービス・ロール・マップの更新を処理します。
|
void isActive() throws RelationServiceNotRegisteredException
RelationServiceNotRegisteredException
- 関係サービスが未登録の場合boolean getPurgeFlag()
trueの場合、ただちにパージを行う必要があります。
setPurgeFlag(boolean)
void setPurgeFlag(boolean purgeFlag)
trueの場合、ただちにパージを行う必要があります。
purgeFlag
- フラグgetPurgeFlag()
void createRelationType(String relationTypeName, RoleInfo[] roleInfoArray) throws IllegalArgumentException, InvalidRelationTypeException
relationTypeName
- 関係タイプの名前roleInfoArray
- ロール情報の配列IllegalArgumentException
- パラメータがnullの場合InvalidRelationTypeException
- 次の場合:
- 同じ名前の関係タイプがすでに存在する場合
- 同じ名前が2つの異なったロール情報で使用されている場合
- ロール情報が提供されなかった場合
- ロール情報としてnullが提供された場合
void addRelationType(RelationType relationTypeObj) throws IllegalArgumentException, InvalidRelationTypeException
relationTypeObj
- 関係タイプ・オブジェクト(RelationTypeインタフェースを実装)IllegalArgumentException
- パラメータがnullである場合、またはrelationTypeObj.getRelationTypeName()
がnullを返す場合InvalidRelationTypeException
- 同じ名前の関係タイプがすでに存在する場合List<String> getAllRelationTypeNames()
List<RoleInfo> getRoleInfos(String relationTypeName) throws IllegalArgumentException, RelationTypeNotFoundException
relationTypeName
- 関係タイプの名前IllegalArgumentException
- パラメータがnullの場合RelationTypeNotFoundException
- その名前の関係タイプが存在しない場合RoleInfo getRoleInfo(String relationTypeName, String roleInfoName) throws IllegalArgumentException, RelationTypeNotFoundException, RoleInfoNotFoundException
relationTypeName
- 関係タイプの名前roleInfoName
- ロール名IllegalArgumentException
- パラメータがnullの場合RelationTypeNotFoundException
- 関係サービスにとって未知の関係タイプである場合RoleInfoNotFoundException
- 関係タイプにロールが含まれていない場合void removeRelationType(String relationTypeName) throws RelationServiceNotRegisteredException, IllegalArgumentException, RelationTypeNotFoundException
その型の関係オブジェクトが関係サービスから削除されます。
relationTypeName
- 削除される関係タイプの名前RelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合IllegalArgumentException
- パラメータがnullの場合RelationTypeNotFoundException
- その名前の関係タイプが存在しない場合void createRelation(String relationId, String relationTypeName, RoleList roleList) throws RelationServiceNotRegisteredException, IllegalArgumentException, RoleNotFoundException, InvalidRelationIdException, RelationTypeNotFoundException, InvalidRoleValueException
ロールはパラメータに指定されたロール・リストに従って初期化されます。この方法で初期化されないロールは、ObjectNameの空のArrayListに設定されます。
RELATION_BASIC_CREATION型のRelationNotificationが送信されます。
relationId
- 関係サービス内の関係を一意に識別するために使用される関係識別子relationTypeName
- 関係サービス内に作成する必要がある関係タイプの名前roleList
- 関係のロールを初期化するためのロール・リスト(nullも可)RelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合IllegalArgumentException
- パラメータがnullの場合RoleNotFoundException
- 関係タイプ内に存在しないロールに値が提供された場合InvalidRelationIdException
- 関係IDがすでに使用されている場合RelationTypeNotFoundException
- 関係サービスにとって未知の関係タイプである場合InvalidRoleValueException
- 次の場合:
- 同じ名前が2つの異なったロールで使用されている場合
- 指定された値に含まれる参照対象のMBeanの数が予想最小値より小さい場合
- 指定された値に含まれる参照対象のMBeanの数が予想最大値を超えている場合
- 値に含まれる参照対象のMBeanのうち1つが、そのロールのMBeanクラスのオブジェクトでない場合
- そのロールのMBeanが存在しない場合
void addRelation(ObjectName relationObjectName) throws IllegalArgumentException, RelationServiceNotRegisteredException, NoSuchMethodException, InvalidRelationIdException, InstanceNotFoundException, InvalidRelationServiceException, RelationTypeNotFoundException, RoleNotFoundException, InvalidRoleValueException
MBeanを関係として追加するためには、次の条件が満たされている必要があります。
- Relationインタフェースを実装している
- RelationService ObjectName用として現在の関係サービスのObjectNameを持っている
- 現在の関係サービス内で一意かつ未使用の関係IDを持っている
- 関係タイプ用として関係サービス内で作成された関係タイプを持っている
- 関係タイプ内で提供されたロール情報に適合するロールを持っている
relationObjectName
- 追加される関係MBeanのObjectNameIllegalArgumentException
- パラメータがnullの場合RelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合NoSuchMethodException
- MBeanがRelationインタフェースを実装していない場合InvalidRelationIdException
- 次の場合:
- MBean内に関係識別子が存在しない
- 関係識別子が関係サービスですでに使用されている場合
InstanceNotFoundException
- 指定されたObjectNameのMBeanが登録されていない場合InvalidRelationServiceException
- 次の場合:
- MBean内に関係サービス名が存在しない場合
- MBean内の関係サービス名が現在の関係サービスの関係サービス名でない場合
RelationTypeNotFoundException
- 次の場合:
- MBean内に関係タイプ名が存在しない場合
- MBean内の関係タイプ名が関係サービス内に作成された関係タイプに対応していない場合
InvalidRoleValueException
- 次の場合:
- ロールに含まれる参照対象のMBeanの数が予想最小値より小さい場合
- ロールに含まれる参照対象のMBeanの数が予想最大値を超えている場合
- 値に含まれる参照対象のMBeanのうち1つが、そのロールのMBeanクラスのオブジェクトでない場合
- ロールに提供されたMBeanが存在しない場合
RoleNotFoundException
- 関係タイプ内に存在しないロールに値が提供された場合ObjectName isRelationMBean(String relationId) throws IllegalArgumentException, RelationNotFoundException
relationId
- 関係を識別する関係IDIllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- このIDに関係が関連付けられていない場合String isRelation(ObjectName objectName) throws IllegalArgumentException
objectName
- 仮定された関係のObjectNameIllegalArgumentException
- パラメータがnullの場合Boolean hasRelation(String relationId) throws IllegalArgumentException
relationId
- 関係を識別する関係IDIllegalArgumentException
- パラメータがnullの場合List<String> getAllRelationIds()
Integer checkRoleReading(String roleName, String relationTypeName) throws IllegalArgumentException, RelationTypeNotFoundException
roleName
- チェックされるロールの名前relationTypeName
- 関係タイプの名前- ロールの読取りが可能な場合は0
- RoleStatus.NO_ROLE_WITH_NAMEに対応する整数型
- RoleStatus.ROLE_NOT_READABLEに対応する整数型
IllegalArgumentException
- パラメータがnullの場合RelationTypeNotFoundException
- 関係サービスにとって未知の関係タイプである場合Integer checkRoleWriting(Role role, String relationTypeName, Boolean initFlag) throws IllegalArgumentException, RelationTypeNotFoundException
role
- チェックされるロールrelationTypeName
- 関係タイプの名前initFlag
- ロールの初期化のためにチェックが行われたことを示すフラグ。書込みアクセスの検証は行われない- ロールの設定が可能な場合は0
- RoleStatus.NO_ROLE_WITH_NAMEに対応する整数型
- RoleStatus.ROLE_NOT_WRITABLEの整数型
- RoleStatus.LESS_THAN_MIN_ROLE_DEGREEの整数型
- RoleStatus.MORE_THAN_MAX_ROLE_DEGREEの整数型
- RoleStatus.REF_MBEAN_OF_INCORRECT_CLASSの整数型
- RoleStatus.REF_MBEAN_NOT_REGISTEREDの整数型
IllegalArgumentException
- パラメータがnullの場合RelationTypeNotFoundException
- 未知の関係タイプの場合void sendRelationCreationNotification(String relationId) throws IllegalArgumentException, RelationNotFoundException
- RelationNotification.RELATION_BASIC_CREATION。関係が関係サービスの内部オブジェクトである場合
- RelationNotification.RELATION_MBEAN_CREATION。関係が関係として追加されたMBeanである場合
ソース・オブジェクトは関係サービス自体です。
関係サービスのcreateRelation()メソッドおよびaddRelation()メソッドで呼び出されます。
relationId
- 更新された関係の関係識別子IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定された関係IDの関係が存在しない場合void sendRoleUpdateNotification(String relationId, Role newRole, List<ObjectName> oldRoleValue) throws IllegalArgumentException, RelationNotFoundException
- RelationNotification.RELATION_BASIC_UPDATE。関係が関係サービスの内部オブジェクトである場合
- RelationNotification.RELATION_MBEAN_UPDATE。関係が関係として追加されたMBeanである場合
ソース・オブジェクトは関係サービス自体です。
関係MBeanのsetRole()メソッド(指定されたロール用)およびsetRoles()メソッド(各ロール用)で呼び出されます。この実装はRelationSupportクラスで提供されます。
関係サービスのsetRole()メソッド(指定されたロール用)およびsetRoles()メソッド(各ロール用)でも呼び出せます。
relationId
- 更新された関係の関係識別子newRole
- 新しいロール(名前と新しい値)oldRoleValue
- 古いロール値(ObjectNameオブジェクトのList)IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定された関係IDの関係が存在しない場合void sendRelationRemovalNotification(String relationId, List<ObjectName> unregMBeanList) throws IllegalArgumentException, RelationNotFoundException
- RelationNotification.RELATION_BASIC_REMOVAL。関係が関係サービスの内部オブジェクトである場合
- RelationNotification.RELATION_MBEAN_REMOVAL。関係が関係として追加されたMBeanである場合
ソース・オブジェクトは関係サービス自体です。
関係サービスのremoveRelation()メソッドで呼び出されます。
relationId
- 更新された関係の関係識別子unregMBeanList
- 関係の削除の結果、登録解除されるMBeanのObjectNameのリスト(nullも可)IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定された関係IDの関係が存在しない場合void updateRoleMap(String relationId, Role newRole, List<ObjectName> oldRoleValue) throws IllegalArgumentException, RelationServiceNotRegisteredException, RelationNotFoundException
関係MBeanのsetRole()メソッド(指定されたロール用)およびsetRoles()メソッド(各ロール用)で呼び出されます。この実装はRelationSupportクラスで提供されます。
関係サービスのsetRole()メソッド(指定されたロール用)およびsetRoles()メソッド(各ロール用)でも呼び出せます。
関係サービスがMBeanの登録解除時も整合性を確保し、クエリーを実行できるようにするには、ロールの更新時にこのメソッドを呼び出す必要があります。
relationId
- 更新された関係の関係識別子newRole
- 新しいロール(名前と新しい値)oldRoleValue
- 古いロール値(ObjectNameオブジェクトのList)IllegalArgumentException
- パラメータがnullの場合RelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合RelationNotFoundException
- 指定されたIDに対応する関係が存在しない場合void removeRelation(String relationId) throws RelationServiceNotRegisteredException, IllegalArgumentException, RelationNotFoundException
RelationNotification通知が送信されます。その型は次のとおりです。
- RelationNotification.RELATION_BASIC_REMOVAL。関係サービス内専用の関係である場合
- RelationNotification.RELATION_MBEAN_REMOVAL。関係がMBeanとして登録されている場合
こうした関係で参照されるMBeanの場合、何も行われません。
relationId
- 削除される関係の関係IDRelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定された関係IDに対応する関係が存在しない場合void purgeRelations() throws RelationServiceNotRegisteredException
このメソッドは、purgeFlag値に依存します。フラグがtrueに設定されている場合は、関係内の参照対象のMBeanの登録解除を知らせる通知を受信したとき自動的に呼び出されます。フラグがfalseに設定されている場合は呼び出されません。
フラグがfalseに設定されている場合、関係の整合性を維持するためにこのメソッドを呼び出すかどうかはユーザーが決定します。MBeanの登録が解除された後ただちにパージが行われない場合、ObjectNameが再利用され、関係内の参照対象の別のMBeanに割り当てられるときにこのpurgeRelations()メソッドを手動で呼び出すと、問題が発生します。これは、新しいMBeanが認識されず、ObjectNameが登録解除されたMBeanに対応すると見なされるからです。
動作は、登録解除されたMBeanが参照されるロールのカーディナリティによって決定されます。
- ロール内のMBean参照を1つ削除したとき参照の数が最小値より少なくなる場合は、関係を削除する必要がある
- MBean参照を削除したあと残った参照の数がカーディナリティ範囲内である場合は、関係を保持し、handleMBeanUnregistration()コールバックを呼び出して更新する
RelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合Map<String,List<String>> findReferencingRelations(ObjectName mbeanName, String relationTypeName, String roleName) throws IllegalArgumentException
これは、CIMの「Reference」および「ReferenceName」オペレーションに対応します。
mbeanName
- MBeanのObjectNamerelationTypeName
- nullも可。指定した場合、検索ではそのタイプの関係のみが考慮される。それ以外の場合、すべての関係タイプが考慮される。roleName
- nullも可。指定した場合、そのロール内のMBeanが参照される関係のみが返される。それ以外の場合、すべてのロールが考慮される。IllegalArgumentException
- パラメータがnullの場合Map<ObjectName,List<String>> findAssociatedMBeans(ObjectName mbeanName, String relationTypeName, String roleName) throws IllegalArgumentException
これは、CIMのAssociatorおよびAssociatorNameオペレーションに対応します。
mbeanName
- MBeanのObjectNamerelationTypeName
- nullも可。指定した場合、検索ではそのタイプの関係のみが考慮される。それ以外の場合、すべての関係タイプが考慮される。roleName
- nullも可。指定した場合、そのロール内のMBeanが参照される関係のみが考慮される。それ以外の場合、すべてのロールが考慮される。IllegalArgumentException
- パラメータがnullの場合List<String> findRelationsOfType(String relationTypeName) throws IllegalArgumentException, RelationTypeNotFoundException
relationTypeName
- 関係タイプの名前IllegalArgumentException
- パラメータがnullの場合RelationTypeNotFoundException
- その名前の関係タイプが存在しない場合List<ObjectName> getRole(String relationId, String roleName) throws RelationServiceNotRegisteredException, IllegalArgumentException, RelationNotFoundException, RoleNotFoundException
relationId
- 関係IDroleName
- ロール名RelationServiceNotRegisteredException
- 関係サービスが未登録の場合IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定されたIDに対応する関係が存在しない場合RoleNotFoundException
- 次の場合:
- 指定された名前のロールが存在しない場合
または
- ロールが読取り不可な場合
setRole(java.lang.String, javax.management.relation.Role)
RoleResult getRoles(String relationId, String[] roleNameArray) throws RelationServiceNotRegisteredException, IllegalArgumentException, RelationNotFoundException
relationId
- 関係IDroleNameArray
- 取得されるロールの名前から成る配列RelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定されたIDに対応する関係が存在しない場合setRoles(java.lang.String, javax.management.relation.RoleList)
RoleResult getAllRoles(String relationId) throws IllegalArgumentException, RelationNotFoundException, RelationServiceNotRegisteredException
relationId
- 関係IDIllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定されたIDに対応する関係が存在しない場合RelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合Integer getRoleCardinality(String relationId, String roleName) throws IllegalArgumentException, RelationNotFoundException, RoleNotFoundException
relationId
- 関係IDroleName
- ロール名IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定されたIDに対応する関係が存在しない場合RoleNotFoundException
- 指定された名前のロールが存在しない場合void setRole(String relationId, Role role) throws RelationServiceNotRegisteredException, IllegalArgumentException, RelationNotFoundException, RoleNotFoundException, InvalidRoleValueException, RelationTypeNotFoundException
関係の関係タイプに含まれている対応するロール定義に従って、ロールをチェックします。
関係サービスは、関係の整合性を維持するため、参照対象のMBeanの登録解除を処理することにより、変更を追跡します。
relationId
- 関係IDrole
- 設定されるロール(名前と新しい値)RelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定されたIDに対応する関係が存在しない場合RoleNotFoundException
- 次の場合:
- 内部関係
および
- ロールが存在しないか、書込み不可
InvalidRoleValueException
- ロールに対して提供された内部関係および値が無効な場合:
- 指定された値に含まれる参照対象のMBeanの数が予想最小値より小さい場合
または
- 指定された値に含まれる参照対象のMBeanの数が予想最大値を超えている場合
または
- 値に含まれる参照対象のMBeanのうち1つが、そのロールのMBeanクラスのオブジェクトでない場合
または
- そのロールのMBeanが存在しない場合
RelationTypeNotFoundException
- 未知の関係タイプの場合getRole(java.lang.String, java.lang.String)
RoleResult setRoles(String relationId, RoleList roleList) throws RelationServiceNotRegisteredException, IllegalArgumentException, RelationNotFoundException
関係の関係タイプに含まれている対応するロール定義に従って、ロールをチェックします。
関係サービスは、関係の整合性を維持するため、参照対象のMBeanの登録解除を処理することにより、変更を追跡します。
relationId
- 関係IDroleList
- 設定されるロールのリストRelationServiceNotRegisteredException
- 関係サービスがMBeanサーバーに登録されていない場合IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定されたIDに対応する関係が存在しない場合getRoles(java.lang.String, java.lang.String[])
Map<ObjectName,List<String>> getReferencedMBeans(String relationId) throws IllegalArgumentException, RelationNotFoundException
relationId
- 関係IDObjectName→String (ロール名)から成るArrayList
IllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定された関係IDに対応する関係が存在しない場合String getRelationTypeName(String relationId) throws IllegalArgumentException, RelationNotFoundException
relationId
- 関係IDIllegalArgumentException
- パラメータがnullの場合RelationNotFoundException
- 指定された関係IDに対応する関係が存在しない場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.