@Override public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException { return optimizer.generate( databaseStructure.buildCallback( session ) ); }
final SessionEventListenerManager statsCollector = session.getEventListenerManager(); return optimizer.generate( new AccessCallback() { @Override
@Test public void testBasicPooledOptimizerUsage() { Long next; // test historic sequence behavior, where the initial values start at 1... SourceMock sequence = new SourceMock( 1, 10 ); Optimizer optimizer = buildPooledOptimizer( -1, 10 ); for ( int i = 1; i <= 11; i++ ) { next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); } assertEquals( 2, sequence.getTimesCalled() ); // twice to initialize state assertEquals( 11, sequence.getCurrentValue() ); // force a "clock over" next = ( Long ) optimizer.generate( sequence ); assertEquals( 12, next.intValue() ); assertEquals( 3, sequence.getTimesCalled() ); assertEquals( 21, sequence.getCurrentValue() ); }
@Test public void testBasicPooledLoOptimizerUsage() { final SourceMock sequence = new SourceMock( 1, 3 ); final Optimizer optimizer = buildPooledLoOptimizer( 1, 3 ); assertEquals( 0, sequence.getTimesCalled() ); assertEquals( -1, sequence.getCurrentValue() ); Long next = ( Long ) optimizer.generate( sequence ); assertEquals( 1, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 2, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 3, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); // // force a "clock over" next = ( Long ) optimizer.generate( sequence ); assertEquals( 4, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); assertEquals( (1+3), sequence.getCurrentValue() ); }
@Test public void testBasicNoOptimizerUsageWithNegativeValues() { // test historic sequence behavior, where the initial values start at 1... SourceMock sequence = new SourceMock( -1, -1 ); Optimizer optimizer = buildNoneOptimizer( -1, -1 ); for ( int i = 1; i < 11; i++ ) { final Long next = ( Long ) optimizer.generate( sequence ); assertEquals( -i, next.intValue() ); } assertEquals( 10, sequence.getTimesCalled() ); assertEquals( -10, sequence.getCurrentValue() ); // As of HHH-11709 being fixed, Hibernate will use the value retrieved from the sequence, // rather than incrementing 1. sequence = new SourceMock( 0 ); optimizer = buildNoneOptimizer( -1, 1 ); for ( int i = 1; i < 11; i++ ) { final Long next = ( Long ) optimizer.generate( sequence ); assertEquals( i-1, next.intValue() ); } assertEquals( 10, sequence.getTimesCalled() ); // an extra time to get to 1 initially assertEquals( 9, sequence.getCurrentValue() ); }
Long next = ( Long ) optimizer.generate( sequence ); assertEquals( (1001+3), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( (1001+4), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( (1001+5), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( (1001+6), next.intValue() ); assertEquals( (5+2), sequence.getTimesCalled() );
@Test public void testBasicNoOptimizerUsage() { // test historic sequence behavior, where the initial values start at 1... SourceMock sequence = new SourceMock( 1 ); Optimizer optimizer = buildNoneOptimizer( -1, 1 ); for ( int i = 1; i < 11; i++ ) { final Long next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); } assertEquals( 10, sequence.getTimesCalled() ); assertEquals( 10, sequence.getCurrentValue() ); // As of HHH-11709 being fixed, Hibernate will use the value retrieved from the sequence, // rather than incrementing 1. sequence = new SourceMock( 0 ); optimizer = buildNoneOptimizer( -1, 1 ); for ( int i = 1; i < 11; i++ ) { final Long next = ( Long ) optimizer.generate( sequence ); assertEquals( i-1, next.intValue() ); } assertEquals( 10, sequence.getTimesCalled() ); // an extra time to get to 1 initially assertEquals( 9, sequence.getCurrentValue() ); } @Test
@Test public void testBasicPooledThreadLocalLoOptimizerUsage() { final SourceMock sequence = new SourceMock( 1, 50 ); // pass 5000 to match default for PooledThreadLocalLoOptimizer.THREAD_LOCAL_BLOCK_SIZE final Optimizer optimizer = buildPooledThreadLocalLoOptimizer( 1, 50 ); assertEquals( 0, sequence.getTimesCalled() ); assertEquals( -1, sequence.getCurrentValue() ); Long next = ( Long ) optimizer.generate( sequence ); assertEquals( 1, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 2, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 3, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); for( int looper = 0; looper < 51; looper++) { next = ( Long ) optimizer.generate( sequence ); } assertEquals( 3 + 51, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); assertEquals( 51, sequence.getCurrentValue() ); }
@Test public void testSubsequentPooledOptimizerUsage() { // test the pooled optimizer in situation where the sequence is already beyond its initial value on init. // cheat by telling the sequence to start with 1000 final SourceMock sequence = new SourceMock( 1001, 3, 5 ); // but tell the optimizer the start-with is 1 final Optimizer optimizer = buildPooledOptimizer( 1, 3 ); assertEquals( 5, sequence.getTimesCalled() ); assertEquals( 1001, sequence.getCurrentValue() ); Long next = (Long) optimizer.generate( sequence ); assertEquals( 1001 +1 , next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = (Long) optimizer.generate( sequence ); assertEquals( (1001+2), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = (Long) optimizer.generate( sequence ); assertEquals( (1001+3), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); // force a "clock over" next = (Long) optimizer.generate( sequence ); assertEquals( (1001+4), next.intValue() ); assertEquals( (5+2), sequence.getTimesCalled() ); assertEquals( (1001+6), sequence.getCurrentValue() ); }
@Test public void testRecoveredPooledLoOptimizerUsage() { final SourceMock sequence = new SourceMock( 1, 3 ); final Optimizer optimizer = buildPooledLoOptimizer( 1, 3 ); assertEquals( 0, sequence.getTimesCalled() ); assertEquals( -1, sequence.getCurrentValue() ); Long next = ( Long ) optimizer.generate( sequence ); assertEquals( 1, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); // app ends, and starts back up (we should "lose" only 2 and 3 as id values) final Optimizer optimizer2 = buildPooledLoOptimizer( 1, 3 ); next = ( Long ) optimizer2.generate( sequence ); assertEquals( 4, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); assertEquals( 4, sequence.getCurrentValue() ); }
Optimizer optimizer = buildHiloOptimizer( -1, increment ); for ( int i = 1; i <= increment; i++ ) { next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 11, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); optimizer = buildHiloOptimizer( -1, increment ); for ( int i = 1; i <= increment; i++ ) { next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 11, next.intValue() ); assertEquals( 3, sequence.getTimesCalled() );
@Test public void testRecoveredPooledOptimizerUsage() { final SourceMock sequence = new SourceMock( 1, 3 ); final Optimizer optimizer = buildPooledOptimizer( 1, 3 ); assertEquals( 0, sequence.getTimesCalled() ); assertEquals( -1, sequence.getCurrentValue() ); Long next = ( Long ) optimizer.generate( sequence ); assertEquals( 1, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); assertEquals( 4, sequence.getCurrentValue() ); // app ends, and starts back up (we should "lose" only 2 and 3 as id values) final Optimizer optimizer2 = buildPooledOptimizer( 1, 3 ); next = ( Long ) optimizer2.generate( sequence ); assertEquals( 5, next.intValue() ); assertEquals( 3, sequence.getTimesCalled() ); assertEquals( 7, sequence.getCurrentValue() ); } @Test
@Override public synchronized Serializable generate(final SharedSessionContractImplementor session, Object obj) { return optimizer.generate( new AccessCallback() { @Override public IntegralDataTypeHolder getNextValue() { return (IntegralDataTypeHolder) doWorkInIsolationTransaction( session ); } @Override public String getTenantIdentifier() { return session.getTenantIdentifier(); } } ); }
@Override public Serializable generate(SessionImplementor session, Object object) throws HibernateException { return optimizer.generate( databaseStructure.buildCallback( session ) ); }
@Override public Object generate(SharedSessionContractImplementor session, Object object) throws HibernateException { return optimizer.generate( databaseStructure.buildCallback( session ) ); }
@Override public Serializable generate(SessionImplementor session, Object object) throws HibernateException { return optimizer.generate( databaseStructure.buildCallback( session ) ); }
private int getNextIdInternal(final Optimizer optimizer, final String counterName) { optimizer.generate( new AccessCallback() { @Override
/** * 产生对应表“tableName”的ID * 指定序号的初始值 * @param tableName * @param initialValue * @return */ @Transactional public Serializable generate(final String tableName,final int initialValue) { SessionImplementor session = getSessionImplementor(); if (generatorMap.get(tableName) == null) { dialect = session.getFactory().getDialect(); initIdGenerator(tableName); } IdGenerator idGenerator = generatorMap.get(tableName); Optimizer optimizer = idGenerator.getOptimizer(); final SqlStatementLogger statementLogger = session.getFactory().getServiceRegistry() .getService(JdbcServices.class) .getSqlStatementLogger(); final SessionEventListenerManager statsCollector = session.getEventListenerManager(); AbstractReturningWork<IntegralDataTypeHolder> abstractReturningWork = getAbstractReturningWork(statsCollector, statementLogger,idGenerator,initialValue); AccessCallback callback = getAccessCallback(session, abstractReturningWork); return optimizer.generate(callback); } }
/** * 产生对应表“tableName”的ID * @param tableName * @return */ @Transactional public Serializable generate(final String tableName) { SessionImplementor session = getSessionImplementor(); if (generatorMap.get(tableName) == null) { dialect = session.getFactory().getDialect(); initIdGenerator(tableName); } IdGenerator idGenerator = generatorMap.get(tableName); Optimizer optimizer = idGenerator.getOptimizer(); final SqlStatementLogger statementLogger = session.getFactory().getServiceRegistry() .getService(JdbcServices.class) .getSqlStatementLogger(); final SessionEventListenerManager statsCollector = session.getEventListenerManager(); AbstractReturningWork<IntegralDataTypeHolder> abstractReturningWork = getAbstractReturningWork(statsCollector, statementLogger,idGenerator); AccessCallback callback = getAccessCallback(session, abstractReturningWork); return optimizer.generate(callback); }
final SessionEventListenerManager statsCollector = session.getEventListenerManager(); return optimizer.generate( new AccessCallback() { @Override