2 Replies Latest reply: Dec 11, 2012 6:30 AM by 905830 RSS

    BPEL 11g fault policy action java class not sending email

    905830
      Hi All,

      I am trying to attach fault policy to my bpel process. The fault conditions are working fine but the email part from the action class is not able to send email. The code execute properly , i can't see any error message in the log but I cant access the email in my inbox.

      I am able to send email from using email bpel activity and also test work flow notification from em console.

      I have used both the java options for sending email like javax.mail and oracle.sdp.messaging .

      JAVA CODE FOR EMAIL javax.mail
      ---------------------------------------
      public String handleFault(IFaultRecoveryContext iFaultRecoveryContext){
      //Print Fault Meta Data to Console
      System.out.println("****************Fault Metadata********************************");
      System.out.println("Fault policy id: " + iFaultRecoveryContext.getPolicyId());
      System.out.println("Fault type: " + iFaultRecoveryContext.getType());
      System.out.println("Partnerlink: " + iFaultRecoveryContext.getReferenceName());
      System.out.println("Port type: " + iFaultRecoveryContext.getPortType());
      System.out.println("**************************************************************");
      //print all properties defined in the fault-policy file
      System.out.println("Properties Set for the Fault");

      //Print Fault Details to Console if it exists
      System.out.println("****************Fault Details********************************");
      // if(iFaultRecoveryContext instanceof BPELFaultRecoveryContextImpl)
      // {
      BPELFaultRecoveryContextImpl bpelCtx = (BPELFaultRecoveryContextImpl)iFaultRecoveryContext;
      System.out.println("Fault: " + bpelCtx.getFault());
      System.out.println("Activity: " + bpelCtx.getActivityName());
      System.out.println("Composite Instance: " + bpelCtx.getCompositeInstanceId());
      System.out.println("Composite Name: " + bpelCtx.getCompositeName());
      System.out.println("***********************************************************");
      // }


      try {
      bpelCtx.addAuditTrailEntry("Sending Email...");

      Map props = iFaultRecoveryContext.getProperties();
      if (props != null && props.size() > 0) {
      setFrom(getParameterValue((ArrayList)props.get("from")));
      setTo(getParameterValue((ArrayList)props.get("to")));
      setSubject(getParameterValue((ArrayList)props.get("subject")) + bpelCtx.getTitle());
      setText(getParameterValue((ArrayList)props.get("text")) + "\n" + "BPEL Process Instance: " + bpelCtx.getInstanceId() + " needs intervention to recover from a technical exception: " + bpelCtx.getFault().getMessage() + ".\n" + "Check the Activities tab in the BPEL Management Console in order to resolve the error as soon as possible.\n" + "This message was automatically generated, please do not reply to it.");
      setHost(getParameterValue((ArrayList)props.get("host")));
      setPort(getParameterValue((ArrayList)props.get("port")));
      }

      bpelCtx.addAuditTrailEntry("to Email getFrom..."+getFrom());
      bpelCtx.addAuditTrailEntry("to Email getTo..."+getTo());
      bpelCtx.addAuditTrailEntry("to Email getText..."+getText());
      bpelCtx.addAuditTrailEntry("to Email getHost..."+getHost());
      bpelCtx.addAuditTrailEntry("to Email getPort..."+getPort());

      Session mailSession = Session.getDefaultInstance(properties);
      Message simpleMessage = new MimeMessage(mailSession);
      bpelCtx.addAuditTrailEntry("to Email toAddresses2...");
      InternetAddress fromAddress = new InternetAddress(from);
      bpelCtx.addAuditTrailEntry("to Email fromAddress..."+fromAddress);
      simpleMessage.setFrom(fromAddress);
      String[] toAddresses = to.split(";");
      if (toAddresses != null && toAddresses.length > 0)
      {
      bpelCtx.addAuditTrailEntry("to Email toAddresses3...");
      InternetAddress[] toInternetAddresses =new InternetAddress[toAddresses.length];
      for (int i = 0; i < toAddresses.length; i++)
      {
      bpelCtx.addAuditTrailEntry("to Email toAddresses4444..."+ toAddresses);
      toInternetAddresses[i] = new InternetAddress(toAddresses[i]);
      bpelCtx.addAuditTrailEntry("to Email toInternetAddresses..."+ toInternetAddresses[i]);


      }
      simpleMessage.setRecipients(RecipientType.TO,toInternetAddresses);
      }
      simpleMessage.setSubject(subject);
      simpleMessage.setText(text);
      Transport.send(simpleMessage);

      bpelCtx.addAuditTrailEntry("After Email...");
      } catch (Exception e) {
      bpelCtx.addAuditTrailEntry("fault Message:" + e.getMessage());
      }

      //Custom Code to Log Fault to File/DB/JMS or send Emails etc.
      return "Manual";
      }
      private String getParameterValue(ArrayList parameterList) {
      String value = null;
      if (parameterList != null && parameterList.size() > 0)
      value = (String)parameterList.get(0);
      return value;
      }

      JAVA CODE FOR EMAIL oracle.sdp.messaging 

      private void sendMail(IFaultRecoveryContext iFaultRecoveryContext) {

      BPELFaultRecoveryContextImpl bpelCtx = (BPELFaultRecoveryContextImpl)iFaultRecoveryContext;

      bpelCtx.addAuditTrailEntry("In sendMail...");
      Map<String, Object> params = new HashMap<String, Object>();
      // params.put(key, value); // if optional parameters need to be specified.
      MessagingClient messagingClient;
      try {
      bpelCtx.addAuditTrailEntry("In sendMail111...");
      messagingClient =
      MessagingClientFactory.createMessagingClient(params);
      Message newMessage = MessagingFactory.createMessage();
      // newMessage.setContent(createEventPayload(iFaultRecoveryContext),"text/plain");
      newMessage.setContent("Component Name :"+bpelCtx.getComponentName()+ "\n Instacne Id :"+bpelCtx.getComponentInstanceId()+
      "\n Composite Instance Id :"+bpelCtx.getCompositeInstanceId()+ "\n Composite Name :" bpelCtx.getCompositeName()
      "\n Activity name :"+bpelCtx.getActivityName() + "\n Activity Id :" bpelCtx.getActivityId() "\n ECID :" bpelCtx.getECID()
      "\n Reference Name :"+bpelCtx.getReferenceName()+ "\n Title :" bpelCtx.getTitle()
      "\n Fault :" + bpelCtx.getFault()+ "\n Port Name :"+bpelCtx.getPortType(), "text/plain");
      bpelCtx.addAuditTrailEntry("In sendMail222...");
      Address sender = MessagingFactory.createAddress(getFrom());
      bpelCtx.addAuditTrailEntry("In sendMail sender..."+sender.toString());
      bpelCtx.addAuditTrailEntry("from Email..."+getFrom());
      String recipientsStr[] = to.split(";");
      bpelCtx.addAuditTrailEntry("to Email..."+getTo());
      bpelCtx.addAuditTrailEntry("In sendMail333...");
      Address[] recipients = MessagingFactory.createAddress(recipientsStr);
      bpelCtx.addAuditTrailEntry("In sendMail444...");
      newMessage.addSender(sender);
      messagingClient.registerAccessPoint(MessagingFactory.createAccessPoint(sender));
      newMessage.addAllRecipients(recipients);
      bpelCtx.addAuditTrailEntry("In sendMail5555...");
      newMessage.getMessageInfo().setSession(MessageSessionType.INBOUND_SESSION);
      newMessage.setSubject(getSubject());
      bpelCtx.addAuditTrailEntry("Subject..."+getSubject());
      String messageId = "";
      bpelCtx.addAuditTrailEntry("In sendMail666...");
      synchronized (this) {
      bpelCtx.addAuditTrailEntry("In sendMail777...");
      messageId = messagingClient.send(newMessage);
      bpelCtx.addAuditTrailEntry("In sendMail888...");
      }
      Status[] statuses = messagingClient.getStatus(messageId);
      bpelCtx.addAuditTrailEntry("In sendMail999...");

      } catch (MessagingException e) {
      bpelCtx.addAuditTrailEntry("inside exception email fault Message:" + e.getMessage());
      //e.printStackTrace();
      }
      }





      MESSAGES FROM SOA SERVER OUT LOG after test the bpel process:
      ===========================================

      ****************Fault?Metadata********************************
      Fault?policy?id:?SimpleFaultPolicy
      Fault?type:?bpel
      Partnerlink:?Service1
      Port?type:?{http://kacst.edu.sa/process/nstip/coPINotifyProcess}kacst_process_nstipCoPIMotifyProcess
      **************************************************************
      Properties?Set?for?the?Fault
      ****************Fault?Details********************************
      Fault:?com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.oracle.com/bpel/extension}remoteFault}
      messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
      parts: {{
      summary=<summary>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</summary>
      ,detail=<detail>&lt;exception>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.&lt;/exception>
      </detail>
      ,code=<code>env:Server</code>}

      Activity:?Invoke1
      Composite?Instance:?740332
      Composite?Name:?TestBPELFaultPolicy
      ***********************************************************
      DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
      DEBUG SMTP: useEhlo true, useAuth false
      DEBUG SMTP: trying to connect to host "localhost", port 25, isSSL false
      220 taisirsit.kacst.edu.sa ESMTP Sendmail 8.14.4+Sun/8.14.4; Fri, 12 Oct 2012 13:00:45 +0300 (AST)
      DEBUG SMTP: connected to host "localhost", port: 25

      EHLO taisirsit.kacst.edu.sa
      250-taisirsit.kacst.edu.sa Hello localhost [127.0.0.1], pleased to meet you
      250-ENHANCEDSTATUSCODES
      250-PIPELINING
      250-EXPN
      250-VERB
      250-8BITMIME
      250-SIZE
      250-DSN
      250-ETRN
      250-DELIVERBY
      250 HELP
      DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
      DEBUG SMTP: Found extension "PIPELINING", arg ""
      DEBUG SMTP: Found extension "EXPN", arg ""
      DEBUG SMTP: Found extension "VERB", arg ""
      DEBUG SMTP: Found extension "8BITMIME", arg ""
      DEBUG SMTP: Found extension "SIZE", arg ""
      DEBUG SMTP: Found extension "DSN", arg ""
      DEBUG SMTP: Found extension "ETRN", arg ""
      DEBUG SMTP: Found extension "DELIVERBY", arg ""
      DEBUG SMTP: Found extension "HELP", arg ""
      DEBUG SMTP: use8bit false
      MAIL FROM:<pravat@gmail.com>
      250 2.1.0 <pravat@gmail.com>... Sender ok
      RCPT TO:<tukuna@gmail.com>
      250 2.1.5 <tukuna@gmail.com>... Recipient ok
      DEBUG SMTP: Verified Addresses
      DEBUG SMTP: tukuna@gmail.com
      DATA
      354 Enter mail, end with "." on a line by itself
      From: pravat@gmail.com
      To: tukuna@gmail.com
      Message-ID: <1913867882.0.1350036045460.JavaMail.fusionmgr@taisirsit.kacst.edu.sa>
      Subject: SOA EXCEPTIONInstance #890381 of BPELProcess1
      MIME-Version: 1.0
      Content-Type: text/plain; charset=us-ascii
      Content-Transfer-Encoding: 7bit

      Testing Email From Fault
      BPEL Process Instance: 890381 needs intervention to recover from a technical exception: faultName: {{http://schemas.oracle.com/bpel/extension}remoteFault}
      messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
      parts: {{
      summary=<summary>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</summary>
      ,detail=<detail>&lt;exception>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.&lt;/exception>
      </detail>
      ,code=<code>env:Server</code>}
      ..
      Check the Activities tab in the BPEL Management Console in order to resolve the error as soon as possible.
      This message was automatically generated, please do not reply to it.
      .
      250 2.0.0 q9CA0j30012424 Message accepted for delivery
      QUIT
      221 2.0.0 taisirsit.kacst.edu.sa closing connection


      Details from Instance of BPEL PROCESS :

      ------------------------------------------------------------------------------------------------
      Started invocation of operation "process" on partner "Service1".
      Oct 12, 2012 10:00:45 AM [FAULT RECOVERY] Invoked handleBPELFault on custom java action class "com.kacst.fault.CustomFaultHandler".
      Oct 12, 2012 10:00:45 AM Sending Email...
      Oct 12, 2012 10:00:45 AM to Email getFrom...pravat@gmail.com
      Oct 12, 2012 10:00:45 AM to Email getTo...tukuna@gmail.com
      Oct 12, 2012 10:00:45 AM to Email getText...Testing Email From Fault BPEL Process Instance: 890381 needs intervention to recover from a technical exception: faultName: {{http://schemas.oracle.com/bpel/extension}remoteFault} messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage} parts: {{ summary=<summary>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</summary> ,detail=<detail>&lt;exception>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.&lt;/exception> </detail> ,code=<code>env:Server</code>} . Check the Activities tab in the BPEL Management Console in order to resolve the error as soon as possible. This message was automatically generated, please do not reply to it.
      Oct 12, 2012 10:00:45 AM to Email getHost...smtp.kacst.edu.sa
      Oct 12, 2012 10:00:45 AM to Email getPort...25
      Oct 12, 2012 10:00:45 AM to Email toAddresses2...
      Oct 12, 2012 10:00:45 AM to Email fromAddress...pravat@gmail.com
      Oct 12, 2012 10:00:45 AM to Email toAddresses3...
      Oct 12, 2012 10:00:45 AM to Email toAddresses4444...tukuna@gmail.com
      Oct 12, 2012 10:00:45 AM to Email toInternetAddresses...tukuna@gmail.com
      Oct 12, 2012 10:00:45 AM After Email...
      Oct 12, 2012 10:00:45 AM [FAULT RECOVERY] Marked Invoke activity as "pending manual recovery".
      Oct 12, 2012 10:00:45 AM Faulted while invoking operation "process" on provider "Service1".




      Please suggest.


      Thanks