サンプル Java コード -- ATP サーブレット

以下はサンプル ATP サーブレットです ("シナリオ"を参照)。

/**
  * @(#) 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 Business Integration Server Express and Express
                    Plus 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 Business
      **  Integration Server Express and Express Plus.
      **  If one has already been established then return that.
      **  @exception Exception when an error occurs while establishing
      **  the connection to Business Integration Server Express and Express Plus.
      */
      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 Visigenic ORB properties to initialize the
                * visigenic 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 Business Integration Server
                **  Express and Express Plus 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 get create a real session with the running object
                */
                accessEngine = IAccessEngineHelper.narrow(object);
                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);
                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());
                }
  
           }// End for loop
      // Close the HTML table
      out.println("</TABLE>");
      // Finish the page body
      out.println("</body></html>");
      } // end do get
 }
 

Copyright IBM Corp. 2004