Author: shankar
Date: Wed Feb 11 04:07:29 2009
New Revision: 743209
URL: http://svn.apache.org/viewvc?rev=743209&view=rev
Log:
PHP order processor added.
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/
incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/
incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/database_config.xml
incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/policy.xml
incubator/stonehenge/trunk/stocktrader/php/order_processor/data_access_layer.php
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/alice_cert.cert
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_cert.cert
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_key.pem
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor.php
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc.php
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc_msec.php
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl0
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd0
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd1
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd2
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/database_config.xml
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/database_config.xml?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/database_config.xml
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/database_config.xml
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,6 @@
+<config>
+ <server>127.0.0.1,1433</server>
+ <user>trade</user>
+ <password>trade</password>
+ <database>StockTraderDB</database>
+</config>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/policy.xml
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/policy.xml?rev=743209&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/policy.xml
(added)
+++ incubator/stonehenge/trunk/stocktrader/php/order_processor/conf/policy.xml
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,43 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <sp:SymmetricBinding
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+ <wsp:Policy>
+ <sp:ProtectionToken>
+ <wsp:Policy>
+ <sp:X509Token
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+ <wsp:Policy>
+ <sp:WssX509V3Token10/>
+ </wsp:Policy>
+ </sp:X509Token>
+ </wsp:Policy>
+ </sp:ProtectionToken>
+ <sp:AlgorithmSuite>
+ <wsp:Policy>
+ <sp:Basic256/>
+ </wsp:Policy>
+ </sp:AlgorithmSuite>
+ <sp:Layout>
+ <wsp:Policy>
+ <sp:Strict/>
+ </wsp:Policy>
+ </sp:Layout>
+ <sp:IncludeTimestamp/>
+ </wsp:Policy>
+ </sp:SymmetricBinding>
+ <sp:Wss10
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+ <wsp:Policy>
+ <sp:MustSupportRefKeyIdentifier/>
+ <sp:MustSupportRefEmbeddedToken/>
+ <sp:MustSupportRefIssuerSerial/>
+ </wsp:Policy>
+ </sp:Wss10>
+ <sp:SignedParts
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+ <sp:Body/>
+ </sp:SignedParts>
+ <sp:EncryptedParts
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+ <sp:Body/>
+ </sp:EncryptedParts>
+ </wsp:All>
+ </wsp:ExactlyOne>
+</wsp:Policy>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/data_access_layer.php
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/data_access_layer.php?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/data_access_layer.php
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/data_access_layer.php
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,123 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * This class encapsulates information regarding the establishment
+ * of database connection.
+ */
+
+class ConnectionInfo
+{
+ public $server; //The database server (eg: 127.0.0.1:1433)
+ public $user; //User name
+ public $password; //Password
+ public $database; //Database name
+}
+
+/**
+ * The method retrieves information for the database connection
+ * from a configuration file. The name of the config file should
+ * be, database_config.xml, and it should be in the same directory
+ * as this file.
+ * @return non NULL value (ConnectionInfo object), upon successfull
+ * execution, and NULL if some information regarding the
+ * connection is not available.
+ */
+
+function GetConnectionInfo()
+{
+ $doc = new DOMDocument();
+ $result = $doc->load('database_config.xml');
+
+ $server = $doc->getElementsByTagName("server")->item(0)->nodeValue;
+ $user = $doc->getElementsByTagName("user")->item(0)->nodeValue;
+ $password = $doc->getElementsByTagName("password")->item(0)->nodeValue;
+ $database = $doc->getElementsByTagName("database")->item(0)->nodeValue;
+
+ if ($server == NULL || $user == NULL || $password == NULL || $database
== NULL)
+ {
+ error_log ("SERVER, USER, PASSWORD OR DATABASE IS NULL\n");
+ }
+ else
+ {
+ $ConnInfo = new ConnectionInfo();
+ $ConnInfo->server = $server;
+ $ConnInfo->user = $user;
+ $ConnInfo->password = $password;
+ $ConnInfo->database = $database;
+ }
+ return $ConnInfo;
+}
+
+/**
+ * This method establishes a connection to the database.
+ * @return dbhandle, upon successfull execution a non null
+ * handle to the database connection is returned. Else it
+ * will be null.
+ */
+
+function ConnectToDatabase()
+{
+ $connInfo = GetConnectionInfo();
+ if ($connInfo != NULL)
+ {
+ $dbhandle = mssql_connect($connInfo->server, $connInfo->user,
$connInfo->password)
+ or die ("Couldn't connect to the server!!!");
+ $selected = mssql_select_db($connInfo->database, $dbhandle)
+ or die ("Couldn't open the database!!!");
+ }
+ return $dbhandle;
+}
+
+/**
+ * This method executes a query that it receives.
+ * @param query the query to execute
+ * @return non-NULL upon success and NULL otherwise.
+ */
+
+function ExecuteQuery($query)
+{
+ return mssql_query($query);
+}
+
+/**
+ * This method close the connection that is established to the
+ * database.
+ * @param dbhandle handle to the database
+ */
+
+function CloseDatabase($dbhandle)
+{
+ mssql_close($dbhandle);
+}
+
+/**
+ * This method returns the a value from a mssql result set (a tuple
+ * returned after execution of ExecuteQuery method.
+ * @param result, the result obtained from ExecuteQuery method.
+ * @param raw, the raw number
+ * @param column, the column number
+ * @return the value at (raw, column) of the tuple.
+ */
+
+function GetMSSQLValue($result, $raw, $column)
+{
+ return mssql_result($result, $raw, $column);
+}
+?>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/alice_cert.cert
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/alice_cert.cert?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/alice_cert.cert
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/alice_cert.cert
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIQM6YEf7FVYx/tZyEXgVComTANBgkqhkiG9w0BAQUFADAw
+MQ4wDAYDVQQKDAVPQVNJUzEeMBwGA1UEAwwVT0FTSVMgSW50ZXJvcCBUZXN0IENB
+MB4XDTA1MDMxOTAwMDAwMFoXDTE4MDMxOTIzNTk1OVowQjEOMAwGA1UECgwFT0FT
+SVMxIDAeBgNVBAsMF09BU0lTIEludGVyb3AgVGVzdCBDZXJ0MQ4wDAYDVQQDDAVB
+bGljZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoqi99By1VYo0aHrkKCNT
+4DkIgPL/SgahbeKdGhrbu3K2XG7arfD9tqIBIKMfrX4Gp90NJa85AV1yiNsEyvq+
+mUnMpNcKnLXLOjkTmMCqDYbbkehJlXPnaWLzve+mW0pJdPxtf3rbD4PS/cBQIvtp
+jmrDAU8VsZKT8DN5Kyz+EZsCAwEAAaOBkzCBkDAJBgNVHRMEAjAAMDMGA1UdHwQs
+MCowKKImhiRodHRwOi8vaW50ZXJvcC5iYnRlc3QubmV0L2NybC9jYS5jcmwwDgYD
+VR0PAQH/BAQDAgSwMB0GA1UdDgQWBBQK4l0TUHZ1QV3V2QtlLNDm+PoxiDAfBgNV
+HSMEGDAWgBTAnSj8wes1oR3WqqqgHBpNwkkPDzANBgkqhkiG9w0BAQUFAAOCAQEA
+BTqpOpvW+6yrLXyUlP2xJbEkohXHI5OWwKWleOb9hlkhWntUalfcFOJAgUyH30TT
+pHldzx1+vK2LPzhoUFKYHE1IyQvokBN2JjFO64BQukCKnZhldLRPxGhfkTdxQgdf
+5rCK/wh3xVsZCNTfuMNmlAM6lOAg8QduDah3WFZpEA0s2nwQaCNQTNMjJC8tav1C
+Br6+E5FAmwPXP7pJxn9Fw9OXRyqbRA4v2y7YpbGkG2GI9UvOHw6SGvf4FRSthMMO
+35YbpikGsLix3vAsXWWi4rwfVOYzQK0OFPNi9RMCUdSH06m9uLWckiCxjos0FQOD
+ZE9l4ATGy9s9hNVwryOJTw==
+-----END CERTIFICATE-----
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_cert.cert
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_cert.cert?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_cert.cert
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_cert.cert
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDCjCCAfKgAwIBAgIQYDju2/6sm77InYfTq65x+DANBgkqhkiG9w0BAQUFADAw
+MQ4wDAYDVQQKDAVPQVNJUzEeMBwGA1UEAwwVT0FTSVMgSW50ZXJvcCBUZXN0IENB
+MB4XDTA1MDMxOTAwMDAwMFoXDTE4MDMxOTIzNTk1OVowQDEOMAwGA1UECgwFT0FT
+SVMxIDAeBgNVBAsMF09BU0lTIEludGVyb3AgVGVzdCBDZXJ0MQwwCgYDVQQDDANC
+b2IwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMCquMva4lFDrv3fXQnKK8Ck
+SU7HvVZ0USyJtlL/yhmHH/FQXHyYY+fTcSyWYItWJYiTZ99PAbD+6EKBGbdfuJNU
+JCGaTWc5ZDUISqM/SGtacYe/PD/4+g3swNPzTUQAIBLRY1pkr2cm3s5Ch/f+mYVN
+BR41HnBeIxybw25kkoM7AgMBAAGjgZMwgZAwCQYDVR0TBAIwADAzBgNVHR8ELDAq
+MCiiJoYkaHR0cDovL2ludGVyb3AuYmJ0ZXN0Lm5ldC9jcmwvY2EuY3JsMA4GA1Ud
+DwEB/wQEAwIEsDAdBgNVHQ4EFgQUXeg55vRyK3ZhAEhEf+YT0z986L0wHwYDVR0j
+BBgwFoAUwJ0o/MHrNaEd1qqqoBwaTcJJDw8wDQYJKoZIhvcNAQEFBQADggEBAIiV
+Gv2lGLhRvmMAHSlY7rKLVkv+zEUtSyg08FBT8z/RepUbtUQShcIqwWsemDU8JVts
+ucQLc+g6GCQXgkCkMiC8qhcLAt3BXzFmLxuCEAQeeFe8IATr4wACmEQE37TEqAuW
+EIanPYIplbxYgwP0OBWBSjcRpKRAxjEzuwObYjbll6vKdFHYIweWhhWPrefquFp7
+TefTkF4D3rcctTfWJ76I5NrEVld+7PBnnJNpdDEuGsoaiJrwTW3Ixm40RXvG3fYS
+4hIAPeTCUk3RkYfUkqlaaLQnUrF2hZSgiBNLPe8gGkYORccRIlZCGQDEpcWl1Uf9
+OHw6fC+3hkqolFd5CVI=
+-----END CERTIFICATE-----
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_key.pem
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_key.pem?rev=743209&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_key.pem
(added)
+++ incubator/stonehenge/trunk/stocktrader/php/order_processor/keys/bob_key.pem
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXgIBAAKBgQDAqrjL2uJRQ679310JyivApElOx71WdFEsibZS/8oZhx/xUFx8
+mGPn03EslmCLViWIk2ffTwGw/uhCgRm3X7iTVCQhmk1nOWQ1CEqjP0hrWnGHvzw/
++PoN7MDT801EACAS0WNaZK9nJt7OQof3/pmFTQUeNR5wXiMcm8NuZJKDOwIDAQAB
+AoGBAL9MxBAlVXG68pXAonCF/MtaVC+Uw7qD49WFJzNiJxkRwfWpBSvxY8FbgJP0
+/Addkgb51bk0iUlk0Ni3twEMWga0j9jOJLkDDoXfpHmH5HGTvNa9m241PGQ+kzAU
+dFvFzR0qUTDlBjk4pYoeqoJBTgNZGu3b3BHEbz7O7PAJUQEBAkEA8Rwrf7/pSiPH
+2pfU5StQ77+1Uva5VHpDoKLC5mgAgiPvQm2yBBSXkwPwXHEeRYEOfHydtCrudQY3
+6fVP4Oy1GQJBAMyQsI6CIjEwZzS1KXLb+ulpFBjcK99PydBGKxRue/o0ZpD69siA
+AL4YqyXl4Ai4hEHHe7FxeJe4Wzp6F0A6kXMCQQCpC8QfzHEHTzDnPP7CMm2LupCp
++1wTM6nIrXUS0CZTGFi+7WQbYkinheJ3HcRInOSIOWLkmBkaKWL4gMshezS5AkB8
+1G5pCBBFY/wWtdYtOP/MH0scQH6lLtNAPRFczm7pJ8DPB9ZAU5wgZH1MCxLDP5W1
+bj2U8mFcdCt3a7l0gEjxAkEAwoWqq6i7ZfFg4LUcKElZhjMeF8tKs1fWHhunO80t
+6hQUhBHahc4+AAgoXOMe+KAxa+F6uftjM9eg8rAAZ+6q3g==
+-----END RSA PRIVATE KEY-----
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor.php
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor.php?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor.php
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor.php
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,523 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+require_once ("data_access_layer.php");
+
+define ("ORDER_TYPE_BUY", "buy");
+define ("ORDER_TYPE_SELL", "sell");
+define ("ORDER_STATUS_CLOSED", "closed");
+define ("STATUS_SUCCESS", 1); //This represents a success status.
+define ("STATUS_FAILURE", 0); //This represents a failure status.
+define ("INVALID_ID", -1); //Since Account ID 0 is valid, we used -1
+ //to
denote invalid
+
+/**
+ * This class encapsulates information regarding an order object.
+ */
+
+class OrderDataBean
+{
+ public $orderID; // int
+ public $orderType; // string (buy | sell)
+ public $orderStatus; // string (closed | completed | open)
+ public $openDate; // dateTime
+ public $completionDate; // dateTime
+ public $quantity; // double
+ public $price; // decimal
+ public $orderFee; // decimal
+ public $symbol; // string
+}
+
+/**
+ * This class encapsulates an order object, and it contains information
+ * regarding a SubmitOrder request.
+ */
+
+class SubmitOrder
+{
+ public $order; // OrderDataBean
+}
+
+/**
+ * This class encapsulates information regarding a particular holding.
+ * Each buy order creates a holding object and stores an entry in the
+ * holding table.
+ */
+
+class Holding
+{
+ public $purchasePrice; //decimal
+ public $holdingID; //int
+ public $quantity; //double
+ public $purchaseDate; //dateTime
+ public $accountID; //string
+ public $quoteSymbol; //string
+}
+
+/**
+ * This class encapsulate information regarding a particular quote. The
+ * quote information related to a particular symbol, have to be analyzed
+ * in order to process an order.
+ */
+
+class Quote
+{
+ public $low; //decimal
+ public $open1; //decimal
+ public $volume; //double
+ public $price; //decimal
+ public $high; //decimal
+ public $symbol; //string
+ public $change1; //decimal
+}
+
+/**
+ * This is the primary function which corresponds to the SubmitOrder
+ * operation.
+ */
+
+function ProcessOrder($order)
+{
+ $status = STATUS_SUCCESS;
+ $dbhandle = ConnectToDatabase();
+
+ /*This method with "BEGIN TRAN" initialize a transaction; which
privides
+ control so that later we can cancel a the transaction, if something
+ goes wrong.*/
+
+ $status = ExecuteQuery("BEGIN TRAN");
+ if ($status)
+ {
+ $quote = GetQuoteForUpdate($order->symbol);
+ if ($quote)
+ {
+ $order->price = $quote->price;
+
+ /*Buy or sell orders either first creates a holding or
sell a
+ holding. The return value is the holdingID upon
success. If NULL
+ is returned, then the tranaction can not be completed.
This is due
+ to either problem of accessing the database or if there
is no
+ maching holding.*/
+
+ /*upon success, total price should be deducted from
account's balance.
+ In case of sell, balance should increase. So, in sell
case, total price will be
+ negative value */
+
+ if ($order->orderType == ORDER_TYPE_BUY)
+ {
+ $holdingID = CreateHolding($order);
+ if ($holdingID != INVALID_ID)
+ {
+ $totalPrice =
+ $order->quantity *
$order->price + $order->orderFee;
+ }
+ }
+ if ($order->orderType == ORDER_TYPE_SELL)
+ {
+ $holdingID = SellHolding($order);
+ if ($holdingID != INVALID_ID)
+ {
+ $totalPrice = -1 * $order->quantity *
$order->price +
+ $order->orderFee;
+ }
+ }
+
+ if ($holdingID != INVALID_ID)
+ {
+ $status = UpdateSystemStatus($order,
+ $quote, $holdingID, $totalPrice);
+ }
+ else
+ {
+ error_log ("Holding id for order with order id
".$order->orderID. " is not valid\n");
+ $status = STATUS_FAILURE;
+ }
+ }
+ else
+ {
+ error_log ("Cannot get quote with symbol
".$order->symbol. "\n");
+ $status = STATUS_FAILURE;
+ }
+
+ }
+ if ($status == STATUS_SUCCESS)
+ {
+ /*Transaction is successfull, we can safely commit the
transaction
+ into the database.*/
+
+ ExecuteQuery("COMMIT TRAN");
+ }
+ else
+ {
+ /*Transaction is not successfull, we can safely rollback the
+ transaction without commiting to the database.*/
+
+ ExecuteQuery("ROLLBACK TRAN");
+ }
+ CloseDatabase($dbhandle);
+}
+
+/**
+ * This method, retrieves all the information related to a particular symbol
+ * from the QUOTE table.
+ * @param symbol is the symbol we are looking for
+ * @return quote object filled with symbol information upons success and else
+ * NULL is returned.
+ */
+
+function GetQuoteForUpdate($symbol)
+{
+ $query = "Set NOCOUNT ON; SELECT SYMBOL, COMPANYNAME, VOLUME, PRICE, ".
+ "OPEN1, LOW, HIGH, CHANGE1 FROM QUOTE WITH (NOLOCK) WHERE
SYMBOL ".
+ "= '$symbol'";
+
+ /*Get the tuple corresponding to the particular symbol*/
+
+ $result = ExecuteQuery($query);
+ if ($result)
+ {
+ $quote = new Quote();
+ $quote->symbol = GetMSSQLValue($result, 0, 0); //Get the
symbol.
+ $quote->price = GetMSSQLValue($result, 0, 3); //Get the price.
+ $quote->low = GetMSSQLValue($result, 0, 5); //Get the low value.
+ $quote->high = GetMSSQLValue($result, 0, 6); //Get the high
value.
+ }
+ return $quote;
+}
+
+/**
+ * This method updates all the system information relates to a particular
+ * buy or sell operation.
+ * @param order order object
+ * @param quote quote object
+ * @param holdingID holdingID of the holding which relates to the current order
+ * @param totalPrice the price change (amount of money the flows in/out of a
+ * user's account).
+ * @return STATUS_SUCCESS upon success and STATUS_FAILURE otherwise.
+ */
+
+function UpdateSystemStatus($order, $quote, $holdingID, $totalPrice)
+{
+ $status = STATUS_SUCCESS;
+ $accountID = GetAccountIDFromOrder($order);
+ if ($accountID != INVALID_ID)
+ {
+ if(UpdateAccountBalance($accountID, $totalPrice))
+ {
+ if(UpdateStockPriceVolume($order->quantity, $quote))
+ {
+ if(!CloseOrder($order, $holdingID))
+ {
+ error_log ("Cannot close order for
order id ". $order->orderID. " \n");
+ $status = STATUS_FAILURE;
+ }
+ }
+ else
+ {
+ error_log ("Cannot update stock price volume
for symbol ". $quote->symbol. "\n");
+ $status = STATUS_FAILURE;
+ }
+ }
+ else
+ {
+ error_log ("Cannot update account balace for account id
".$accountID. "\n");
+ $status = STATUS_FAILURE;
+ }
+ }
+ else
+ {
+ error_log ("Account id for order id " .$order->orderID. " is
not valid \n");
+ $status = STATUS_FAILURE;
+ }
+ return $status;
+}
+
+/**
+ * This function corresponds to a sell operation. It matches a particular
+ * holding related to a particular order (symbol) and then do the transaction
+ * @param order order object
+ * @return a non NULL holdingID upon success and NULL otherwise.
+ */
+
+function SellHolding($order)
+{
+ $holding = GetHoldingForUpdate($order);
+ if ($holding)
+ {
+ $accountID = $holding->accountID;
+ $quantity = $order->quantity;
+ $holdingQuantity = $holding->quantity;
+
+ if ($order->quantity < $holding->quantity)
+ {
+ if(!UpdateHolding($holding, $order->quantity))
+ {
+ error_log ("Cannot update holding with holding
id ".$holding->holdingID. " \n");
+ $holding->holdingID = INVALID_ID;
+ }
+ }
+ else if ($order->quantity == $holding->quantity)
+ {
+ if(!DeleteHolding($holding))
+ {
+ error_log ("Cannot delete holding with holding
id ".$holding->holdingID. " \n");
+ $holding->holdingID = INVALID_ID;
+ }
+ }
+ else
+ {
+ if(!DeleteHolding($holding))
+ {
+ error_log ("Cannot delete holding with holding
id ".$holding->holdingID. " \n");
+ $holding->holdingID = INVALID_ID;
+ }
+ else
+ {
+ $order->quantity = $holding->quantity;
+ if(!UpdateOrder($order))
+ {
+ error_log ("Cannot update order with
order id ".$order->orderID. " \n");
+ $holding->holdingID = INVALID_ID;
+ }
+ }
+ }
+ }
+ else
+ {
+ error_log ("Holding for order id ".$order->orderID. " is not
valid \n");
+ return INVALID_ID;
+ }
+ return $holding->holdingID;
+}
+
+/**
+ * This method updates the status of an order as a result of a buy or sell
+ * operation.
+ * @param order order object
+ * @return NON-NULL on success and NULL on failure.
+ */
+
+function UpdateOrder($order)
+{
+ $query = "UPDATE ORDERS WITH (ROWLOCK) SET QUANTITY='$order->quantity'
WHERE".
+ " ORDERID='$order->orderID'";
+ return ExecuteQuery($query);
+}
+
+/**
+ * This method updates a particular Holing entry in the HOLDING table.
+ * @param holding is the holding object.
+ * @param quantity is the amount of buy or sell.
+ * $return NON-NULL on success or NULL otherwise.
+ */
+
+function UpdateHolding($holding, $quantity)
+{
+ $query = "UPDATE HOLDING WITH (ROWLOCK) SET
QUANTITY=QUANTITY-'$quantity'".
+ " WHERE HOLDINGID='$holding->holdingID'";
+ return ExecuteQuery($query);
+}
+
+/**
+ * Removes an entry from the HOLDING table when a matching order is received.
+ * @param holding is a holding object.
+ * @return NON-NULL value on success and NULL otherwise.
+ */
+
+function DeleteHolding($holding)
+{
+ $query = "DELETE FROM HOLDING WITH (ROWLOCK) WHERE ".
+ "HOLDINGID='$holding->holdingID'";
+ return ExecuteQuery($query);
+}
+
+/**
+ * This method returns a quote object which matches to the particular sell
+ * order.
+ * @param order the order object.
+ * @return a Holding object upon success and NULL otherwise.
+ */
+
+function GetHoldingForUpdate($order)
+{
+ $query = "Set NOCOUNT ON; SELECT HOLDING.HOLDINGID,
HOLDING.ACCOUNT_ACCOUNTID,".
+ " HOLDING.QUANTITY, HOLDING.PURCHASEPRICE,
HOLDING.PURCHASEDATE,".
+ " HOLDING.QUOTE_SYMBOL FROM HOLDING WITH (ROWLOCK) INNER JOIN
ORDERS".
+ " ON HOLDING.HOLDINGID = ORDERS.HOLDING_HOLDINGID WHERE ".
+ "(ORDERS.ORDERID = '$order->orderID')";
+
+ /*Get the machining tuple from HOLDING table, that corresponds to the
+ current sell operation.*/
+
+ $result = ExecuteQuery($query);
+
+ if ($result)
+ {
+ $holding = new Holding();
+ $holding->holdingID = GetMSSQLValue($result, 0, 0); //Get the
holdingID.
+ $holding->accountID = GetMSSQLValue($result, 0, 1); //Get the
accountID.
+ $holding->quantity = GetMSSQLValue($result, 0, 2); //Get the
quantity.
+ $holding->purchasePrice = GetMSSQLValue($result, 0, 3); //Get
the price.
+ $holding->purchaseDate = GetMSSQLValue($result, 0, 4); //Get
the date.
+ $holding->quoteSymbol = GetMSSQLValue($result, 0, 5); //Get the
symbol.
+ }
+ else
+ {
+ error_log ("Cannot obtain holding for order id ".
$order->orderID . "\n");
+ }
+ return $holding;
+}
+
+/**
+ * This method updates the order status, with newest settings on completion
+ * of processing an order.
+ * @param order order object.
+ * @param holdingID holdingID of the particular holding.
+ * @return NON-NULL on success and NULL on failure.
+ */
+
+function CloseOrder($order, $holdingID)
+{
+ $order->orderStatus = ORDER_STATUS_CLOSED;
+ if ($order->orderType == ORDER_TYPE_SELL)
+ {
+ $holdingID = NULL;
+ }
+ $query = "UPDATE ORDERS WITH (ROWLOCK) SET ".
+ "ORDERSTATUS='".ORDER_STATUS_CLOSED."',".
+ " COMPLETIONDATE=GetDate(), HOLDING_HOLDINGID='$holdingID',".
+ " PRICE='$order->price' WHERE ORDERID='$order->orderID'";
+ return ExecuteQuery($query);
+}
+
+/**
+ * Create an entry in the HOLDING table to represent a particular buy order.
+ * @param order order object filled with order information.
+ * @return the holdingID of the created holding upon success and else it
+ * returns NULL
+ */
+
+function CreateHolding($order)
+{
+ $accountID = GetAccountIDFromOrder($order);
+ if ($accountID != INVALID_ID)
+ {
+ $query = "INSERT INTO HOLDING (PURCHASEPRICE, QUANTITY,
PURCHASEDATE,".
+ " ACCOUNT_ACCOUNTID, QUOTE_SYMBOL) VALUES
('$order->price',".
+ " '$order->quantity', GetDate(), '$accountID',
'$order->symbol');".
+ " SELECT ID=@@IDENTITY";
+ $result = ExecuteQuery($query);
+ if ($result)
+ {
+ $holdingID = GetMSSQLValue($result, 0, 0);
+ }
+ else
+ {
+ error_log ("Cannot create holding for order id ".
$order->orderID . "\n");
+ $holdingID = INVALID_ID;
+ }
+ }
+ else
+ {
+ error_log ("Account id for order with order id
".$order->orderID. " is not valid\n");
+ $holdingID = INVALID_ID;
+ }
+ return $holdingID;
+}
+
+/**
+ * This method retrieves the acccountID from a given order.
+ * @param order the order object.
+ * @return NON-NULL accountID upon success and NULL otherwise.
+ */
+
+function GetAccountIDFromOrder($order)
+{
+ $query = "Set NOCOUNT ON; SELECT ACCOUNT_ACCOUNTID FROM ORDERS WITH ".
+ "(NOLOCK) WHERE ORDERID='$order->orderID'";
+
+ /*Get a tuple including accountID for a particular order*/
+
+ $result = ExecuteQuery($query);
+ if ($result != NULL)
+ {
+ $accountID = GetMSSQLValue($result, 0, 0); //Get accountID.
+ }
+ else
+ {
+ error_log ("Cannot obtain account id for order with order id
".$order->orderID. "\n");
+ $accountID = INVALID_ID;
+ }
+ return $accountID;
+}
+
+/**
+ * This method updates the account balance of the user who buy or sell some
+ * sybmol.
+ * @param accountID is the account to be updated.
+ * @param amount the amount of money by which the account is updated.
+ * @return NON-NULL upon success and NULL on failure.
+ */
+
+function UpdateAccountBalance($accountID, $amount)
+{
+ $query = "UPDATE ACCOUNT WITH (ROWLOCK) SET BALANCE=(BALANCE -
'$amount')".
+ " WHERE ACCOUNTID = '$accountID'";
+ return ExecuteQuery($query);
+}
+
+/**
+ * This method updates the QUOTE table with the new price values. In here, a
+ * random value is generated which is between 0.1 and 2, and then the quote
+ * price is changed by multiplying it with the generted random value.
+ * @param quantity the quantity of a particular symbol the client buy or sell.
+ * @return STATUS_SUCCESS upon success and STATUS_FAILURE upon failure.
+ */
+
+function UpdateStockPriceVolume($quantity, $quote)
+{
+ if ($quote)
+ {
+ $rand = rand(1, 20);
+ $priceChangeFactor = ((float)$rand)/10;
+ $quote->price = $quote->price * $priceChangeFactor;
+
+ if($quote->price < 0.05 || $quote->price > 1000)
+ {
+ $quote->price = 100;
+ }
+
+ if ($quote->price < $quote->low)
+ {
+ $quote->low = $quote->price;
+ }
+ if ($quote->price > $quote->high)
+ {
+ $quote->high = $quote->price;
+ }
+
+ $query = "UPDATE QUOTE WITH (ROWLOCK) SET
PRICE='$quote->price', ".
+ "LOW='$quote->low', HIGH='$quote->high',
CHANGE1='$quote->price' - ".
+ "OPEN1, VOLUME=VOLUME+'$quantity' WHERE
SYMBOL='$quote->symbol'";
+
+ $status = ExecuteQuery($query);
+ }
+ return $status;
+}
+?>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc.php
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc.php?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc.php
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc.php
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,100 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once ("order_processor.php");
+
+// define the class map
+$class_map = array("anyType" => "anyType", "OrderDataBean" => "OrderDataBean",
+ "SubmitOrder" => "SubmitOrder", "isOnline" => "isOnline");
+
+class isOnline
+{
+}
+
+
+/**
+ * This method corresponds to the primary operation of the service.It processes
+ * an incomming order object.
+ * @param input, the order object, filled with data correspond to an order
+ * @return accept upon success.
+ */
+
+function SubmitOrder($input)
+{
+ SendAcceptNotification();
+ if ($input->order != NULL)
+ {
+ if(($input->order->orderType == ORDER_TYPE_BUY) ||
+ ($input->order->orderType == ORDER_TYPE_SELL))
+ {
+ ProcessOrder($input->order);
+ }
+ else
+ {
+ error_log ("Incoming order type is incorrect.\n");
+ }
+ }
+ else
+ {
+ error_log ("Incoming order request is NULL.\n");
+ }
+}
+
+/**
+ * This method obtains some additional time and let the business service
+ * to store information regarding an order. Then the OrderProcessor can
+ * continue processing the order request that was just stored in the
+ * database.
+ */
+
+function SendAcceptNotification()
+{
+ header('HTTP/1.1 202 Accepted');
+ header('Content-Length: 0');
+ flush();
+ sleep(1);
+}
+
+/**
+ * This function corresponds to the isOnline operation. This is used by the
+ * Configuration service to make sure that the OrderProcessor service is
+ * online.
+ * @return just a return is expected to make sure the service is online.
+ */
+
+function isOnline($input)
+{
+ return;
+}
+
+// define the operations map
+$operations = array("SubmitOrder" => "SubmitOrder", "isOnline" => "isOnline");
+
+// define the actions => operations map
+$actions = array("SubmitOrderOnePhase" => "SubmitOrder",
+ "isOnline" => "isOnline");
+
+// create service in WSDL mode
+$service = new WSService(array ("wsdl" =>"./wsdl/TradeOrders.wsdl",
+ "operations" => $operations,
+ "actions" => $actions,
+ "classmap" => $class_map,));
+
+// process client requests and reply
+$service->reply();
+?>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc_msec.php
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc_msec.php?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc_msec.php
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/order_processor_svc_msec.php
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,108 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once ("order_processor.php");
+
+// define the class map
+$class_map = array("anyType" => "anyType", "OrderDataBean" => "OrderDataBean",
+ "SubmitOrder" => "SubmitOrder", "isOnline" => "isOnline");
+
+class isOnline
+{
+}
+
+
+/**
+ * This method corresponds to the primary operation of the service.It processes
+ * an incomming order object.
+ * @param input, the order object, filled with data correspond to an order
+ * @return accept upon success.
+ */
+
+function SubmitOrder($input)
+{
+ SendAcceptNotification();
+ if ($input->order != NULL)
+ {
+ if(($input->order->orderType == ORDER_TYPE_BUY) ||
+ ($input->order->orderType == ORDER_TYPE_SELL))
+ {
+ ProcessOrder($input->order);
+ }
+ else
+ {
+ error_log ("Incoming order type is incorrect.\n");
+ }
+ }
+ else
+ {
+ error_log ("Incoming order request is NULL.\n");
+ }
+}
+
+/**
+ * This method obtains some additional time and let the business service
+ * to store information regarding an order. Then the OrderProcessor can
+ * continue processing the order request that was just stored in the
+ * database.
+ */
+
+function SendAcceptNotification()
+{
+ header('HTTP/1.1 202 Accepted');
+ header('Content-Length: 0');
+ flush();
+ sleep(1);
+}
+
+/**
+ * This function corresponds to the isOnline operation. This is used by the
+ * Configuration service to make sure that the OrderProcessor service is
+ * online.
+ * @return just a return is expected to make sure the service is online.
+ */
+
+function isOnline($input)
+{
+ return;
+}
+
+// define the operations map
+$operations = array("SubmitOrder" => "SubmitOrder", "isOnline" => "isOnline");
+
+// define the actions => operations map
+$actions = array("SubmitOrderOnePhase" => "SubmitOrder",
+ "isOnline" => "isOnline");
+
+//This is the security information
+$pvt_key = ws_get_key_from_file("./keys/bob_key.pem");
+$policy_xml = file_get_contents("./conf/policy.xml");
+$policy = new WSPolicy($policy_xml);
+$sec_token = new WSSecurityToken(array("privateKey" => $pvt_key));
+
+// create service in WSDL mode
+$service = new WSService(array ("wsdl" =>"./wsdl/TradeOrders.wsdl",
+ "operations" => $operations,
+ "actions" => $actions,
+ "policy" => $policy,
+ "securityToken" => $sec_token,
+ "classmap" => $class_map,));
+
+// process client requests and reply
+$service->reply();
+?>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions name="OrderProcessor"
targetNamespace="http://Trade.TraderOrderHost"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
xmlns:tns="http://Trade.TraderOrderHost"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:i0="http://Trade.TraderOrderHost"
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsa10="http://www.w3.org/2005/08/addressing"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"
>
+ <wsp:Policy wsu:Id="NetMsmqBinding_OrderProcessorService_policy">
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <msb:BinaryEncoding
xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1"/>
+ <wsaw:UsingAddressing/>
+ </wsp:All>
+ </wsp:ExactlyOne>
+ </wsp:Policy>
+ <wsp:Policy wsu:Id="NetMsmqBinding_OrderProcessorService1_policy">
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <msb:BinaryEncoding
xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1"/>
+ <msmq:MsmqVolatile
xmlns:msmq="http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq"/>
+ <msmq:MsmqBestEffort
xmlns:msmq="http://schemas.microsoft.com/ws/06/2004/mspolicy/msmq"/>
+ <wsaw:UsingAddressing/>
+ </wsp:All>
+ </wsp:ExactlyOne>
+ </wsp:Policy>
+ <wsp:Policy wsu:Id="CustomBinding_OrderProcessorService_policy">
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <ow:OneWay
xmlns:ow="http://schemas.microsoft.com/ws/2005/05/routing/policy"/>
+ <msb:BinaryEncoding
xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1"/>
+ <wsaw:UsingAddressing/>
+ </wsp:All>
+ </wsp:ExactlyOne>
+ </wsp:Policy>
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://Trade.TraderOrderHost/Imports">
+ <xsd:import schemaLocation="TradeOrders.xsd0"
namespace="http://Trade.TraderOrderHost"/>
+ <xsd:import schemaLocation="TradeOrders.xsd1"
namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
+ <xsd:import schemaLocation="TradeOrders.xsd2"
namespace="http://trade.samples.websphere.ibm.com"/>
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message
name="OrderProcessorService_SubmitOrderTransactedQueue_InputMessage">
+ <wsdl:part name="parameters" element="tns:SubmitOrderTransactedQueue"/>
+ </wsdl:message>
+ <wsdl:message name="OrderProcessorService_SubmitOrder_InputMessage">
+ <wsdl:part name="parameters" element="tns:SubmitOrder"/>
+ </wsdl:message>
+ <wsdl:message name="OrderProcessorService_isOnline_InputMessage">
+ <wsdl:part name="parameters" element="tns:isOnline"/>
+ </wsdl:message>
+ <wsdl:portType name="OrderProcessorService">
+ <wsdl:operation name="SubmitOrderTransactedQueue">
+ <wsdl:input wsaw:Action="SubmitOrder"
message="tns:OrderProcessorService_SubmitOrderTransactedQueue_InputMessage"/>
+ </wsdl:operation>
+ <wsdl:operation name="SubmitOrder">
+ <wsdl:input wsaw:Action="SubmitOrderOnePhase"
message="tns:OrderProcessorService_SubmitOrder_InputMessage"/>
+ </wsdl:operation>
+ <wsdl:operation name="isOnline">
+ <wsdl:input wsaw:Action="isOnline"
message="tns:OrderProcessorService_isOnline_InputMessage"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="BasicHttpBinding_OrderProcessorService"
type="i0:OrderProcessorService">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="SubmitOrderTransactedQueue">
+ <soap:operation soapAction="SubmitOrder" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="SubmitOrder">
+ <soap:operation soapAction="SubmitOrderOnePhase" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="isOnline">
+ <soap:operation soapAction="isOnline" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="NetMsmqBinding_OrderProcessorService"
type="i0:OrderProcessorService">
+ <wsp:PolicyReference URI="#NetMsmqBinding_OrderProcessorService_policy"/>
+ <soap12:binding transport="http://schemas.microsoft.com/soap/msmq"/>
+ <wsdl:operation name="SubmitOrderTransactedQueue">
+ <soap12:operation soapAction="SubmitOrder" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="SubmitOrder">
+ <soap12:operation soapAction="SubmitOrderOnePhase" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="isOnline">
+ <soap12:operation soapAction="isOnline" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="NetMsmqBinding_OrderProcessorService1"
type="i0:OrderProcessorService">
+ <wsp:PolicyReference URI="#NetMsmqBinding_OrderProcessorService1_policy"/>
+ <soap12:binding transport="http://schemas.microsoft.com/soap/msmq"/>
+ <wsdl:operation name="SubmitOrderTransactedQueue">
+ <soap12:operation soapAction="SubmitOrder" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="SubmitOrder">
+ <soap12:operation soapAction="SubmitOrderOnePhase" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="isOnline">
+ <soap12:operation soapAction="isOnline" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="CustomBinding_OrderProcessorService"
type="i0:OrderProcessorService">
+ <wsp:PolicyReference URI="#CustomBinding_OrderProcessorService_policy"/>
+ <soap12:binding transport="http://schemas.microsoft.com/soap/tcp"/>
+ <wsdl:operation name="SubmitOrderTransactedQueue">
+ <soap12:operation soapAction="SubmitOrder" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="SubmitOrder">
+ <soap12:operation soapAction="SubmitOrderOnePhase" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="isOnline">
+ <soap12:operation soapAction="isOnline" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="OrderProcessor">
+ <wsdl:port name="BasicHttpBinding_OrderProcessorService"
binding="tns:BasicHttpBinding_OrderProcessorService">
+ <soap:address location="http://nandika:9010/TradeOrders"/>
+ </wsdl:port>
+ <!--
+ <wsdl:port name="NetMsmqBinding_OrderProcessorService"
binding="tns:NetMsmqBinding_OrderProcessorService">
+ <soap12:address
location="net.msmq://shankar/private/tradeordersqueuedurable"/>
+ <wsa10:EndpointReference>
+
<wsa10:Address>net.msmq://shankar/private/tradeordersqueuedurable</wsa10:Address>
+ </wsa10:EndpointReference>
+ </wsdl:port>
+ <wsdl:port name="NetMsmqBinding_OrderProcessorService1"
binding="tns:NetMsmqBinding_OrderProcessorService1">
+ <soap12:address
location="net.msmq://shankar/private/tradeordersqueuevolatile"/>
+ <wsa10:EndpointReference>
+
<wsa10:Address>net.msmq://shankar/private/tradeordersqueuevolatile</wsa10:Address>
+ </wsa10:EndpointReference>
+ </wsdl:port>
+ <wsdl:port name="CustomBinding_OrderProcessorService"
binding="tns:CustomBinding_OrderProcessorService">
+ <soap12:address location="net.tcp://shankar:9001/TradeOrders"/>
+ <wsa10:EndpointReference>
+ <wsa10:Address>net.tcp://shankar:9001/TradeOrders</wsa10:Address>
+ </wsa10:EndpointReference>
+ </wsdl:port>
+ -->
+ </wsdl:service>
+</wsdl:definitions>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl0
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl0?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl0
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.wsdl0
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions targetNamespace="http://Trade.TraderOrderHost"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
xmlns:tns="http://Trade.TraderOrderHost"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsa10="http://www.w3.org/2005/08/addressing"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://Trade.TraderOrderHost/Imports">
+ <xsd:import schemaLocation="TradeOrders.xsd0"
namespace="http://Trade.TraderOrderHost"/>
+ <xsd:import schemaLocation="TradeOrders.xsd1"
namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
+ <xsd:import schemaLocation="TradeOrders.xsd2"
namespace="http://trade.samples.websphere.ibm.com"/>
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message
name="OrderProcessorService_SubmitOrderTransactedQueue_InputMessage">
+ <wsdl:part name="parameters" element="tns:SubmitOrderTransactedQueue"/>
+ </wsdl:message>
+ <wsdl:message name="OrderProcessorService_SubmitOrder_InputMessage">
+ <wsdl:part name="parameters" element="tns:SubmitOrder"/>
+ </wsdl:message>
+ <wsdl:message name="OrderProcessorService_isOnline_InputMessage">
+ <wsdl:part name="parameters" element="tns:isOnline"/>
+ </wsdl:message>
+ <wsdl:portType name="OrderProcessorService">
+ <wsdl:operation name="SubmitOrderTransactedQueue">
+ <wsdl:input wsaw:Action="SubmitOrder"
message="tns:OrderProcessorService_SubmitOrderTransactedQueue_InputMessage"/>
+ </wsdl:operation>
+ <wsdl:operation name="SubmitOrder">
+ <wsdl:input wsaw:Action="SubmitOrderOnePhase"
message="tns:OrderProcessorService_SubmitOrder_InputMessage"/>
+ </wsdl:operation>
+ <wsdl:operation name="isOnline">
+ <wsdl:input wsaw:Action="isOnline"
message="tns:OrderProcessorService_isOnline_InputMessage"/>
+ </wsdl:operation>
+ </wsdl:portType>
+</wsdl:definitions>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd0
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd0?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd0
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd0
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema elementFormDefault="qualified"
targetNamespace="http://Trade.TraderOrderHost"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://Trade.TraderOrderHost">
+ <xs:import schemaLocation="TradeOrders.xsd2"
namespace="http://trade.samples.websphere.ibm.com"/>
+ <xs:element name="SubmitOrderTransactedQueue">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="order" nillable="true"
type="q1:OrderDataBean" xmlns:q1="http://trade.samples.websphere.ibm.com"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="SubmitOrder">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="order" nillable="true"
type="q2:OrderDataBean" xmlns:q2="http://trade.samples.websphere.ibm.com"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="isOnline">
+ <xs:complexType>
+ <xs:sequence/>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd1
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd1?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd1
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd1
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/">
+ <xs:element name="anyType" nillable="true" type="xs:anyType"/>
+ <xs:element name="anyURI" nillable="true" type="xs:anyURI"/>
+ <xs:element name="base64Binary" nillable="true" type="xs:base64Binary"/>
+ <xs:element name="boolean" nillable="true" type="xs:boolean"/>
+ <xs:element name="byte" nillable="true" type="xs:byte"/>
+ <xs:element name="dateTime" nillable="true" type="xs:dateTime"/>
+ <xs:element name="decimal" nillable="true" type="xs:decimal"/>
+ <xs:element name="double" nillable="true" type="xs:double"/>
+ <xs:element name="float" nillable="true" type="xs:float"/>
+ <xs:element name="int" nillable="true" type="xs:int"/>
+ <xs:element name="long" nillable="true" type="xs:long"/>
+ <xs:element name="QName" nillable="true" type="xs:QName"/>
+ <xs:element name="short" nillable="true" type="xs:short"/>
+ <xs:element name="string" nillable="true" type="xs:string"/>
+ <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte"/>
+ <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt"/>
+ <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong"/>
+ <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort"/>
+ <xs:element name="char" nillable="true" type="tns:char"/>
+ <xs:simpleType name="char">
+ <xs:restriction base="xs:int"/>
+ </xs:simpleType>
+ <xs:element name="duration" nillable="true" type="tns:duration"/>
+ <xs:simpleType name="duration">
+ <xs:restriction base="xs:duration">
+ <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?"/>
+ <xs:minInclusive value="-P10675199DT2H48M5.4775808S"/>
+ <xs:maxInclusive value="P10675199DT2H48M5.4775807S"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="guid" nillable="true" type="tns:guid"/>
+ <xs:simpleType name="guid">
+ <xs:restriction base="xs:string">
+ <xs:pattern
value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:attribute name="FactoryType" type="xs:QName"/>
+</xs:schema>
Added:
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd2
URL:
http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd2?rev=743209&view=auto
==============================================================================
---
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd2
(added)
+++
incubator/stonehenge/trunk/stocktrader/php/order_processor/wsdl/TradeOrders.xsd2
Wed Feb 11 04:07:29 2009
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema elementFormDefault="qualified"
targetNamespace="http://trade.samples.websphere.ibm.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://trade.samples.websphere.ibm.com">
+ <xs:complexType name="OrderDataBean">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="orderID" type="xs:int"/>
+ <xs:element minOccurs="0" name="orderType" nillable="true"
type="xs:string"/>
+ <xs:element minOccurs="0" name="orderStatus" nillable="true"
type="xs:string"/>
+ <xs:element minOccurs="0" name="openDate" type="xs:dateTime"/>
+ <xs:element minOccurs="0" name="completionDate" type="xs:dateTime"/>
+ <xs:element minOccurs="0" name="quantity" type="xs:double"/>
+ <xs:element minOccurs="0" name="price" type="xs:decimal"/>
+ <xs:element minOccurs="0" name="orderFee" type="xs:decimal"/>
+ <xs:element minOccurs="0" name="symbol" nillable="true" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="OrderDataBean" nillable="true" type="tns:OrderDataBean"/>
+</xs:schema>