package com.destinationradiodenver.mobileStreaming.singleton; import java.io.Serializable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import javax.annotation.PostConstruct; import javax.ejb.AccessTimeout; import javax.ejb.ConcurrencyManagement; import javax.ejb.ConcurrencyManagementType; import javax.ejb.Singleton; import javax.ejb.Startup; import javax.inject.Inject; import org.jboss.logging.Logger; import org.red5.service.httpstream.SegmentConsumer; import com.destinationradiodenver.mobileStreaming.FfThread; @Startup @Singleton @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) @AccessTimeout(value=10, unit=TimeUnit.SECONDS) public class SegmentConsumers extends ConcurrentHashMap<String, SegmentConsumer> implements Serializable { /** * @author cpenhale */ private static final long serialVersionUID = -7647887359926613782L; private Logger log = Logger.getLogger(SegmentConsumers.class); @Inject private AvailabilityService availabilityService; public SegmentConsumers(){ log.info("Creating Ffthreads Singleton"); } @PostConstruct private void init(){ log.info("Encoders Ffthreads initialized"); } public void startSegmentConsumerForFfThread(FfThread ffThread){ // The SegmentConsumer notifies the AvailabilityService of new files generated by FfThread SegmentConsumer segmentConsumer = new SegmentConsumer(); segmentConsumer.setPipePath(ffThread.getPipePath()); log.infof("Constructing SegmentConsumer - PipePath Name: %s MobileProfile Name: %s", ffThread.getPipePath(), ffThread.getMobileProfile().getName()); segmentConsumer.setStreamName(ffThread.getStreamName()+"_"+ffThread.getMobileProfile().getName()); segmentConsumer.setMobileProfile(ffThread.getMobileProfile()); segmentConsumer.setAvailabilityService(availabilityService); new Thread(segmentConsumer).start(); super.put(ffThread.getStreamName()+"_"+ffThread.getMobileProfile().getName(), segmentConsumer); } public void stopSegmentConsumer(String name){ SegmentConsumer segmentConsumer = super.get(name); if(segmentConsumer!=null){ segmentConsumer.setInterruptMe(true); super.remove(name); } } }