下面列出了org.hibernate.Session#getSessionFactory ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public Map<String, Object> extractEntityTuple(Session session, EntityKey key) {
SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) session.getSessionFactory();
IgniteCache<Object, BinaryObject> cache = getEntityCache( sessionFactory, key.getMetadata() );
Object cacheKey = getProvider( sessionFactory ).createKeyObject( key );
Map<String, Object> result = new HashMap<>();
BinaryObject po = cache.get( cacheKey );
TupleSnapshot snapshot = new IgniteTupleSnapshot( cacheKey, po, key.getMetadata() );
for ( String fieldName : snapshot.getColumnNames() ) {
result.put( fieldName, snapshot.get( fieldName ) );
}
return result;
}
@Override
public Long getNextID(final String sequenceName) {
ReturningWork<Long> maxReturningWork = new ReturningWork<Long>() {
@Override
public Long execute(Connection connection) throws SQLException {
DialectResolver dialectResolver = new StandardDialectResolver();
Dialect dialect = dialectResolver.resolveDialect(getResolutionInfo(connection));
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement(dialect.getSequenceNextValString(sequenceName));
resultSet = preparedStatement.executeQuery();
resultSet.next();
return resultSet.getLong(1);
} catch (SQLException e) {
throw e;
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (resultSet != null) {
resultSet.close();
}
}
}
};
Session session = (Session) entityManager.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
Long maxRecord = sessionFactory.getCurrentSession().doReturningWork(maxReturningWork);
return maxRecord;
}
@Override
public void createSequence(final String sequenceName) {
if (sequenceExists(sequenceName)) {
return;
}
Work work = new Work() {
@Override
public void execute(Connection connection) throws SQLException {
DialectResolver dialectResolver = new StandardDialectResolver();
Dialect dialect = dialectResolver.resolveDialect(getResolutionInfo(connection));
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection
.prepareStatement(dialect.getCreateSequenceStrings(sequenceName, 1, 1)[0]);
preparedStatement.execute();
} catch (SQLException e) {
throw e;
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (resultSet != null) {
resultSet.close();
}
}
}
};
Session session = (Session) entityManager.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
sessionFactory.getCurrentSession().doWork(work);
}
@Override
public boolean sequenceExists(final String sequenceName) {
ReturningWork<Boolean> work = new ReturningWork<Boolean>() {
@Override
public Boolean execute(Connection connection) throws SQLException {
DialectResolver dialectResolver = new StandardDialectResolver();
Dialect dialect = dialectResolver.resolveDialect(getResolutionInfo(connection));
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement(dialect.getQuerySequencesString());
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
if (sequenceName.equals(resultSet.getString(1))) {
return true;
}
}
} catch (SQLException e) {
throw e;
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (resultSet != null) {
resultSet.close();
}
}
return false;
}
};
Session session = (Session) entityManager.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
return sessionFactory.getCurrentSession().doReturningWork(work);
}
@Override
public void dropSequence(final String sequenceName) {
Work work = new Work() {
@Override
public void execute(Connection connection) throws SQLException {
DialectResolver dialectResolver = new StandardDialectResolver();
Dialect dialect = dialectResolver.resolveDialect(getResolutionInfo(connection));
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement(dialect.getDropSequenceStrings(sequenceName)[0]);
preparedStatement.execute();
} catch (SQLException e) {
throw e;
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (resultSet != null) {
resultSet.close();
}
}
}
};
Session session = (Session) entityManager.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
sessionFactory.getCurrentSession().doWork(work);
}
@Test
public void testMappedEntitiesStats() {
Session session = (Session) em_1.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
Statistics statistics = sessionFactory.getStatistics();
// Initialize sample build configurations, these cannot be done by DBUnit because of the Hibernate Envers
// Auditing
insertExampleBuildConfigurations(em_1, basicRepositoryConfiguration);
SortedMap<String, Map<String, HibernateMetric>> entitiesStatMap = getSecondLevelCacheEntitiesStats(statistics);
logger.debug("All entities stats: {}", entitiesStatMap);
String[] mappedEntities = {
// ENTITY_STATS_PREFIX + "org.jboss.pnc.model.Artifact",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.BuildConfigSetRecord",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.BuildConfiguration",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.BuildConfigurationSet",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.BuildConfiguration_AUD",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.BuildEnvironment",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.BuildRecord",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.BuildRecordPushResult",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.Product",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.ProductMilestone",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.ProductMilestoneRelease",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.ProductRelease",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.ProductVersion",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.Project",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.RepositoryConfiguration",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.TargetRepository",
ENTITY_STATS_PREFIX + "org.jboss.pnc.model.User",
ENTITY_STATS_PREFIX + "build_configuration_parameters_AUD" };
Set<String> mappedEntitiesSet = new HashSet<String>(Arrays.asList(mappedEntities));
assertTrue(entitiesStatMap.keySet().containsAll(mappedEntitiesSet));
}
@Test
public void testMappedSecondLevelCacheStats() {
Session session = (Session) em_1.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
Statistics statistics = sessionFactory.getStatistics();
// Initialize sample build configurations, these cannot be done by DBUnit because of the Hibernate Envers
// Auditing
insertExampleBuildConfigurations(em_1, basicRepositoryConfiguration);
SortedMap<String, Map<String, HibernateMetric>> secondLevelCacheStatMap = getSecondLevelCacheRegionsStats(
statistics);
logger.debug("All second level cache stats: {}", secondLevelCacheStatMap);
String[] mappedEntities = {
// REGION_STATS_PREFIX + "org.jboss.pnc.model.Artifact",
REGION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfigSetRecord",
REGION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfiguration",
REGION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfigurationSet",
REGION_STATS_PREFIX + "org.jboss.pnc.model.BuildEnvironment",
REGION_STATS_PREFIX + "org.jboss.pnc.model.BuildRecord",
REGION_STATS_PREFIX + "org.jboss.pnc.model.BuildRecordPushResult",
REGION_STATS_PREFIX + "org.jboss.pnc.model.Product",
REGION_STATS_PREFIX + "org.jboss.pnc.model.ProductMilestone",
REGION_STATS_PREFIX + "org.jboss.pnc.model.ProductMilestoneRelease",
REGION_STATS_PREFIX + "org.jboss.pnc.model.ProductRelease",
REGION_STATS_PREFIX + "org.jboss.pnc.model.ProductVersion",
REGION_STATS_PREFIX + "org.jboss.pnc.model.Project",
REGION_STATS_PREFIX + "org.jboss.pnc.model.RepositoryConfiguration",
REGION_STATS_PREFIX + "org.jboss.pnc.model.TargetRepository",
REGION_STATS_PREFIX + "org.jboss.pnc.model.User" };
Set<String> mappedEntitiesSet = new HashSet<String>(Arrays.asList(mappedEntities));
assertTrue(secondLevelCacheStatMap.keySet().containsAll(mappedEntitiesSet));
}
public static <K> Map<K, BinaryObject> find(Session session, Class<?> class1, @SuppressWarnings("unchecked") K... ids) {
SessionFactory sessionFactory = session.getSessionFactory();
return find( sessionFactory, class1, ids );
}
@Test
public void testMappedCollectionsStats() {
Session session = (Session) em_1.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
Statistics statistics = sessionFactory.getStatistics();
// Initialize sample build configurations, these cannot be done by DBUnit because of the Hibernate Envers
// Auditing
insertExampleBuildConfigurations(em_1, basicRepositoryConfiguration);
SortedMap<String, Map<String, HibernateMetric>> collectionStatMap = getSecondLevelCacheCollectionsStats(
statistics);
logger.debug("All collection stats: {}", collectionStatMap);
String[] mappedCollections = {
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfigurationSet.buildConfigurations",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfigSetRecord.buildRecords",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.ProductVersion.buildConfigurations",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildRecord.attributes",
// COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.TargetRepository.artifacts",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfiguration.genericParameters",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.ProductMilestone.performedBuilds",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfiguration.dependants",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildRecord.dependencies",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.RepositoryConfiguration.buildConfigurations",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfiguration.dependencies",
// COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.Artifact.distributedInProductMilestones",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.ProductVersion.attributes",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.User.buildRecords",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildEnvironment.attributes",
// COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildRecord.builtArtifacts",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfigSetRecord.attributes",
// COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.ProductMilestone.distributedArtifacts",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.Project.buildConfigurations",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.ProductVersion.buildConfigurationSets",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildRecord.buildRecordPushResults",
// COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.Artifact.dependantBuildRecords",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.Product.productVersions",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.ProductVersion.productMilestones",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfiguration.buildConfigurationSets",
COLLECTION_STATS_PREFIX + "org.jboss.pnc.model.BuildConfigurationSet.buildConfigSetRecords" };
Set<String> mappedCollectionsSet = new HashSet<String>(Arrays.asList(mappedCollections));
assertTrue(collectionStatMap.keySet().containsAll(mappedCollectionsSet));
}
@Test
public void testFirstLevelCacheEviction() {
// Session 3
em_3 = getEmFactory().createEntityManager();
Session session_3 = (Session) em_3.getDelegate();
SessionFactory sessionFactory_3 = session_3.getSessionFactory();
// Initialize sample build configurations, these cannot be done by DBUnit because of the Hibernate Envers
// Auditing
insertExampleBuildConfigurations(em_1, basicRepositoryConfiguration);
BuildConfiguration buildConfig3 = BuildConfiguration.Builder.newBuilder()
.id(3)
.name("Test Build Configuration 3")
.description("Test Build Configuration 3 Description")
.project(Project.Builder.newBuilder().id(1).build())
.repositoryConfiguration(basicRepositoryConfiguration)
.buildScript("mvn install")
.buildEnvironment(BuildEnvironment.Builder.newBuilder().id(1).build())
.build();
// Persist in Session 1
em_1.getTransaction().begin();
em_1.persist(buildConfig3);
em_1.getTransaction().commit();
Integer newBCId = buildConfig3.getId();
// Entity is fetched very first time
BuildConfiguration bc = (BuildConfiguration) session_3.load(BuildConfiguration.class, newBCId);
SortedMap<String, HibernateMetric> genericStats = getGenericStats(sessionFactory_3.getStatistics());
double entityFetchCount1 = Double
.parseDouble(genericStats.get("hibernate-orm.entities.fetch.count").getValue());
double secondLevelCacheHitCount1 = Double
.parseDouble(genericStats.get("hibernate-orm.second-level-cache.hit.count").getValue());
// fetch the BuildConfiguration entity again, no change in fetch count from 1st level cache nor access to 2nd
// level
// cache as there is no need for it
bc = (BuildConfiguration) session_3.load(BuildConfiguration.class, newBCId);
SortedMap<String, HibernateMetric> genericStats_2 = getGenericStats(sessionFactory_3.getStatistics());
double entityFetchCount2 = Double
.parseDouble(genericStats_2.get("hibernate-orm.entities.fetch.count").getValue());
double secondLevelCacheHitCount2 = Double
.parseDouble(genericStats_2.get("hibernate-orm.second-level-cache.hit.count").getValue());
// No change in fetch from 1st and 2nd level caches
assertEquals((int) entityFetchCount1, (int) entityFetchCount2);
assertEquals((int) secondLevelCacheHitCount2, (int) secondLevelCacheHitCount2);
// Evict from first level cache
session_3.evict(bc);
// fetch one more time
bc = (BuildConfiguration) session_3.load(BuildConfiguration.class, newBCId);
SortedMap<String, HibernateMetric> genericStats_3 = getGenericStats(sessionFactory_3.getStatistics());
double entityFetchCount3 = Double
.parseDouble(genericStats_3.get("hibernate-orm.entities.fetch.count").getValue());
double secondLevelCacheHitCount3 = Double
.parseDouble(genericStats_3.get("hibernate-orm.second-level-cache.hit.count").getValue());
// No change in fetch from 1st level cache as entity is not there anymore
assertEquals((int) entityFetchCount2, (int) entityFetchCount3);
// Change in fetch from 2nd level cache: the entity is not in 1st level cache anymore, so Hibernate gets it from
// 2nd
// level
assertNotEquals(secondLevelCacheHitCount2, secondLevelCacheHitCount3);
logger.debug(
"Entity fetch count #1: {}, #2: {}, #3: {}",
entityFetchCount1,
entityFetchCount2,
entityFetchCount3);
logger.debug(
"Second level cache hit count #1: {}, #2: {}, #3: {}",
secondLevelCacheHitCount1,
secondLevelCacheHitCount2,
secondLevelCacheHitCount3);
}