@Override public Serializable generate(AccessCallback callback) { // IMPL NOTE : this method is called concurrently and is // not synchronized. It is very important to work on the // local variable: the field lastSourceValue is not // reliable as it might be mutated by multipled threads. // The lastSourceValue field is only accessed by tests, // so this is not a concern. IntegralDataTypeHolder value = callback.getNextValue(); lastSourceValue = value; return value.makeValue(); }
@Override public Serializable generate(SharedSessionContractImplementor session, Object obj) { return generateHolder( session ).makeValue(); }
@Override public Object getDefaultValue(Object currentValue) { return IdentifierGeneratorHelper.getIntegralDataTypeHolder( currentValue.getClass() ) .initialize( -1L ) .makeValue(); }
@Override public synchronized Serializable generate(final SharedSessionContractImplementor session, Object obj) { // maxLo < 1 indicates a hilo generator with no hilo :? if ( maxLo < 1 ) { //keep the behavior consistent even for boundary usages IntegralDataTypeHolder value = null; while ( value == null || value.lt( 0 ) ) { value = super.generateHolder( session ); } return value.makeValue(); } return hiloOptimizer.generate( new AccessCallback() { @Override public IntegralDataTypeHolder getNextValue() { return generateHolder( session ); } @Override public String getTenantIdentifier() { return session.getTenantIdentifier(); } } ); }
@Override public synchronized Serializable generate(AccessCallback callback) { final GenerationState generationState = locateGenerationState( callback.getTenantIdentifier() ); if ( generationState.lo > generationState.maxLo ) { generationState.lastSourceValue = callback.getNextValue(); generationState.lo = generationState.lastSourceValue.eq( 0 ) ? 1 : 0; generationState.hi = generationState.lastSourceValue.copy().multiplyBy( generationState.maxLo + 1 ); } generationState.value = generationState.hi.copy().add( generationState.lo++ ); return generationState.value.makeValue(); }
@Test public void testBasicHiloAlgorithm() { // mimic an initialValue of 1 and increment of 20 final long initialValue = 1; final long incrementSize = 2; // initialization IntegralDataTypeHolder lastSourceValue = makeHolder().initialize( 1 ); IntegralDataTypeHolder upperLimit = lastSourceValue.copy().multiplyBy( incrementSize ).increment(); IntegralDataTypeHolder value = upperLimit.copy().subtract( incrementSize ); assertEquals( 1, lastSourceValue.makeValue().longValue() ); assertEquals( 3, upperLimit.makeValue().longValue() ); assertEquals( 1, value.makeValue().longValue() ); value.increment(); value.increment(); assertFalse( upperLimit.gt( value ) ); // at which point we would "clock over" lastSourceValue.increment(); upperLimit = lastSourceValue.copy().multiplyBy( incrementSize ).increment(); assertEquals( 2, lastSourceValue.makeValue().longValue() ); assertEquals( 5, upperLimit.makeValue().longValue() ); assertEquals( 3, value.makeValue().longValue() ); } }
value = session.getTransactionCoordinator().createIsolationDelegate().delegateWork( work, true ); return value.makeValue();
value.initialize( rs, 1 ); if ( LOG.isDebugEnabled() ) { LOG.debugf( "Sequence value obtained: %s", value.makeValue() );
LOG.debugf( "First free id: %s", previousValueHolder.makeValue() );
holder.makeValue(); fail();
@Override public Serializable generate(SessionImplementor session, Object obj) { return generateHolder( session ).makeValue(); }
@Override public Serializable generate(AccessCallback callback) { // IMPL NOTE : this method is called concurrently and is // not synchronized. It is very important to work on the // local variable: the field lastSourceValue is not // reliable as it might be mutated by multipled threads. // The lastSourceValue field is only accessed by tests, // so this is not a concern. IntegralDataTypeHolder value = callback.getNextValue(); lastSourceValue = value; return value.makeValue(); }
@Override public Object getDefaultValue(Object currentValue) { return IdentifierGeneratorHelper.getIntegralDataTypeHolder( currentValue.getClass() ) .initialize( -1L ) .makeValue(); } @Override
@Override public Object getDefaultValue(Object currentValue) { return IdentifierGeneratorHelper.getIntegralDataTypeHolder( currentValue.getClass() ) .initialize( -1L ) .makeValue(); } @Override
@Override public Object getDefaultValue(Object currentValue) { return IdentifierGeneratorHelper.getIntegralDataTypeHolder( currentValue.getClass() ) .initialize( -1L ) .makeValue(); }
@Override public Serializable generate(AccessCallback callback) { // IMPL NOTE : it is incredibly important that the method-local variable be used here to // avoid concurrency issues. IntegralDataTypeHolder value = null; while ( value == null || value.lt( 1 ) ) { value = callback.getNextValue(); } lastSourceValue = value; return value.makeValue(); }
@Override public Serializable generate(AccessCallback callback) { // IMPL NOTE : it is incredibly important that the method-local variable be used here to // avoid concurrency issues. IntegralDataTypeHolder value = null; while ( value == null || value.lt( 1 ) ) { value = callback.getNextValue(); } lastSourceValue = value; return value.makeValue(); }
@Override public synchronized Serializable generate(AccessCallback callback) { if ( lo > maxLo ) { lastSourceValue = callback.getNextValue(); lo = lastSourceValue.eq( 0 ) ? 1 : 0; hi = lastSourceValue.copy().multiplyBy( maxLo+1 ); } value = hi.copy().add( lo++ ); return value.makeValue(); }
@Override public synchronized Serializable generate(AccessCallback callback) { if ( lo > maxLo ) { lastSourceValue = callback.getNextValue(); lo = lastSourceValue.eq( 0 ) ? 1 : 0; hi = lastSourceValue.copy().multiplyBy( maxLo+1 ); } value = hi.copy().add( lo++ ); return value.makeValue(); }
@Override public synchronized Serializable generate(AccessCallback callback) { final GenerationState generationState = locateGenerationState( callback.getTenantIdentifier() ); if ( generationState.lo > generationState.maxLo ) { generationState.lastSourceValue = callback.getNextValue(); generationState.lo = generationState.lastSourceValue.eq( 0 ) ? 1 : 0; generationState.hi = generationState.lastSourceValue.copy().multiplyBy( generationState.maxLo + 1 ); } generationState.value = generationState.hi.copy().add( generationState.lo++ ); return generationState.value.makeValue(); }