CLOVER🍀

That was when it all began.

InfinispanのCacheの設定を、文字列として出力して確認してみる

Infinispanを触っていて、たまにCacheにどんな値が設定されているのとかを確認したくてやっている方法です。

Cache#getCacheConfigurationで得られるConfigurationクラスのインスタンスをtoStringすると、現在の設定値が得られます。

普通に取得したCacheのインスタンス

EmbeddedCacheManager manager =
    new DefaultCacheManager();
Cache<?, ?> cache = manager.getCache();

toStringして出力すると
*System.outしているだけなので、明示的なtoStringは蛇足ですけどね…

System.out.println(cache
                   .getCacheConfiguration()
                   .toString());

こんな結果が得られます。

Configuration{
classLoader=java.lang.ref.WeakReference@45387c9d, clustering=ClusteringConfiguration{
async=AsyncConfiguration{
asyncMarshalling=false, replicationQueue=null, replicationQueueInterval=5000, replicationQueueMaxElements=1000, useReplicationQueue=false}
, cacheMode=LOCAL, hash=HashConfiguration{
consistentHashFactory=null, hash=MurmurHash3, numOwners=2, numSegments=60, groupsConfiguration=GroupsConfiguration{
enabled=false, groupers=[]}
, stateTransferConfiguration=StateTransferConfiguration{
chunkSize=10000, fetchInMemoryState=false, originalFetchInMemoryState=null, timeout=240000, awaitInitialTransfer=false, originalAwaitInitialTransfer=null}
}
, l1=L1Configuration{
enabled=false, invalidationThreshold=0, lifespan=600000, onRehash=false, cleanupTaskFrequency=600000}
, stateTransfer=StateTransferConfiguration{
chunkSize=10000, fetchInMemoryState=false, originalFetchInMemoryState=null, timeout=240000, awaitInitialTransfer=false, originalAwaitInitialTransfer=null}
, sync=SyncConfiguration{
replTimeout=15000}
}
, customInterceptors=CustomInterceptorsConfiguration{
interceptors=[]}
, dataContainer=DataContainerConfiguration{
dataContainer=null, keyEquivalence=org.infinispan.commons.equivalence.AnyEquivalence@7f7d4aeb, valueEquivalence=org.infinispan.commons.equivalence.AnyEquivalence@7f7d4aeb}
, deadlockDetection=DeadlockDetectionConfiguration{
enabled=false, spinDuration=100}
, eviction=EvictionConfiguration{
maxEntries=-1, strategy=NONE, threadPolicy=DEFAULT}
, expiration=ExpirationConfiguration{
lifespan=-1, maxIdle=-1, reaperEnabled=true, wakeUpInterval=60000}
, indexing=IndexingConfiguration{
enabled=false, indexLocalOnly=false}
, invocationBatching=InvocationBatchingConfiguration{
enabled=false}
, jmxStatistics=JMXStatisticsConfiguration{
enabled=false}
, loaders=LoadersConfiguration{
cacheLoaders=[], passivation=false, preload=false, shared=false}
, locking=LockingConfiguration{
concurrencyLevel=32, isolationLevel=READ_COMMITTED, lockAcquisitionTimeout=10000, useLockStriping=false, writeSkewCheck=false}
, modules={
}
, storeAsBinary=StoreAsBinaryConfiguration{
enabled=false, storeKeysAsBinary=true, storeValuesAsBinary=true, defensive=false}
, transaction=TransactionConfiguration{
autoCommit=true, cacheStopTimeout=30000, eagerLockingSingleNode=false, lockingMode=OPTIMISTIC, syncCommitPhase=true, syncRollbackPhase=false, transactionManagerLookup=org.infinispan.transaction.lookup.GenericTransactionManagerLookup@7ac1cbb0, transactionSynchronizationRegistryLookup=null, transactionMode=NON_TRANSACTIONAL, useEagerLocking=false, useSynchronization=true, recovery=RecoveryConfiguration{
enabled=true, recoveryInfoCacheName='__recoveryInfoCacheName__'}
, reaperWakeUpInterval=1000, completedTxTimeout=15000, use1PcForAutoCommitTransactions=false}
, versioning=VersioningConfiguration{
enabled=false, scheme=NONE}
, unsafe=UnsafeConfiguration{
unreliableReturnValues=false}
, sites=SiteConfiguration{
allBackups=[], backupFor=BackupForConfiguration{
remoteCache='null', remoteSite='null'}
, disableBackups=false, inUseBackupSites=[]}
, compatibility=CompatibilityModeConfiguration{
enabled=false, marshaller=null}
}

ちと、見づらいですが(笑)。
今回は、そのまま貼り付けるとあまりにも見づらかったので、「{」「}」の前後で改行しました。

XMLとして出力させたければ、CacheImplにキャストしてあげるといいみたいです。

System.out.println(((CacheImpl) cache).getConfigurationAsXmlString());

結果。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tns:namedCacheConfiguration xmlns:tns="urn:infinispan:config:5.3" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <tns:locking concurrencyLevel="32" isolationLevel="READ_COMMITTED" lockAcquisitionTimeout="10000" useLockStriping="false" writeSkewCheck="false"/>
    <tns:loaders passivation="false" preload="false" shared="false"/>
    <tns:transaction autoCommit="true" cacheStopTimeout="30000" eagerLockSingleNode="false" lockingMode="OPTIMISTIC" syncCommitPhase="true" syncRollbackPhase="false" transactionMode="NON_TRANSACTIONAL" use1PcForAutoCommitTransactions="false" useEagerLocking="false" useSynchronization="true">
        <tns:recovery enabled="true" recoveryInfoCacheName="__recoveryInfoCacheName__"/>
    </tns:transaction>
    <tns:customInterceptors/>
    <tns:dataContainer class="org.infinispan.container.DefaultDataContainer">
        <tns:properties/>
    </tns:dataContainer>
    <tns:eviction maxEntries="-1" strategy="NONE" threadPolicy="DEFAULT" wakeUpInterval="-9223372036854775808"/>
    <tns:expiration reaperEnabled="true" lifespan="-1" maxIdle="-1" wakeUpInterval="60000"/>
    <tns:unsafe unreliableReturnValues="false"/>
    <tns:clustering>
        <tns:sync replTimeout="15000"/>
        <tns:stateRetrieval alwaysProvideInMemoryState="false" fetchInMemoryState="false" initialRetryWaitTime="500" logFlushTimeout="60000" maxNonProgressingLogWrites="100" numRetries="5" retryWaitTimeIncreaseFactor="2" timeout="240000">
            <tns:chunkSize>10000</tns:chunkSize>
        </tns:stateRetrieval>
        <tns:l1 enabled="false" invalidationThreshold="0" cleanupTaskFrequency="600000" lifespan="600000" onRehash="false"/>
        <tns:async asyncMarshalling="false" replQueueClass="org.infinispan.remoting.ReplicationQueueImpl" replQueueInterval="5000" replQueueMaxElements="1000" useReplQueue="false"/>
        <tns:hash hashFunctionClass="org.infinispan.commons.hash.MurmurHash3" numOwners="2" numVirtualNodes="1" rehashEnabled="true" rehashRpcTimeout="600000" rehashWait="60000">
            <tns:groups enabled="false"/>
        </tns:hash>
    </tns:clustering>
    <tns:jmxStatistics enabled="false"/>
    <tns:storeAsBinary storeKeysAsBinary="true" storeValuesAsBinary="true" enabled="false"/>
    <tns:lazyDeserialization enabled="false"/>
    <tns:deadlockDetection enabled="false" spinDuration="100"/>
    <tns:indexing enabled="false" indexLocalOnly="false">
        <tns:properties/>
    </tns:indexing>
    <tns:versioning enabled="false" versioningScheme="NONE"/>
    <tns:invocationBatching enabled="false"/>
</tns:namedCacheConfiguration>

だいぶ、人の目にやさしくなります。が、CacheConfiguration#toStringと同じかどうかというのは、ちょっと微妙です…。

これらの方法は、デフォルト値とかを確認したい時によく使っています。

CacheImpl#getConfigurationAsXmlStringの方は、どちらかというとJMXで使うコンポーネントとして挙げられているみたいですが。

JMX Components available
http://docs.jboss.org/infinispan/5.3/apidocs/jmxComponents.html

Infinispan、小ネタでした。