Buggy code:
ServiceName naming = ( namespace != null ) ? JAVA_CONTEXT_SERVICE_NAME . append ( namespace ) : ContextNames . JAVA_CONTEXT_SERVICE_NAME ; ServiceName bindingName = naming . append ( binding ) ; BinderService binder = new BinderService ( binding ) ; newControllers . add ( target . addService ( bindingName , binder ) . addAliases ( JAVA_CONTEXT_SERVICE_NAME . append ( jndiName ) ) . addDependency ( serviceName , CacheContainer . class , new org . jboss . as . naming . ManagedReferenceInjector < CacheContainer > ( binder . getManagedObjectInjector ( ) ) ) . addDependency ( naming , NamingStore . class , binder . getNamingStoreInjector ( ) ) . setInitialMode ( ON_DEMAND ) . install ( ) ) ; boolean requiresTransport = false ; Map < String , Configuration > configurations = config . getConfigurations ( ) ; for ( ModelNode cache : operation . require ( CACHE ) . asList ( ) ) { String cacheName = cache . require ( NAME ) . asString ( ) ; Configuration configuration = new Configuration ( ) ; FluentConfiguration fluent = configuration . fluent ( ) ; Configuration . CacheMode mode = CacheMode . valueOf ( cache . require ( MODE ) . asString ( ) ) ; requiresTransport |= mode . isClustered ( ) ; fluent . mode ( mode ) ; if ( cache . hasDefined ( BATCHING ) ) { if ( cache . get ( BATCHING ) . asBoolean ( ) ) { fluent . invocationBatching ( ) ; } } if ( cache . hasDefined ( INDEXING ) ) { Indexing indexing = Indexing . valueOf ( cache . get ( INDEXING ) . asString ( ) ) ; if ( indexing . isEnabled ( ) ) { fluent . indexing ( ) . indexLocalOnly ( indexing . isLocalOnly ( ) ) ; } } if ( cache . hasDefined ( QUEUE_SIZE ) ) { fluent . async ( ) . replQueueMaxElements ( cache . get ( QUEUE_SIZE ) . asInt ( ) ) ; } if ( cache . hasDefined ( QUEUE_FLUSH_INTERVAL ) ) { fluent . async ( ) . replQueueInterval ( cache . get ( QUEUE_FLUSH_INTERVAL ) . asLong ( ) ) ; } if ( cache . hasDefined ( REMOTE_TIMEOUT ) ) { fluent . sync ( ) . replTimeout ( cache . get ( REMOTE_TIMEOUT ) . asLong ( ) ) ; } if ( cache . hasDefined ( OWNERS ) ) { fluent . hash ( ) . numOwners ( cache . get ( OWNERS ) . asInt ( ) ) ; } if ( cache . hasDefined ( L1_LIFESPAN ) ) { long lifespan = cache . get ( L1_LIFESPAN ) . asLong ( ) ; if ( lifespan > 0 ) { fluent . l1 ( ) . lifespan ( lifespan ) ; } else { fluent . l1 ( ) . disable ( ) ; } } if ( cache . hasDefined ( LOCKING ) ) { ModelNode locking = cache . get ( LOCKING ) ; FluentConfiguration . LockingConfig fluentLocking = fluent . locking ( ) ; if ( locking . hasDefined ( ISOLATION ) ) { fluentLocking . isolationLevel ( IsolationLevel . valueOf ( locking . get ( ISOLATION ) . asString ( ) ) ) ; } if ( locking . hasDefined ( STRIPING ) ) { fluentLocking . useLockStriping ( locking . get ( STRIPING ) . asBoolean ( ) ) ; } if ( locking . hasDefined ( ACQUIRE_TIMEOUT ) ) { fluentLocking . lockAcquisitionTimeout ( locking . get ( ACQUIRE_TIMEOUT ) . asLong ( ) ) ; } if ( locking . hasDefined ( CONCURRENCY_LEVEL ) ) { fluentLocking . concurrencyLevel ( locking . get ( CONCURRENCY_LEVEL ) . asInt ( ) ) ; } } if ( cache . hasDefined ( TRANSACTION ) ) { ModelNode transaction = cache . get ( TRANSACTION ) ; FluentConfiguration . TransactionConfig fluentTx = fluent . transaction ( ) ; if ( transaction . hasDefined ( STOP_TIMEOUT ) ) { <START_BUG> fluentTx . cacheStopTimeout ( transaction . get ( TIMEOUT ) . asInt ( ) ) ; <END_BUG> } if ( transaction . hasDefined ( MODE ) ) { TransactionMode txMode = TransactionMode . valueOf ( transaction . get ( MODE ) . asString ( ) ) ; FluentConfiguration . RecoveryConfig recovery = fluentTx . useSynchronization ( ( ! ( txMode . isXAEnabled ( ) ) ) ) . recovery ( ) ; if ( txMode . isRecoveryEnabled ( ) ) { recovery . syncCommitPhase ( true ) . syncRollbackPhase ( true ) ; } else { recovery . disable ( ) ; } } if ( transaction . hasDefined ( EAGER_LOCKING ) ) { EagerLocking eager = EagerLocking . valueOf ( transaction . get ( EAGER_LOCKING ) . asString ( ) ) ; fluentTx . useEagerLocking ( eager . isEnabled ( ) ) . eagerLockSingleNode ( eager . isSingleOwner ( ) ) ; } } if ( cache . hasDefined ( EVICTION ) ) { ModelNode eviction = cache . get ( EVICTION ) ; FluentConfiguration . EvictionConfig fluentEviction = fluent . eviction ( ) ; if ( eviction . hasDefined ( STRATEGY ) ) { fluentEviction . strategy ( EvictionStrategy . valueOf ( eviction . get ( STRATEGY ) . asString ( ) ) ) ; } if ( eviction . hasDefined ( MAX_ENTRIES ) ) { fluentEviction . maxEntries ( eviction . get ( MAX_ENTRIES ) . asInt ( ) ) ; } if ( eviction . hasDefined ( INTERVAL ) ) { fluentEviction . wakeUpInterval ( eviction . get ( INTERVAL ) . asLong ( ) ) ; } } if ( cache . hasDefined ( EXPIRATION ) ) { ModelNode expiration = cache . get ( EXPIRATION ) ; FluentConfiguration . ExpirationConfig fluentExpiration = fluent . expiration ( ) ;

Fix:
fluentTx . cacheStopTimeout ( transaction . get ( STOP_TIMEOUT ) . asInt ( ) ) ;