blob: 83fc0f82ce791b6f27b8ff92ea329bc679ceec38 [file] [log] [blame]
/*
* Copyright (c) 2008-2012 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Martin Taal - initial API and implementation
* Eike Stepper - maintenance
*/
package org.eclipse.emf.cdo.server.internal.hibernate;
import org.eclipse.emf.cdo.server.StoreThreadLocal;
import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
import org.eclipse.emf.cdo.spi.server.InternalCommitContext;
import org.eclipse.net4j.util.om.trace.ContextTracer;
/**
* @author Martin Taal
*/
public class HibernateThreadContext
{
private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HibernateThreadContext.class);
private static ThreadLocal<HibernateCommitContext> commitContext = new ThreadLocal<HibernateCommitContext>();
public static HibernateStoreAccessor getCurrentStoreAccessor()
{
return (HibernateStoreAccessor)StoreThreadLocal.getAccessor();
}
public static HibernateCommitContext getCommitContext()
{
HibernateCommitContext result = commitContext.get();
if (result == null)
{
throw new IllegalStateException("CommitContext not set"); //$NON-NLS-1$
}
return result;
}
public static boolean isCommitContextSet()
{
return commitContext.get() != null;
}
public static void setCommitContext(InternalCommitContext newCommitContext)
{
// in case of xa transactions then the commit context is set again
// if (newCommitContext != null && commitContext.get() != null)
// {
// throw new IllegalStateException("CommitContext already set");
// }
if (TRACER.isEnabled())
{
if (newCommitContext == null)
{
TRACER.trace("Clearing commitcontext in threadlocal"); //$NON-NLS-1$
}
else
{
TRACER.trace("Setting commitcontext in threadlocal"); //$NON-NLS-1$
}
}
// reset the context
if (newCommitContext == null)
{
commitContext.set(null);
}
else
{
final HibernateCommitContext hcc = new HibernateCommitContext();
hcc.setCommitContext(newCommitContext);
commitContext.set(hcc);
}
}
}