Remove accidentally committed useless file
This commit is contained in:
parent
19f5e7b3f5
commit
94b880fd4d
|
@ -1,157 +0,0 @@
|
|||
package ca.uhn.fhir.jpa.util;
|
||||
|
||||
import org.aopalliance.intercept.MethodInterceptor;
|
||||
import org.aopalliance.intercept.MethodInvocation;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.StatelessSession;
|
||||
import org.hibernate.engine.spi.SessionImplementor;
|
||||
import org.springframework.aop.framework.ProxyFactory;
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.datasource.DataSourceUtils;
|
||||
import org.springframework.orm.jpa.EntityManagerFactoryUtils;
|
||||
import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
|
||||
import org.springframework.transaction.support.ResourceHolderSynchronization;
|
||||
import org.springframework.transaction.support.TransactionSynchronizationAdapter;
|
||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import java.sql.Connection;
|
||||
|
||||
import static org.springframework.orm.jpa.EntityManagerFactoryUtils.ENTITY_MANAGER_SYNCHRONIZATION_ORDER;
|
||||
import static org.springframework.util.ReflectionUtils.invokeMethod;
|
||||
|
||||
/**
|
||||
* Hibernate's {@link StatelessSession} factory which will be bound to the
|
||||
* current transaction. This factory returns a Proxy which delegates method
|
||||
* calls to the underlying {@link StatelessSession} bound to transaction. At the
|
||||
* end of the transaction the session is automatically closed. This class
|
||||
* borrows idea's from {@link DataSourceUtils},
|
||||
* {@link EntityManagerFactoryUtils}, {@link ResourceHolderSynchronization} and
|
||||
* {@link LocalEntityManagerFactoryBean}.
|
||||
*/
|
||||
public class StatelessSessionFactoryBean implements FactoryBean<StatelessSession> {
|
||||
|
||||
private SessionFactory sessionFactory;
|
||||
|
||||
@Autowired
|
||||
public StatelessSessionFactoryBean(SessionFactory theSessionFactory) {
|
||||
this.sessionFactory = theSessionFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StatelessSession getObject() throws Exception {
|
||||
StatelessSessionInterceptor statelessSessionInterceptor = new StatelessSessionInterceptor(
|
||||
sessionFactory);
|
||||
return ProxyFactory.getProxy(StatelessSession.class, statelessSessionInterceptor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getObjectType() {
|
||||
return StatelessSession.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSingleton() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this to override the {@link SessionFactory} obtained from the
|
||||
* {@link EntityManagerFactory}. Please note that the connection will still
|
||||
* be used from the {@link EntityManager}.
|
||||
*/
|
||||
public void setSessionFactory(SessionFactory sessionFactory) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
}
|
||||
|
||||
private static class StatelessSessionInterceptor implements MethodInterceptor {
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
|
||||
public StatelessSessionInterceptor(
|
||||
SessionFactory sessionFactory) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
}
|
||||
|
||||
private void bindWithTransaction(StatelessSession statelessSession) {
|
||||
TransactionSynchronizationManager
|
||||
.registerSynchronization(new StatelessSessionSynchronization(sessionFactory,
|
||||
statelessSession));
|
||||
TransactionSynchronizationManager.bindResource(sessionFactory, statelessSession);
|
||||
}
|
||||
|
||||
private StatelessSession getCurrentSession() {
|
||||
if (!TransactionSynchronizationManager.isActualTransactionActive()) {
|
||||
throw new IllegalStateException(
|
||||
"There should be an active transaction for the current thread.");
|
||||
}
|
||||
StatelessSession statelessSession = (StatelessSession) TransactionSynchronizationManager
|
||||
.getResource(sessionFactory);
|
||||
if (statelessSession == null) {
|
||||
statelessSession = openNewStatelessSession();
|
||||
bindWithTransaction(statelessSession);
|
||||
}
|
||||
return statelessSession;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(MethodInvocation invocation) throws Throwable {
|
||||
StatelessSession statelessSession = getCurrentSession();
|
||||
return invokeMethod(invocation.getMethod(), statelessSession, invocation.getArguments());
|
||||
}
|
||||
|
||||
/**
|
||||
* It is important we obtain the physical (real) connection otherwise it
|
||||
* will be double proxied and there will be problems releasing the
|
||||
* connection.
|
||||
*/
|
||||
private Connection obtainPhysicalConnection() {
|
||||
EntityManager entityManager = EntityManagerFactoryUtils
|
||||
.getTransactionalEntityManager(sessionFactory);
|
||||
SessionImplementor sessionImplementor = (SessionImplementor) entityManager
|
||||
.getDelegate();
|
||||
// return sessionImplementor.getTransactionCoordinator().getJdbcCoordinator()
|
||||
// .getLogicalConnection().getConnection();
|
||||
return null;
|
||||
}
|
||||
|
||||
private StatelessSession openNewStatelessSession() {
|
||||
Connection connection = obtainPhysicalConnection();
|
||||
return sessionFactory.openStatelessSession(connection);
|
||||
}
|
||||
}
|
||||
|
||||
private static class StatelessSessionSynchronization extends TransactionSynchronizationAdapter {
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
private final StatelessSession statelessSession;
|
||||
|
||||
public StatelessSessionSynchronization(SessionFactory sessionFactory,
|
||||
StatelessSession statelessSession) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
this.statelessSession = statelessSession;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeCommit(boolean readOnly) {
|
||||
if (!readOnly) {
|
||||
// ((TransactionContext) statelessSession).flu
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeCompletion() {
|
||||
TransactionSynchronizationManager.unbindResource(sessionFactory);
|
||||
statelessSession.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return ENTITY_MANAGER_SYNCHRONIZATION_ORDER - 100;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue