package org.jboss.weld.examples.pastecode.session; import org.jboss.weld.examples.pastecode.model.CodeFragment; import javax.ejb.Lock; import javax.ejb.LockType; import javax.ejb.Singleton; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Observes; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Holds a log of code fragments added by all users * <p/> * Threadsafe. * * @author Pete Muir */ @ApplicationScoped @Singleton public class CodeFragmentLogger { private final List<CodeFragment> log; public CodeFragmentLogger() { this.log = new ArrayList<CodeFragment>(); } @Lock(LockType.READ) public List<CodeFragment> getLog() { return Collections.unmodifiableList(log); } @Lock(LockType.WRITE) public void clearLog() { this.log.clear(); } @Lock(LockType.WRITE) public void addEntry(@Observes CodeFragment codeFragment) { this.log.add(codeFragment); } }