Package org.uengine.queue.faultqueue

Source Code of org.uengine.queue.faultqueue.FaultProcessorBean

package org.uengine.queue.faultqueue;

import java.rmi.RemoteException;

import org.uengine.kernel.FaultContext;
import org.uengine.kernel.ProcessInstance;
import org.uengine.kernel.UEngineException;
import org.uengine.processmanager.ProcessManagerBean;
import org.uengine.processmanager.ProcessManagerFactoryBean;


import javax.jms.Message;
import javax.jms.ObjectMessage;

import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;

import javax.ejb.EJBException;
import javax.ejb.MessageDrivenContext;
import javax.ejb.RemoveException;

public class FaultProcessorBean
   implements javax.ejb.MessageDrivenBean, javax.jms.MessageListener
{

  MessageDrivenContext ejbContext;
  Context jndiContext;
  
   public void setMessageDrivenContext (MessageDrivenContext mdc)
   {
      ejbContext = mdc;
      try
      {
         jndiContext = new InitialContext ();
      } catch(NamingException ne)
      {
         throw new EJBException (ne);
      }
   }
  
   public void ejbCreate () {}
  
   public void onMessage (Message omessage)
   {
    String tracingTag = null;
    ProcessInstance instance = null;
   
    ProcessManagerBean pmb = null;
    try{
      ObjectMessage message = (ObjectMessage)omessage;     
      FaultParameter faultParameter = (FaultParameter)message.getObject();
           
      String instanceId = faultParameter.getInstanceId();
      tracingTag = faultParameter.getTracingTag();
      UEngineException fault = faultParameter.getFault();
     
      pmb = new ProcessManagerBean();
      pmb.setSessionContext(null);
     
      try{
        instance = pmb.getProcessInstance(instanceId);
      }catch(Exception e){
        throw new UEngineException("Fault has been occurred during a new instance initiates.", fault);
      }
System.out.println("FaultProcessorBean::onMessage: fault is " + fault + "\n detail is " + fault.getDetails());
      //TODO: because of Oracle's max size of varchar
      fault.setDetails(null);
      //
     
      instance.fireFault(tracingTag, fault);
      pmb.applyChanges();

    }catch(Exception e){
      if(pmb!=null)
        try {
          pmb.cancelChanges();
        } catch (RemoteException e1) {
        }
       
      throw new EJBException(e);   
    }finally{
      try {
        pmb.remove();
      } catch (RemoteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (RemoveException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
   }
  
   public void ejbRemove ()
   {
      try
      {
         jndiContext.close ();
         ejbContext = null;
      } catch(NamingException ignored) { }
   }
  
}
TOP

Related Classes of org.uengine.queue.faultqueue.FaultProcessorBean

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.