EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() ); assertClassAssignability( SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass() ); SequenceStyleGenerator generator = ( SequenceStyleGenerator ) persister.getIdentifierGenerator(); assertClassAssignability( OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass() ); OptimizerFactory.PooledOptimizer optimizer = ( OptimizerFactory.PooledOptimizer ) generator.getOptimizer(); int increment = optimizer.getIncrementSize(); Entity[] entities = new Entity[ increment + 1 ]; Session s = openSession(); s.beginTransaction(); for ( int i = 0; i < increment; i++ ) { entities[i] = new Entity( "" + ( i + 1 ) ); s.save( entities[i] ); assertEquals( 2, generator.getDatabaseStructure().getTimesAccessed() ); // initialization calls seq twice assertEquals( increment + 1, optimizer.getLastSourceValue() ); // initialization calls seq twice assertEquals( i + 1, optimizer.getLastValue() ); assertEquals( increment + 1, optimizer.getLastSourceValue() ); } // now force a "clock over" entities[ increment ] = new Entity( "" + increment ); s.save( entities[ increment ] ); assertEquals( 3, generator.getDatabaseStructure().getTimesAccessed() ); // initialization (2) + clock over assertEquals( ( increment * 2 ) + 1, optimizer.getLastSourceValue() ); // initialization (2) + clock over assertEquals( increment + 1, optimizer.getLastValue() ); s.getTransaction().commit(); s.beginTransaction(); for ( int i = 0; i < entities.length; i++ ) { assertEquals( i + 1, entities[i].getId().intValue() ); s.delete( entities[i] ); } s.getTransaction().commit(); s.close();
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() ); assertClassAssignability( TableGenerator.class, persister.getIdentifierGenerator().getClass() ); TableGenerator generator = ( TableGenerator ) persister.getIdentifierGenerator(); assertClassAssignability( OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass() ); OptimizerFactory.PooledOptimizer optimizer = ( OptimizerFactory.PooledOptimizer ) generator.getOptimizer(); int increment = optimizer.getIncrementSize(); Entity[] entities = new Entity[ increment + 1 ]; Session s = openSession(); s.beginTransaction(); for ( int i = 0; i < increment; i++ ) { entities[i] = new Entity( "" + ( i + 1 ) ); s.save( entities[i] ); assertEquals( 2, generator.getTableAccessCount() ); // initialization calls seq twice assertEquals( increment + 1, optimizer.getLastSourceValue() ); // initialization calls seq twice assertEquals( i + 1, optimizer.getLastValue() ); assertEquals( increment + 1, optimizer.getLastSourceValue() ); } // now force a "clock over" entities[ increment ] = new Entity( "" + increment ); s.save( entities[ increment ] ); assertEquals( 3, generator.getTableAccessCount() ); // initialization (2) + clock over assertEquals( ( increment * 2 ) + 1, optimizer.getLastSourceValue() ); // initialization (2) + clock over assertEquals( increment + 1, optimizer.getLastValue() ); s.getTransaction().commit(); s.beginTransaction(); for ( int i = 0; i < entities.length; i++ ) { assertEquals( i + 1, entities[i].getId().intValue() ); s.delete( entities[i] ); } s.getTransaction().commit(); s.close();
Clone fragments detected by clone detection tool
File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/idgen/enhanced/sequence/PooledSequenceTest.java File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/idgen/enhanced/table/PooledTableTest.java
Method name: void testNormalBoundary() Method name: void testNormalBoundary()
Number of AST nodes: 28 Number of AST nodes: 28
1
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() );
1
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() );
2
		assertClassAssignability( SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass() );
2
		assertClassAssignability( TableGenerator.class, persister.getIdentifierGenerator().getClass() );
3
		SequenceStyleGenerator generator = ( SequenceStyleGenerator ) persister.getIdentifierGenerator();
3
		TableGenerator generator = ( TableGenerator ) persister.getIdentifierGenerator();
4
		assertClassAssignability( OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass() );
4
		assertClassAssignability( OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass() );
5
		OptimizerFactory.PooledOptimizer optimizer = ( OptimizerFactory.PooledOptimizer ) generator.getOptimizer();
5
		OptimizerFactory.PooledOptimizer optimizer = ( OptimizerFactory.PooledOptimizer ) generator.getOptimizer();
6
		int increment = optimizer.getIncrementSize();
6
		int increment = optimizer.getIncrementSize();
7
		Entity[] entities = new Entity[ increment + 1 ];
7
		Entity[] entities = new Entity[ increment + 1 ];
8
		Session s = openSession();
8
		Session s = openSession();
9
		s.beginTransaction();
9
		s.beginTransaction();
10
		for ( int i = 0; i < increment; i++ ) {
10
		for ( int i = 0; i < increment; i++ ) {
11
			entities[i] = new Entity( "" + ( i + 1 ) );
11
			entities[i] = new Entity( "" + ( i + 1 ) );
12
			s.save( entities[i] );
12
			s.save( entities[i] );
13
			assertEquals( 2, generator.getDatabaseStructure().getTimesAccessed() ); // initialization calls seq twice
13
			assertEquals( 2, generator.getTableAccessCount() ); // initialization calls seq twice
14
			assertEquals( increment + 1, optimizer.getLastSourceValue() ); // initialization calls seq twice
14
			assertEquals( increment + 1, optimizer.getLastSourceValue() ); // initialization calls seq twice
15
			assertEquals( i + 1, optimizer.getLastValue() );
15
			assertEquals( i + 1, optimizer.getLastValue() );
16
			assertEquals( increment + 1, optimizer.getLastSourceValue() );
16
			assertEquals( increment + 1, optimizer.getLastSourceValue() );
17
		}
17
		}
18
		// now force a "clock over"
18
		// now force a "clock over"
19
		entities[ increment ] = new Entity( "" + increment );
19
		entities[ increment ] = new Entity( "" + increment );
20
		s.save( entities[ increment ] );
20
		s.save( entities[ increment ] );
21
		assertEquals( 3, generator.getDatabaseStructure().getTimesAccessed() ); // initialization (2) + clock over
21
		assertEquals( 3, generator.getTableAccessCount() ); // initialization (2) + clock over
22
		assertEquals( ( increment * 2 ) + 1, optimizer.getLastSourceValue() ); // initialization (2) + clock over
22
		assertEquals( ( increment * 2 ) + 1, optimizer.getLastSourceValue() ); // initialization (2) + clock over
23
		assertEquals( increment + 1, optimizer.getLastValue() );
23
		assertEquals( increment + 1, optimizer.getLastValue() );
24
		s.getTransaction().commit();
24
		s.getTransaction().commit();
25
		s.beginTransaction();
25
		s.beginTransaction();
26
		for ( int i = 0; i < entities.length; i++ ) {
26
		for ( int i = 0; i < entities.length; i++ ) {
27
			assertEquals( i + 1, entities[i].getId().intValue() );
27
			assertEquals( i + 1, entities[i].getId().intValue() );
28
			s.delete( entities[i] );
28
			s.delete( entities[i] );
29
		}
29
		}
30
		s.getTransaction().commit();
30
		s.getTransaction().commit();
31
		s.close();
31
		s.close();
Summary
Number of common nesting structure subtrees1
Number of refactorable cases0
Number of non-refactorable cases1
Time elapsed for finding largest common nesting structure subtrees (ms)0.4
Clones locationClones are in different classes having the same super class
Number of node comparisons284
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements26
    Number of unmapped statements in the first code fragment2
    Number of unmapped statements in the second code fragment2
    Time elapsed for statement mapping (ms)11.4
    Clone typeType 2
    Mapped Statements
    ID Statement ID Statement
    1
    EntityPersister persister = sfi().getEntityPersister(Entity.class.getName());
    1
    EntityPersister persister = sfi().getEntityPersister(Entity.class.getName());
    2
    assertClassAssignability(SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass());
    2
    assertClassAssignability(TableGenerator.class, persister.getIdentifierGenerator().getClass());
    3
    SequenceStyleGenerator generator = (SequenceStyleGenerator)persister.getIdentifierGenerator();
    3
    TableGenerator generator = (TableGenerator)persister.getIdentifierGenerator();
    4
    assertClassAssignability(OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass());
    4
    assertClassAssignability(OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass());
    5
    OptimizerFactory.PooledOptimizer optimizer = (OptimizerFactory.PooledOptimizer)generator.getOptimizer();
    5
    OptimizerFactory.PooledOptimizer optimizer = (OptimizerFactory.PooledOptimizer)generator.getOptimizer();
    6
    int increment = optimizer.getIncrementSize();
    6
    int increment = optimizer.getIncrementSize();
    7
    Entity[] entities = new Entity[increment + 1];
    7
    Entity[] entities = new Entity[increment + 1];
    8
    Session s = openSession();
    8
    Session s = openSession();
    9
    s.beginTransaction();
    9
    s.beginTransaction();
    10
    for (int i = 0; i < increment; i++)
    10
    for (int i = 0; i < increment; i++)
    11
    entities[i] = new Entity("" + (i + 1));
    11
    entities[i] = new Entity("" + (i + 1));
    12
    s.save(entities[i]);
    12
    s.save(entities[i]);
                                                                                                            
    13
    assertEquals(2, generator.getTableAccessCount());
    13
    assertEquals(2, generator.getDatabaseStructure().getTimesAccessed());
                                                                                                                                                    
    14
    assertEquals(increment + 1, optimizer.getLastSourceValue());
    14
    assertEquals(increment + 1, optimizer.getLastSourceValue());
    15
    assertEquals(i + 1, optimizer.getLastValue());
    15
    assertEquals(i + 1, optimizer.getLastValue());
    16
    assertEquals(increment + 1, optimizer.getLastSourceValue());
    16
    assertEquals(increment + 1, optimizer.getLastSourceValue());
    17
    entities[increment] = new Entity("" + increment);
    17
    entities[increment] = new Entity("" + increment);
    18
    s.save(entities[increment]);
    18
    s.save(entities[increment]);
                                                                                                            
    19
    assertEquals(3, generator.getTableAccessCount());
    19
    assertEquals(3, generator.getDatabaseStructure().getTimesAccessed());
                                                                                                                                                    
    20
    assertEquals((increment * 2) + 1, optimizer.getLastSourceValue());
    20
    assertEquals((increment * 2) + 1, optimizer.getLastSourceValue());
    21
    assertEquals(increment + 1, optimizer.getLastValue());
    21
    assertEquals(increment + 1, optimizer.getLastValue());
    22
    s.getTransaction().commit();
    22
    s.getTransaction().commit();
    23
    s.beginTransaction();
    23
    s.beginTransaction();
    24
    for (int i = 0; i < entities.length; i++)
    24
    for (int i = 0; i < entities.length; i++)
    25
    assertEquals(i + 1, entities[i].getId().intValue());
    25
    assertEquals(i + 1, entities[i].getId().intValue());
    26
    s.delete(entities[i]);
    26
    s.delete(entities[i]);
    27
    s.getTransaction().commit();
    27
    s.getTransaction().commit();
    28
    s.close();
    28
    s.close();
    Precondition Violations (1)
    Row Violation
    1Clone fragment #1 returns variable generator with type org.hibernate.id.enhanced.SequenceStyleGenerator , while Clone fragment #2 returns variable generator with type org.hibernate.id.enhanced.TableGenerator