/* Generated by Together */ package multimonster.transporter; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.RemoveException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import multimonster.common.FormatId; import multimonster.common.MMThread; import multimonster.common.ProtocolId; import multimonster.common.Proxy; import multimonster.common.media.MOIdentifier; import multimonster.common.pipe.Pipe; import multimonster.common.plugin.PlugInIdentifier; import multimonster.common.plugin.PlugInInformation; import multimonster.common.setting.Setting; import multimonster.common.util.EjbCreator; import multimonster.common.util.EjbHomeGetter; import multimonster.converter.exceptions.ConverterException; import multimonster.converter.interfaces.ConverterImpl; import multimonster.converter.interfaces.ConverterImplHome; import multimonster.transporter.exceptions.TransporterException; import org.apache.log4j.Logger; /** * * Transfers data with a protocol to the MediaProxy. * * @author J�rg Meier * * @ejb.bean name = "TransporterImpl" * display-name = "TransporterFacade SessionBean" * description = "The Facade of the Transporter-Package of MultiMonster" * view-type = "remote" * jndi-name = "multimonster/transporter/TransporterFacade" */ public class TransporterImplBean implements TransporterFacade, SessionBean { private SessionContext ctx; private Logger log; private Context context; private ConverterImplHome converterHome; public void setSessionContext(SessionContext context) throws RemoteException, EJBException { ctx = context; } public void ejbActivate() throws EJBException { } public void ejbPassivate() throws EJBException { } public void ejbRemove() throws EJBException { } /** * @ejb.create-method * * @throws CreateException * @throws EJBException */ public void ejbCreate() throws CreateException, EJBException { log = Logger.getLogger(this.getClass()); try { context = new InitialContext(); converterHome = EjbHomeGetter.getConverterHome(context); } catch (NamingException e) { log.error(this.getClass().getName() + " Couldn't get referenced EJB-Home-Interfaces."); } } /** * @ejb.interface-method view-type = "remote" * * Starts data output by returning a Pipe which serves the data * with a protocol. * */ public Pipe output(MOIdentifier mOId, FormatId fId, ProtocolId protocolId) throws TransporterException { log.debug("output()"); return startTransporter(mOId, fId, protocolId, false); } /** * @ejb.interface-method view-type = "remote" */ public Pipe input(MOIdentifier mOId, ProtocolId protocolId) throws TransporterException { log.debug("input() called."); return startTransporter(mOId, null, protocolId, true); } private Pipe startTransporter(MOIdentifier mOId, FormatId fId, ProtocolId protocolId, boolean isInput) throws TransporterException { Pipe pipeToProxy = null; Pipe pipeFromConverter = null; String errorText = ""; ConverterImpl converter = null; TransporterPlugInFactory transporterFactory = null; TransporterPlugin transporter = null; // parameter checks if (mOId == null) { errorText = "mOId was null - aborting."; log.error(errorText); throw new TransporterException(errorText); } else if (fId == null) { log.debug("FormatID is null - can only do input."); } else if (protocolId == null) { errorText = "protocol was null - aborting."; log.error(errorText); throw new TransporterException(errorText); } else { //log.debug("parameter ok."); } // get PlugIn for protocol transporterFactory = TransporterPlugInFactory.getInstance(); if (transporterFactory == null){ errorText = "Couldn't get TransporterFactory"; log.error(errorText); throw new TransporterException(errorText); } try { transporter = transporterFactory.getTransporter(protocolId, isInput); } catch (TransporterException e1) { errorText = "TransporterFactory couldn't get PlugIn: " +e1.getMessage(); log.error(errorText); throw new TransporterException(errorText); } // create Pipe to Proxy pipeToProxy = new Pipe(); if (pipeToProxy == null) { errorText = "Couldn't create Pipe to Proxy."; log.error(errorText); throw new TransporterException(errorText); } // start deeper layers by asking the converter for a data-pipe try { converter = EjbCreator.createConverter(converterHome, context); } catch (Exception e) { errorText = "Couldn't get controller: " +e.getMessage(); log.error(errorText); throw new TransporterException(errorText); } try { // call converter to get data pipe if (isInput) { //create pipe where Transporter has to insert data for converter pipeFromConverter = new Pipe(); if (pipeFromConverter == null) { errorText = "Couldn't create Pipe to Converter."; log.error(errorText); throw new TransporterException(errorText); } converter.addMediaObject(mOId, pipeFromConverter); } else { pipeFromConverter = converter.getMediaInstance(mOId, fId); } converter.remove(); } catch (RemoteException e) { errorText = "Error calling converter: " +e.getMessage(); log.error(errorText); throw new TransporterException(errorText); } catch (RemoveException e) { errorText = "Error removing converter: " +e.getMessage(); log.error(errorText); throw new TransporterException(errorText); } catch (ConverterException e) { errorText = "Got error from converter: " +e.getMessage(); log.error(errorText); throw new TransporterException(errorText); } if (pipeFromConverter == null){ errorText = "Got no pipe from converter."; log.error(errorText); throw new TransporterException(errorText); } // give both Pipes to Transporter-PlugIn transporter.setPipes(pipeToProxy, pipeFromConverter); // start transporting... MMThread transporterThread = new MMThread(transporter); transporterThread.start(); //log.debug("Transporter started."); return pipeToProxy; } /** * @ejb.interface-method view-type = "remote" */ public boolean registerProxy(Proxy proxy) { return false; } /** * @ejb.interface-method view-type = "remote" */ public boolean releaseProxy(Proxy proxy) { return false; } /* (non-Javadoc) * @see multimonster.common.SettingListener#changeSetting(multimonster.common.Setting[]) */ /** * @ejb.interface-method view-type = "remote" */ public void changeSetting(Setting[] setting) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see multimonster.common.Pluggable#addPlugIn(multimonster.common.PlugInInformation) */ /** * @ejb.interface-method view-type = "remote" */ public void addPlugIn(PlugInInformation plugInInformation) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see multimonster.common.Pluggable#releasePlugIn(multimonster.common.PlugInIdentifier) */ /** * @ejb.interface-method view-type = "remote" */ public void releasePlugIn(PlugInIdentifier plugInId) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see multimonster.common.Pluggable#removePlugIn(multimonster.common.PlugInIdentifier) */ /** * @ejb.interface-method view-type = "remote" */ public void removePlugIn(PlugInIdentifier plugInId) { // TODO Auto-generated method stub } }