It sounds really nice :)
I will try to launch this example tonight ...
I need to take a look at the DynamicSaajBinding to see what it does.

On 11/27/06, Jamie McCrindle <[EMAIL PROTECTED]> wrote:
hi all,

i've put together an example of a long running business process in bpmscript
that showcases some of the things you can do with bpmscript (on top of
servicemix, of course). The script looks like this:

/**
 * Demonstration of BpmScript using services including:
 *
 * - Lightweight Email Component
 * - Lightweight SOAP Component (modified)
 * - BpmScript Alarm Service
 *
 * Example takes in a request which looks something like:
 * <request>
 *  <symbol>GOOG</symbol>
 *  <min>12.9</min>
 *  <max>53.9</max>
 *  <to>[EMAIL PROTECTED]</to>
 * </request>
 *
 * It then looks up the stock price associated with the
 * symbol each hour using the ws.investbox.com web service
 * and email's the person specified in the to field of the
 * request if the price reaches more than the max or less
 * than the min. If not, the script sleeps for an hour and
 * then tries again.
**/
function main(input, sender) {

    // parse out the source xml
    var request = sourceToXml(input.getInMessage().getContent());

    // create some BpmScript Services
    var soapService = new SoapService(sender);
    var alarmService = new AlarmService(sender);
    var emailService = new EmailService(sender);

    // grab the minimum and maximum values from the request
    var min = parseFloat(request.min.text().toString());
    var max = parseFloat(request.max.text().toString());

    // check every hour
    while(alarmService.sendSync("PT1H")) {

      // create the SOAP content
      var message = <tns:GetQuote xmlns:tns="http://ws.invesbot.com/";>
        <tns:symbol>{request..symbol.text()}</tns:symbol>
        </tns:GetQuote>;

      // send out the soap request
      var exchange = soapService.sendSync(
        soapService.toURL("http://ws.invesbot.com/stockquotes.asmx";),
        "http://ws.invesbot.com/GetQuote";,
        xmlToSource(message));

      // get the xml from the response
      var xml = sourceToXml(exchange.getOutMessage().getContent());

      // parse out the bid. the reason this is more complicated
      // than it needs to be is because the data comes back as e.g.
23.5<small>x 100</small>
      var bid =
parseFloat(/^(\d+\.\d+)/.exec(xml..Bid.text().toString())[0]);

      // send out an email if the bid price is higher than the max
      // or lower than the minimum set and end the script
      if(bid < min || bid > max) {
        emailService.send({"to":request.to.text().toString(),
          "from":request.to.text().toString(),
          "subject":"Bid has reached " + (bid < min ? "minimum" : "maximum")
+ " value of " + bid,
          "text":xml.toXMLString()});
        break;
      }
  }

  sender.reply(ST.toStreamSource("<done/>"));

}


The spring config for the example looks as follows (without the smtp
properties -- i was testing using gmail):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:sm="http://servicemix.apache.org/config/1.0";
  xmlns="http://xbean.org/schemas/spring/1.0";
  xmlns:bs="http://bpmscript.org/jbi"; xmlns:test="urn:test">

  <bean id="mailSender"
    class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="${smtp.host}" />
    <property name="port" value="${smtp.port}" />
    <property name="protocol" value="smtps" />
    <property name="username" value="${smtp.username}" />
    <property name="password" value="${smtp.password}" />
    <property name="javaMailProperties">
      <props>
        <prop key="mail.smtps.auth">true</prop>
        <prop key="mail.smtp.starttls.enable">true</prop>
        <prop key="mail.smtp.debug">true</prop>
      </props>
    </property>
  </bean>

  <sm:container id="jbi" embedded="true" flowName="seda"
    createMBeanServer="false">

    <sm:activationSpecs>

      <sm:activationSpec>
        <sm:component>
          <bean
            class="
org.bpmscript.jbi.component.InMemoryBpmScriptSpringComponent">
            <property name="endpoints">
              <list>
                <bean
                  class="org.bpmscript.jbi.component.ProcessEndpoint">
                  <property name="endpoint" value="email" />
                  <property name="sourceResource"
                    value="classpath:email/main.js" />
                </bean>
              </list>
            </property>
          </bean>
        </sm:component>
      </sm:activationSpec>

      <sm:activationSpec componentName="dynamicsoap"
        service="bs:dynamicsoap">
        <sm:component>
          <bean class="org.bpmscript.jbi.DynamicSaajBinding"></bean>
        </sm:component>
      </sm:activationSpec>

      <sm:activationSpec componentName="emailSender"
        service="bs:emailSender">
        <sm:component>
          <bean
            class="org.apache.servicemix.components.email.SimpleMailSender">
            <property name="sender" ref="mailSender"/>
          </bean>
        </sm:component>
      </sm:activationSpec>

    </sm:activationSpecs>
  </sm:container>

</beans>




--
Cheers,
Guillaume Nodet

Reply via email to