Sample Java code--ATP servlet

Here is the sample ATP servlet described in "The scenario".

/**
 * @(#) ATPServlet.java
 *
 * Copyright (c) 1997-2000 CrossWorlds Software, Inc.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of 
 * IBM. You shall not disclose such Confidential information and shall
 * use it only in accordance with the terms of the license agreement you 
 * entered into with IBM Software.
*/
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.*;
import java.text.*;
import IdlAccessInterfaces.*;
import CxCommon.BusinessObject;
 
/**
* Available To Promise Servlet example
*/
public class ATPServlet extends HttpServlet
{
 
     // Defines for some statics
     public static String DEFAULT_SERVER = "CrossWorlds";
     public static String DEFAULT_IOR = "CrossWorlds.ior";
     public static String DEFAULT_USER = "admin";
     public static String DEFAULT_PASSWD = "null";
     // User name to login into the IC Server
     private String userName = DEFAULT_USER;
     // Password
     private String passWord = DEFAULT_PASSWD;
     // ServerName
     private String serverName = DEFAULT_SERVER;
     // IOR File
     private String iorFile = DEFAULT_IOR;
     // AccessSession
     private IInterchangeAccessSession accessSession = null;
     // AccessEngine
     private IAccessEngine accessEngine = null;
 
     // Servlet Context for getting config information
     private ServletContext ctx;
     // A formatter to print the price with precision.
     private static DecimalFormat formatter;
     // MIME type
     private String mimeType = "text/html";
 
     /**
     * The init method. This method is used by the web server
     * when the Servlet is loaded for the first time.
     * @param ServletConfig Configuration information 
     * associated with the servlet.
     * @exception ServletException is thrown when the 
     * servlet cannot be initialized
     */
     public void init(ServletConfig aConfig)throws ServletException
     {
        super.init(aConfig);
        // Formatter for printing prices in the correct format
        formatter = new DecimalFormat();
        formatter.setDecimalSeparatorAlwaysShown(true);
 
        // Read up the initial parameters so we can connect to 
        // the right ICS server
        String configuredServer = null;
        String configurediorFile = null;
        String configuredUser = null;
        String configuredpassWord = null;
        configuredServer = aConfig.getInitParameter("ICSNAME");
        if ( configuredServer != null) 
               {
               this.serverName = configuredServer;
               }
        else
               {
               this.log(
                  "No Interchange Server configured, using 
                    default of CROSSWORLDS");
               }
        configurediorFile = aConfig.getInitParameter("IORFILE");
        if (iorFile != null) 
               {
               this.iorFile = configurediorFile;
               }
        else 
               {
               this.log(
                 "IOR file not defined, will use CrossWorlds.ior
                  from home directory");
               }
 
        try
               {
               initAccessSession();
               }
        catch(Exception e)
               {
               this.log("Encountered Initialization error", e);
               throw new ServletException(e.toString());
               }
     }
     /**
     * Cleanup method called when the servlet is unloaded from the Web Server
     */
     public void destroy()
   {
          // Release our session
          if ( ( accessEngine != null) && (accessSession != null))
               {
               accessEngine.IcloseSession(accessSession);
               accessEngine = null;
               accessSession = null;
               }
     }
 
     /*
     **  Utility method which creates an access session with InterChange Server. 
     **  If one has already been established then return that.
     **  @exception Exception when an error occurs while establishing
     **  the connection to InterChange Server.
     */
     private synchronized void initAccessSession() throws Exception
     {
          try 
               {
               /*
               **  If the access session has already been established then
               **  see if the session is still valid (i.e. InterChange 
               **  Server could have been rebooted since the last time
               **   we used the session).
               **  If it's not still valid, then open up a new one.
               */
               if (accessSession != null)
                    {
                    try {
                         accessSession.IcreateBusinessObject("");
                    } catch (ICxAccessError e) {
                         /*
                         ** Cached session is still valid. We expect 
                             to get this exception
                         */
                              return;
                    }
                    // Catch Corba SystemException
                    catch (org.omg.CORBA.SystemException se) {
                         /*
                          **  The session is invalid. 
                          **  Open a new one below
                          */
                         this.log("Re-establishing sessions to ICS");
                    }
                    }
               /**
               * Add the relevant IBM ORB properties to initialize the
               * IBM ORB.
               */
               Properties orbProperties = new java.util.Properties();
               orbProperties.setProperty("org.omg.CORBA.ORBClass",
                    "com.ibm.CORBA.iiop.ORB");
               orbProperties.setProperty("org.omg.CORBA.ORBSingletonClass",
                    "com.ibm.rmi.corba.ORBSingleton");
               org.omg.CORBA.ORB  orb =
                    org.omg.CORBA.ORB.init((String[])null, orbProperties);
               /*
               **  Use the file that contains the Internet Inter-Orb Reference.
               **  This object reference will be a serialized CORBA object 
               **  reference to the running Interchange Server that 
               **  we wish to talk to.
               */
               LineNumberReader input =
                    new LineNumberReader(new FileReader(iorFile));
               /*
               **  Create a memory resident CORBA object reference from the IOR
               **  in the file
               */
               org.omg.CORBA.Object object = orb.string_to_object
                  (input.readLine());
 
               /*
               **  Now create a real session with the running object
               */
               private IAccessEngine accessEngine accessEngine =
                    IAccessEngineHelper.narrow(object);
               Properties props = new Properties();
                    props.put("username","admin");
                    props.put("password","admin");
               IInterchangeAccessSession accessSession =
                    SecureLoginUtility.login(accessEngine,props);
               if (accessEngine == null)
                    throw new Exception("Unable to communicate with server 
                      " + serverName + " using IOR from " + iorFile);
 
               /*
               **  Now that we have an object reference to a running 
               **  server, we must authenticate ourselves before we 
               **  can get a session that is useful.
               */
               accessSession = accessEngine.IgetInterchangeAccessSession(
                    userName,
                    passWord);
SCM 
               Properties props = new Properties();
                   props.put("username","admin");
               /* 
               **  User must provide username here. 
               **  In this example "admin" is used as the username.
               */
               props.put("password","admin");
               /* 
               **  User must provide the corresponding password here. 
               **  In this example "admin" is used as the password.
               */
               accessSession = SecureLoginUtility.login(accessEngine ,
                     props); 
               /* 
               **  You must ensure that "Crossworlds.jar" is in the 
               **  ClassPath.
               **  Login Utility class named "SecureLoginUtility"
                   **  is provided along with "Crossworlds.jar".
               */
 
               if (accessSession == null)
                    throw new Exception("Invalid user name and password");
 
               }
          catch (Exception e)
               {
               this.log("Encountered orb Initialization error" , e);
               if (e instanceof org.omg.CORBA.SystemException)
                    throw new Exception(e.toString());
               else
                    throw e;
               }
     }
 
     /**
     * Get method called by the WebServer whenever a GET action 
     * is requested by an HTML page.
     * @param HttpServletRequest handle to the http request 
     * object@param HttpServletResponse handle to the http response 
     * object @exception ServletException is thrown when the servlet
     * encounters an error @exception is thrown when the 
     * Webserver cannot communicate to the calling
     * html page
     */
     public void doGet(HttpServletRequest req, HttpServletResponse res)
          throws ServletException, IOException
     {
          // String serializedHTMLQuote = null;
 
          // A BusinessObject to hold our incoming BO from the
          // requesting HTML page
          IBusinessObject aBO = null;
 
          // A BusinessObject to hold our resultant BO from the
          // result of the Collaboration execution
 
          IBusinessObject returnedQuoteBusObj = null;
 
          /*
          **  Make sure we have a valid access session with the interchange
          **  server first
          */
          try
               {
                initAccessSession();
               }
          catch(Exception e)
               {
                throw new ServletException
                   ("InitAccessSession Failed " + e.toString());
               }
 
          // Create a BO from the data provided by the HTML page
          try {
               aBO =
                    accessSession.IcreateBusinessObjectFrom
                      (req.getQueryString(),
                        mimeType);
          } catch (ICxAccessError e) {
                throw new ServletException
                  (" Creating Business Object Failed : " +
                    e.IerrorMessage);
          }
 
          if (aBO == null)
               {
                throw new ServletException("Attempting to use Null Bo ");
               }
          /*
          **  Execute the collaboration.  We'll get back a
          **  CrossWorlds business object that contains an ATP
          **  date for each item.
          */
          try
               {
               returnedQuoteBusObj = accessSession.IexecuteCollaboration(
                    "ATPExample","From", aBO);
               }
          catch(IExecuteCollaborationError ae)
               {
               String error = "Collaboration Error :
                    " + ae.IerrorMessage
                                  + ae.status;
               this.log("Collaboration Error", ae);
               throw new ServletException(error);
               }
          /*
          **  Now create a table to send back that has:
          **    ItemNumber    Quantity    Price
          */
          res.setContentType(mimeType);
          PrintWriter out = res.getWriter();
          out.println("<body>");
          out.println("<TABLE BORDER=\"1\">");
          out.println("<caption align=\"center\" > " +
               "<font face=e=\"Haettenschweiler\" size=\"7\">" +
               "Sales Quote Response</caption>");
 
          out.println("<TR> <TH>Item ID" +
               "<TH> Item Description"    +
               "<TH> Quantity " +
               "<TH> Item Price" +
               "<TH> Available Date " +
               "<TH> Total Price " +
               "</TH> </TR>");
          IBusinessObjectArray itemContainer = null;
          try {
               itemContainer =
                    returnedQuoteBusObj.
                     IgetBusinessObjectArrayAttribute
                      ("OrderItems");
          } catch (IInvalidAttributeTypeException e) {
               throw new ServletException(e.IerrorMessage);
          } catch (IInvalidAttributeNameException e) {
               throw new ServletException(e.IerrorMessage);
          } catch (IAttributeBlankException e) {
               throw new ServletException(e.IerrorMessage);
          } catch (IAttributeNotSetException e) {
               throw new ServletException(e.IerrorMessage);
          }
 
          // A subobject to hold each individual Item
          IBusinessObject item = null;
 
          int size = itemContainer.IgetSize();
          // Loop thru the array and print each item
          // separately
          String attr = null;
          int itemQuantity = 0;
          double itemPrice = 0;
          //Loop thru the array of returned items
          for (int i = 0;i < size; i++)
               {
               try
                    {
                    // Get the item BusinessObject at the 
                        current indexitem =
                        itemContainer.IgetBusinessObjectAtIndex(i);
                    if (item != null)
                         {
                         // Build a html table row beginning with ITemID
                         // attribute
                         try {
                              attr = item.IgetStringAttribute("ItemID");
                              out.print("<TR> <TD> " +
                                   attr +
                                   "</TD>" + "<TD>");
                              // We have printed the value, 
                              // set it to null again
                              attr = null;
                         } catch (IAttributeNotSetException e) {
                              attr = "N/A";
                              out.print("<TR> <TD> ");
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeNameException e) {
                                   attr = "N/A";
                                   out.print("<TR> <TD> ");
                                   out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeTypeException e) {
                              attr = "N/A";
                              out.print("<TR> <TD> ");
                              out.print(attr + "</TD>" + "<TD>");
                         }
                         // Get the ItemType attribute
                         try {
                              attr = item.IgetStringAttribute
                                ("itemType");
                              out.print(attr + "</TD>" + "<TD>");
                              // We have printed the value, 
                              // set it to null again
                              attr = null;
                         } catch (IAttributeNotSetException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeNameException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeTypeException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         }
                         // Get the orderQty Attribute
                         try {
                              attr = item.IgetStringAttribute
                                 ("orderQty");
                              try {
                                   itemQuantity = Integer.parseInt(attr);
                              } catch (NumberFormatException e) {
                                   itemQuantity = -1;
                              }
                              out.print(attr + "</TD>" + "<TD>");
                              // We have printed the value, 
                              // set it to null again
                              attr = null;
                         } catch (IAttributeNotSetException e) {
                              attr = "N/A";
                              itemQuantity = -1;
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeNameException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeTypeException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         }
                         // Get the ItemPrice attribute
                         try {
                              attr = item.IgetStringAttribute("itemPrice");
                              int indexOfDollar = attr.indexOf("$");
                              String priceToParse = null;
                              // Locate if we have "$" in the value
                              if (indexOfDollar == -1)
                                   priceToParse = attr;
                              else
                                   priceToParse = attr.substring
                                       (indexOfDollar + 1);
                              // Format the price so it looks like $NNNN.NN
                              try {
                                   itemPrice = Double.parseDouble

                                   (priceToParse);
                              } catch (NumberFormatException e) {
                                   itemPrice = -1;
                              }
                              out.print(attr + "</TD>" + "<TD>");
                              // We have printed the value, 
                                  set it to null again
                              attr = null;
                         } catch (IAttributeNotSetException e) {
                              attr = "N/A";
                              itemPrice = -1;
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeNameException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeTypeException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         }
                         // Get the ATPDate and print it
                         try {
                              attr = item.IgetStringAttribute("ATPDate");
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IAttributeNotSetException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeNameException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         } catch (IInvalidAttributeTypeException e) {
                              attr = "N/A";
                              out.print(attr + "</TD>" + "<TD>");
                         }
                         /*
                         **  Now print the total price for the item.
                         **  If we don't have sufficient information then
                         **  print N/A
                         */
                         if ((itemPrice == -1) || (itemQuantity == -1))
                              {
                              out.println(attr + "</TD>" + "<TD>");
                              // We have printed the value, 
                              // set it to null again
                              attr = null;
                              }
                         else
                              {
                              double totalPrice = itemQuantity 
                                * itemPrice;
                              out.println("$" + formatter.format
                                (totalPrice).trim()
                                   + "</TD>"
                                   + "<TD>");
                              }
                         } // end if (Item != null)
               } // End try
               catch (IAttributeBlankException e2) {
                    continue;
               } catch (IInvalidIndexException e) {
                    throw new ServletException(e.getMessage());
                       } finally {
                                  if (item != null)
                        accessSession.IreleaseBusinessObject(item);
                       }                  
          }// End for loop
     // Releasing business objects, ideally should be done in a
     // finally block so that 
             // in case of exceptions the business objects are released.
             if (itemContainer != null)
        accessSession.IreleaseBusinessObjectArray(itemContainer);
             if (returnedQuoteBusObj != null)
        accessSession.IreleaseBusinessObject(returnedQuoteBusObj);
             if (aBO != null)
                accessSession.IreleaseBusinessObject(aBO);
             // end release code
                 // Close the HTML table
     out.println("</TABLE>");
     // Finish the page body
     out.println("</body></html>");
     } // end do get
}

Copyright IBM Corp. 1997, 2004