Package org.jboss.seam.persistence

Source Code of org.jboss.seam.persistence.PersistenceContexts

package org.jboss.seam.persistence;

import static org.jboss.seam.annotations.Install.BUILT_IN;

import java.io.Serializable;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.core.AbstractMutable;
import org.jboss.seam.core.Manager;

/**
* Maintains the set of persistence contexts that have been
* touched in a conversation.
*
* @author Gavin King
*
*/
@Name("org.jboss.seam.persistence.persistenceContexts")
@Scope(ScopeType.CONVERSATION)
@BypassInterceptors
@Install(precedence=BUILT_IN)
public class PersistenceContexts extends AbstractMutable implements Serializable
{
   private static final long serialVersionUID = -4897350516435283182L;
   private Set<String> set = new HashSet<String>();
   private FlushModeType flushMode;
   private FlushModeType actualFlushMode;
   @Create
   public void create()
   {
      FlushModeType defaultFlushMode = Manager.instance().getDefaultFlushMode();
      if (defaultFlushMode != null)
      {
         flushMode = defaultFlushMode;
         actualFlushMode = defaultFlushMode;
      }
      else
      {
         flushMode = FlushModeType.AUTO;
         actualFlushMode = FlushModeType.AUTO;
      }
   }
  
  
   public FlushModeType getFlushMode()
   {
      return flushMode;
   }
  
   public Set<String> getTouchedContexts()
   {
      return Collections.unmodifiableSet(set);
   }
  
   public void touch(String context)
   {
      if ( set.add(context) ) setDirty();
   }
  
   public void untouch(String context)
   {
      if ( set.remove(context) ) setDirty();
   }
  
   public static PersistenceContexts instance()
   {
      if ( Contexts.isConversationContextActive() )
      {
         return (PersistenceContexts) Component.getInstance(PersistenceContexts.class);
      }
      else
      {
         return null;
      }
   }
  
   public void changeFlushMode(FlushModeType flushMode)
   {
      this.flushMode = flushMode;
      this.actualFlushMode = flushMode;
      changeFlushModes();  
   }

   private void changeFlushModes()
   {
      for (String name: set)
      {
         PersistenceContextManager pcm = (PersistenceContextManager) Contexts.getConversationContext().get(name);
         if (pcm!=null)
         {
            try
            {
               pcm.changeFlushMode(flushMode);
            }
            catch (UnsupportedOperationException uoe) {
               //swallow
            }
         }
      }
   }
  
   public void beforeRender()
   {
      flushMode = FlushModeType.MANUAL;
      changeFlushModes();
   }
  
   public void afterRender()
   {
      flushMode = actualFlushMode;
      changeFlushModes();
   }
  
}
TOP

Related Classes of org.jboss.seam.persistence.PersistenceContexts

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.