I think that what you have can generate most of the how-to...  you should
start formatting it on the Wiki.
Also, I think we don't need the application itself as a result of the
how-to, right ?

--
Luciano Resende
http://people.apache.org/~lresende

On 11/16/06, Adriano Crestani <[EMAIL PROTECTED]> wrote:

I've started to create the Shopping Cart and I made this so far:

ShoppingCartConfig.xml

<?xml version="1.0" encoding="ASCII"?>
<Config xsi:noNamespaceSchemaLocation="
http:///org.apache.tuscany.das.rdb/config.xsd"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance";>

    <Command name="all carts" SQL="SELECT * FROM CART" kind="Select"/>

    <Command name="all carts x items" SQL="SELECT * FROM CART_ITEM"
kind="Select"/>

    <Command name="get cart item" SQL="SELECT * from CART_ITEM WHERE
CART_ID
= ? AND ITEM_ID = ?" kind="Select"/>

    <Command name="get cart items" SQL="SELECT * from CART_ITEM WHERE
CART_ID = ?" kind="Select"/>

    <Command name="get items" SQL="select * FROM ITEM"  kind="Select"/>

    <Command name="get item" SQL="select * FROM ITEM WHERE ID = ?"
kind="Select"/>

    <Command name="get cart" SQL="select * FROM CART WHERE ID = ?"
kind="Select"/>


    <Table tableName="CART">
        <Column columnName="ID" primaryKey="true" generated="true"/>
    </Table>


</Config>


ShoppingCart.java

import commonj.sdo.DataObject;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.tuscany.das.rdb.*;

public class ShoppingCart {

    public void newCart() {
        DAS das = DAS.FACTORY.createDAS
(getClass().getClassLoader().getResourceAsStream("ShoppingCartConfig.xml
"),
getConnection());
        Command command = das.getCommand("all carts");
        DataObject allCarts = command.executeQuery();

        DataObject newCart = allCarts.createDataObject("CART");
        allCarts.getList("CART").add(newCart);
        das.applyChanges(allCarts);

    }

    public void newItem() {
        DAS das = DAS.FACTORY.createDAS
(getClass().getClassLoader().getResourceAsStream("ShoppingCartConfig.xml
"),
getConnection());
        Command command = das.getCommand("all items");
        DataObject allItems = command.executeQuery();

        DataObject newItem = allItems.createDataObject("ITEM");
        allItems.getList("ITEM").add(newItem);

        das.applyChanges(allItems);

    }

    public boolean confirmOrder(int cartId) {
        DAS das = DAS.FACTORY.createDAS
(getClass().getClassLoader().getResourceAsStream("ShoppingCartConfig.xml
"),
getConnection());
        Command command = das.getCommand("get cart items");
        DataObject cartItems = command.executeQuery();
        ArrayList array = new ArrayList(cartItems.getList("CART_ITEM"));

        // check if there are enough items in stock in case another cart,
that contains
        // the same item, was ordered before
        for (Iterator it = array.iterator(); it.hasNext();) {
            DataObject cartXItem = (DataObject) it.next();
            int quantity = cartXItem.getInt("QUANTITY");
            int itemId = cartXItem.getInt("ITEM_ID");

            command = das.getCommand("get item");
            command.setParameter(1, new Integer(itemId));
            DataObject item = command.executeQuery();
            int units = item.getInt("UNITS");

            if (quantity > units) {
                return false;
            }

            item.setInt("UNITS", units - quantity);

        }

        command = das.getCommand("get cart");
        command.setParameter(1, new Integer(cartId));
        DataObject cart = command.executeQuery();
        cart.getDataObject("CART[1]").setInt("CONFIRMED", 1);

        das.applyChanges(cartItems);
        return true;

    }

    public void addCartItem(int cartId, int itemId, int quantity) {
        DAS das = DAS.FACTORY.createDAS
(getClass().getClassLoader().getResourceAsStream("ShoppingCartConfig.xml
"),
getConnection());

        Command command = das.getCommand("all carts x items");
        DataObject allCartsXItems = command.executeQuery();
        DataObject newCartXItem = allCartsXItems.createDataObject
("CART_ITEM");

        newCartXItem.setInt("QUANTITY", quantity);
        newCartXItem.setInt("CART_ID", cartId);
        newCartXItem.setInt("ITEM_ID", itemId);

        allCartsXItems.getList("CART_ITEM").add(newCartXItem);
        das.applyChanges(allCartsXItems);

    }

    public void removeCartItem(int cartId, int itemId) {
        DAS das = DAS.FACTORY.createDAS
(getClass().getClassLoader().getResourceAsStream("ShoppingCartConfig.xml
"),
getConnection());

        Command command = das.getCommand("all cart items");
        command.setParameter(1, new Integer(cartId));
        command.setParameter(2, new Integer(itemId));

        DataObject cartItem = command.executeQuery();
        cartItem.getDataObject("CART_ITEM[1]").delete();

        das.applyChanges(cartItem);

    }

   private java.sql.Connection getConnection() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch(ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
        try {
            java.sql.Connection con = DriverManager.getConnection(

"jdbc:mysql://localhost:3306/shoppingcart","tuscany","tuscany");
            con.setAutoCommit(false);
            return con;
        } catch(SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

}

TABLES:

CREATE TABLE CART (
  ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  SUB_TOTAL DOUBLE,
  TAX DOUBLE,
  TOTAL DOUBLE,
  CONFIRMED INTEGER
);

CREATE TABLE ITEM (
  ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  DESCR CHAR(30),
  UNITS INTEGER
);

CREATE TABLE CART_ITEM (
  ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  CART_ID INTEGER,
  ITEM_ID INTEGER,
  QUANTITY INTEGER,
  FOREIGN KEY (CART_ID) REFERENCES CART(ID),
  FOREIGN KEY (ITEM_ID) REFERENCES ITEM(ID)
);

It is not complete, there is still missing some functionalities in the
ShoppingCart.java, the getters. I haven't tested all methods yet, but I'm
already posting it here in case anyone wanting to give some suggestion.

I have no idea how to make the ShoppingCart.jsp, I needing some ideas for
the layout.

Adriano Crestani

On 11/16/06, Willian Maja <[EMAIL PROTECTED]> wrote:
>
> I think I didn't understand what you want. But i tested using TimeStamp
> and
> DateTime:
>
>        CREATE TABLE test (ID integer not null AUTO_INCREMENT, timestamp
> timestamp, datetime datetime, primary key (ID));
>
>        INSERT INTO test VALUES ();
>
> This will create the following row:
>
>        |  1   |     2006-11-16 14:10:24.0    |    NULL
>
>
> Now I will read the timestamp:
>
>          Command read = das.createCommand("select * from test");
>          DataObject root = read.executeQuery();
>          DataObject node = root.getDataObject("test[1]");
>          java.util.Date date = node.getDate("timestamp"); // You must
use
> java.util.Date, not java.sql.Date
>
>          System.out.println(date.getHours()); // Print the hours
>          System.out.println(date.getMonth()); // Print the month
>          System.out.println(node.getDate("date")); // Print the
TimeStamp
> ex:2006-11-16 14:12:23.0
>
>
> To save DateTime I used the following code:
>          //Continuing the last code, I'm going to save the TimeStamp in
> the
> DateTime column
>         node.setDate("datetime", date);
>         das.applyChanges(root);
>
> Now the row 1 from the test table will be:
>
> |  1   |     2006-11-16 14:10:24.0    |    2006-11-16 14:10:24.0
>
>
> I read/updated the row with datetime and timestamp column.
> If this wasn't what you want, please send me the code you want to make
> work
> with SDO/Mysql.
>
>
>
>
> >From: "Katja" <[EMAIL PROTECTED]>
> >Reply-To: [email protected]
> >To: [email protected]
> >Subject: Re: New proposal to make DAS/SDO HOW TO
> >Date: Thu, 16 Nov 2006 17:29:58 +0100
> >
> >Hi Willian!
> >
> >Thank you for the example! You tested with a Date-Column, that worked
in
> my
> >application, too, because no conversion between the column and the data
> >object value is necessary.
> >
> >With DateTime a converter is needed:
> >SDO format: 2006-11-16T17:22
> >MySQL format: 2006-11-16 17:22
> >
> >The bigbank sample has a DateConverter for this issue, but this does
only
> >work with Derby and not with MySQL. I don't know why. I posted the
error
> >last time:
> >http://www.mail-archive.com/[email protected]/msg10725.html
> >
> >It would be great, if you could test again with a DateTime or Timestamp
> >column and tell me your solution.
> >
> >Thanks,
> >Katja
> >
> >
> >
> >-------- Original-Nachricht --------
> >Datum: Thu, 16 Nov 2006 16:08:48 +0000
> >Von: "Willian Maja" <[EMAIL PROTECTED]>
> >An: [email protected]
> >Betreff: Re: New proposal to make DAS/SDO HOW TO
> >
> > > Hi Katja,
> > >
> > >     I've just tested to read Date column, and it works. I'm going to
> >paste
> > > my code here for you:
> > >
> > > This will be the test table, it's just a simple table with a
DateTime
> > > Column.
> > >
> > > CREATE TABLE test (ID integer not null AUTO_INCREMENT, date_column
> >date);
> > > INSERT INTO test (date_column) VALUES ("06-11-16");
> > >
> > > Now you should create your Das connection. In my code example I'll
not
> >use
> > > XML configuration. I'm going to create the Command:
> > >
> > >         Command read = das.createCommand("select * from test");
> //Create
> > > the
> > >   Command
> > >         DataObject root = read.executeQuery();
> > >         DataObject row = root.getDataObject("teste[1]"); // Get the
> >first
> > > row from test table;
> > >         System.out.println(row.getDate("date_column")); // Print the
> > > DateTime
> > >
> > >
> > > I think this will help you :).
> > >
> > > Bye.
> > >
> > >
> > >
> > >
> > > >From: "Katja" <[EMAIL PROTECTED]>
> > > >Reply-To: [email protected]
> > > >To: [email protected]
> > > >Subject: Re: New proposal to make DAS/SDO HOW TO
> > > >Date: Thu, 16 Nov 2006 09:14:28 +0100
> > > >
> > > >Hi!
> > > >
> > > >Is it possible to add a Timestamp or DateTime column to the
database?
> I
> > > am
> > > >very interested in how to access these columns with DAS and MySQL
> >because
> > > I
> > > >have not succeeded in doing this.
> > > >
> > > >Thanks,
> > > >Katja
> > > >
> > > >-------- Original-Nachricht --------
> > > >Datum: Thu, 16 Nov 2006 03:44:18 -0400
> > > >Von: "Adriano Crestani" <[EMAIL PROTECTED]>
> > > >An: [email protected]
> > > >Betreff: Re: New proposal to make DAS/SDO HOW TO
> > > >
> > > > > Willian, I created these tables, that will possible be used in
the
> > > > > shopping
> > > > > cart app. It's simple, but I think a howto sample must be
simple.
> >And
> > > if
> > > > > you
> > > > > want to add anything, feel free ; )
> > > > >
> > > > > CREATE TABLE CART (
> > > > >     ID INTEGER,
> > > > >     PRIMARY KEY (ID)
> > > > > );
> > > > >
> > > > > CREATE TABLE ITEM (
> > > > >     ID INTEGER,
> > > > >     ITEM VARCHAR(30),
> > > > >     UNITS INTEGER,
> > > > >     CART_ID INTEGER,
> > > > >     PRIMARY KEY (ID),
> > > > >     FOREIGN KEY (CART_ID) REFERENCES CART(ID)
> > > > > );
> > > > >
> > > > >
> > > > >
> > > > > On 11/16/06, Luciano Resende <[EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > Hey Guys
> > > > > >
> > > > > >    Very good to see some progress and some contents being
> >generated.
> > > I
> > > > > > agree
> > > > > > with you guys when you say this is becoming more like a user
> >guide,
> > > > > > instead
> > > > > > of a How To, and building it describing a new scenario would
> > > probably
> > > > > make
> > > > > > things more clear, altough let's try to keep it simple on the
> > > >beginning,
> > > > > > otherwise we are going to get a White paper :)
> > > > > >
> > > > > >    I think we should describe actions that you would take when
> > > trying
> > > >to
> > > > > > create an application and describe how you would do it (e.gNow
> we
> > > >need
> > > > > to
> > > > > > execute a query to read the list of products, and this is how
> you
> > > >would
> > > > > do
> > > > > > using DAS), and point the user to further documentation in
case
> it
> > > > > > needs/want to know more about the specific feature (e.g if
they
> >want
> > > >to
> > > > > > learn the whole syntax/xsd of the das config file).
> > > > > >
> > > > > >    I think couple things should not be covered on the How to :
> > > > > >       - How to build a war file
> > > > > >       - How to create a database (altough you might provide
the
> >SQL
> > > > > > statements to create the tables you would use or at least
> describe
> > > the
> > > > > DB
> > > > > > schema)
> > > > > >
> > > > > >    Now, talking about what should be in this how-to
> > > > > >       - We could start very simple... 1 product table, and one
> > > simple
> > > > > jsp
> > > > > > that gives you a list of the products available
> > > > > >       - Using MySQL is good, altough this how to should not
> really
> > > be
> > > > > > database dependent, right ? we could point it to any database,
> and
> > > you
> > > > > > guys
> > > > > > could maybe elaborate on what change would be necessary to do
> this
> > > :)
> > > > > >
> > > > > >    Also, I think this how to does not necessarily need to
> produce
> >a
> > > > > > working
> > > > > > application, as it's intended to show how people would use
DAS.
> If
> > > we
> > > > > want
> > > > > > to spend time creating an application, I'd suggest doing this
as
> > > >another
> > > > > > task, and finish the one I have started as part of
> > > > > > http://issues.apache.org/jira/browse/TUSCANY-800
> > > > > >
> > > > > > Let me know if you have any further questions... let's
continue
> to
> > > > > > updating
> > > > > > the wiki, and please let me know when you guys want me to take
a
> > > look
> > > > > and
> > > > > > provide a feedback on the contents...
> > > > > >
> > > > > > BTW, others are welcome to voice their opinion on what
direction
> >we
> > > > > should
> > > > > > take here...
> > > > > >
> > > > > >
> > > > > > - Luciano Resende
> > > > > > Apache Tuscany
> > > > > >
> > > > > >
> > > > > > On 11/15/06, Adriano Crestani <[EMAIL PROTECTED]>
wrote:
> > > > > > >
> > > > > > > I've decribed the XML configuration file, but it's still
> looking
> > > >like
> > > > > a
> > > > > > > user
> > > > > > > guide than a howto. I think the CompanyWeb sample is to
simple
> >and
> > > > > > doesn't
> > > > > > > cover well all the DAS features. So lets make this Shopping
> Cart
> > > > > > > application
> > > > > > > trying to use all the DAS features. Then we will be able to
do
> a
> > > >very
> > > > > > > useful
> > > > > > > howto.
> > > > > > >
> > > > > > >   My propose is that this app must have at least:
> > > > > > >
> > > > > > >      - 1 functionality that requires a SQL command with
> >arguments.
> > > > > Then
> > > > > > we
> > > > > > > cover how to deal with arguments in SQL commands.
> > > > > > >
> > > > > > >     - 1 table that has one autoincrement key column to cover
> the
> > > > > > > "genarated"
> > > > > > > attribute on the howto.
> > > > > > >
> > > > > > >     - 1 table that requires a concurrency control to cover
the
> > > > > > > "concurrency"
> > > > > > > attribute on the howto.
> > > > > > >
> > > > > > >    - 1 table containing a foreign key to cover how to
explicit
> >in
> > > >the
> > > > > > XML
> > > > > > > configuration file the link between two tables. There will
> > > probabily
> > > > > be
> > > > > > a
> > > > > > > foreign key in its database anyway. ; )
> > > > > > >
> > > > > > > I think also a good idea to use the MySql as the database
> >server,
> > > >once
> > > > > > > it's
> > > > > > > the most used server on webapps ; )
> > > > > > >
> > > > > > > We must discuss how will be the Shopping Cart GUI, it must
be
> > > simple
> > > > > > once
> > > > > > > it's not the focus of our howto. I think a simple html
> genarated
> > > by
> > > >a
> > > > > > jsp
> > > > > > > is
> > > > > > > enough. ; )
> > > > > > >
> > > > > > > Adriano Crestani
> > > > > > >
> > > > > > > On 11/15/06, Willian Yabusame Maja <[EMAIL PROTECTED]>
> > > wrote:
> > > > > > > >
> > > > > > > > Hello Tuscany Community!
> > > > > > > >
> > > > > > > >     Adriano Crestani and I are working together on a
> >HelloWorld
> > > >DAS
> > > > > > "How
> > > > > > > > To". I have uploaded what we have done so far to
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > >
> > >
>
http://wiki.apache.org/ws/Tuscany/TuscanyJava/DAS_Java_Overview/RDBDAS_HOWTO_HelloDASApp
> > > > > > > >
> > > > > > > >     We were using the CompanyWeb sample application to
make
> >this
> > > > > > > > step-by-step how-to and teach how to use the DAS/SDO
> Features.
> > > We
> > > > > are
> > > > > > > not
> > > > > > > > liking what this is becoming, as it's looking more like a
> > > > > > > user-gide/readme
> > > > > > > > then really a how-to, so we would like to do a new
proposal
> :
> > > > > > > >
> > > > > > > >     Use the scenario of a Shopping cart, and use it to
> explain
> > > >more
> > > > > > > about
> > > > > > > > how to build it using DAS to handle the persistence part
of
> >the
> > > > > app...
> > > > > > > >
> > > > > > > >     The topics would be:
> > > > > > > >         Introducing the scenario and the motivation to use
> > > DAS/SDO
> > > > > > > >         Initial Setup and environment assumptions
> > > > > > > >         Building the application
> > > > > > > >         - database
> > > > > > > >                 - DAS commands
> > > > > > > >                 - Configuring the XML and how to make the
> > > commands
> > > > > > > >         Explain the DAS/SDO and how to read/get results
> > > > > > > >         conclusion
> > > > > > > >
> > > > > > > >
> > > > > > > >     Before we change our path to this new approach, we
would
> > > like
> > > >to
> > > > > > > hear
> > > > > > > > some feedback on what you guys think about this new
> >approach....
> > > > > > > >
> > > > > > > > Willian Yabusame Maja
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > >
> > > >--
> > > >Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
> > > >Ideal f�r Modem und ISDN: http://www.gmx.net/de/go/smartsurfer
> > > >
> > >
>---------------------------------------------------------------------
> > > >To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > >For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > >
> > > _________________________________________________________________
> > > MSN Busca: f�cil, r�pido, direto ao ponto.  http://search.msn.com.br
> > >
> > >
> > >
---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >--
> >Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
> >Ideal f�r Modem und ISDN: http://www.gmx.net/de/go/smartsurfer
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
> _________________________________________________________________
> MSN Hotmail, o maior webmail do Brasil. http://www.hotmail.com
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to