Author: jsdelfino
Date: Thu Nov 1 22:10:02 2007
New Revision: 591228
URL: http://svn.apache.org/viewvc?rev=591228&view=rev
Log:
First cut of implementation of shopping cart backed by a database using JDBC.
Added:
incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql
Modified:
incubator/tuscany/java/sca/tutorial/assets/pom.xml
incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java
incubator/tuscany/java/sca/tutorial/pom.xml
incubator/tuscany/java/sca/tutorial/store/ (props changed)
incubator/tuscany/java/sca/tutorial/store-eu/ (props changed)
incubator/tuscany/java/sca/tutorial/store-eu/pom.xml
incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite
incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java
incubator/tuscany/java/sca/tutorial/store/pom.xml
incubator/tuscany/java/sca/tutorial/store/store-db.composite
Modified: incubator/tuscany/java/sca/tutorial/assets/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/assets/pom.xml?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/assets/pom.xml (original)
+++ incubator/tuscany/java/sca/tutorial/assets/pom.xml Thu Nov 1 22:10:02 2007
@@ -44,15 +44,8 @@
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
- <artifactId>tuscany-binding-feed</artifactId>
- <version>1.1-incubating-SNAPSHOT</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-data</artifactId>
<version>1.1-incubating-SNAPSHOT</version>
- <scope>runtime</scope>
</dependency>
<dependency>
Modified:
incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
---
incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java
(original)
+++
incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java
Thu Nov 1 22:10:02 2007
@@ -19,112 +19,118 @@
package services.db;
-import java.util.ArrayList;
-import java.util.Date;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.UUID;
-import org.apache.tuscany.sca.binding.feed.collection.Collection;
-import org.apache.tuscany.sca.binding.feed.collection.NotFoundException;
+import org.apache.tuscany.sca.implementation.data.collection.Collection;
+import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
+import org.osoa.sca.ServiceRuntimeException;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
-import com.sun.syndication.feed.atom.Content;
-import com.sun.syndication.feed.atom.Entry;
-import com.sun.syndication.feed.atom.Feed;
-import com.sun.syndication.feed.atom.Link;
+import services.Total;
-public class ShoppingCartTableImpl implements Collection {
+public class ShoppingCartTableImpl implements Collection<String, String>,
Total {
- private static Map<String, String> cart = new HashMap<String, String>();
-
- public Feed getFeed() {
- Feed feed = new Feed();
- feed.setTitle("shopping cart");
- for (Map.Entry<String, String> item: getAllData().entrySet()) {
- feed.getEntries().add(createEntry(item.getKey(), item.getValue()));
- }
- return feed;
- }
+ @Property
+ public String database;
- private Entry createEntry(String key, String item) {
- Entry entry = new Entry();
- entry.setId(key);
- entry.setTitle("cart-item");
-
- Content content = new Content();
- content.setType(Content.TEXT);
- content.setValue(item);
- List contents = new ArrayList();
- contents.add(content);
- entry.setContents(contents);
-
- Link link = new Link();
- link.setRel("edit");
- link.setHref(key);
- entry.getOtherLinks().add(link);
- link = new Link();
- link.setRel("alternate");
- link.setHref(key);
- entry.getAlternateLinks().add(link);
-
- entry.setCreated(new Date());
-
- return entry;
- }
-
- public Entry get(String id) throws NotFoundException {
- return createEntry(id, cart.get(id));
- }
-
- public Entry post(Entry entry) {
- System.out.println("post" + entry);
- String item = ((Content)entry.getContents().get(0)).getValue();
- String key = postData(item);
- return createEntry(key, item);
- }
-
- public Entry put(String id, Entry entry) throws NotFoundException {
- String item = ((Content)entry.getContents().get(0)).getValue();
- item = putData(id, item);
- return createEntry(id, item);
- }
+ private Connection connection;
- public void delete(String id) throws NotFoundException {
- deleteData(id);
- }
-
- private Map<String, String> getAllData() {
- return cart;
+ @Init
+ public void init() throws Exception {
+ Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+ connection = DriverManager.getConnection("jdbc:derby:target/" +
database, "", "");
+ }
+
+ public Map<String, String> getAll() {
+ try {
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery("select * from Cart");
+ Map<String, String> result = new HashMap<String, String>();
+ while (resultSet.next()) {
+ result.put(resultSet.getString("id"),
resultSet.getString("item"));
+ }
+ return result;
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
}
- private String getData(String key) throws NotFoundException {
- return cart.get(key);
+ public String get(String key) throws NotFoundException {
+ try {
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery("select * from Cart
where id = '" + key + "'");
+ if (resultSet.next()) {
+ return resultSet.getString("item");
+ } else {
+ throw new NotFoundException(key);
+ }
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
}
- private String postData(String item) {
+ public String post(String item) {
String key = "cart-" + UUID.randomUUID().toString();
- cart.put(key, item);
+ try {
+ Statement statement = connection.createStatement();
+ statement.executeUpdate("insert into Cart values ('" + key + "',
'" + item + "')");
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
return key;
}
- private String putData(String key, String item) throws NotFoundException {
- cart.put(key, item);
+ public String put(String key, String item) throws NotFoundException {
+ try {
+ Statement statement = connection.createStatement();
+ int count = statement.executeUpdate("update into Cart set item =
'" + item + "' where id = '" + key + "'");
+ if (count == 0)
+ throw new NotFoundException(key);
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
return item;
}
- private void deleteData(String key) throws NotFoundException {
- if (key == null || key.equals(""))
- cart.clear();
- else
- cart.remove(key);
+ public void delete(String key) throws NotFoundException {
+ try {
+ Statement statement = connection.createStatement();
+ if (key == null || key.equals("")) {
+ statement.executeUpdate("delete from Cart");
+ } else {
+ int count = statement.executeUpdate("delete from Cart where id
= '" + key + "'");
+ if (count == 0)
+ throw new NotFoundException(key);
+ }
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
}
- private Map<String, String> queryData(String queryString) {
- return getAllData();
+ public Map<String, String> query(String queryString) {
+ try {
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery("select * from Cart
where " + queryString);
+ Map<String, String> result = new HashMap<String, String>();
+ while (resultSet.next()) {
+ result.put(resultSet.getString("id"),
resultSet.getString("item"));
+ }
+ return result;
+ } catch (SQLException e) {
+ throw new ServiceRuntimeException(e);
+ }
}
public String getTotal() {
+ Map<String, String> cart = getAll();
double total = 0;
String currencySymbol = "";
if (!cart.isEmpty()) {
Added: incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql?rev=591228&view=auto
==============================================================================
--- incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql (added)
+++ incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql Thu Nov 1
22:10:02 2007
@@ -0,0 +1,7 @@
+DROP TABLE CART;
+
+CREATE TABLE CART(
+ id VARCHAR(50) NOT NULL,
+ item VARCHAR(50),
+ primary key (id)
+);
Modified: incubator/tuscany/java/sca/tutorial/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/pom.xml?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/pom.xml (original)
+++ incubator/tuscany/java/sca/tutorial/pom.xml Thu Nov 1 22:10:02 2007
@@ -39,7 +39,6 @@
<module>assets</module>
<module>cloud</module>
<module>store</module>
- <module>store-db</module>
<module>store-eu</module>
<module>www-cloud</module>
</modules>
Propchange: incubator/tuscany/java/sca/tutorial/store/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Nov 1 22:10:02 2007
@@ -13,3 +13,5 @@
.wtpmodules
build.xml
work
+derby.log
+
Propchange: incubator/tuscany/java/sca/tutorial/store-eu/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Nov 1 22:10:02 2007
@@ -13,3 +13,5 @@
.wtpmodules
build.xml
work
+derby.log
+
Modified: incubator/tuscany/java/sca/tutorial/store-eu/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store-eu/pom.xml?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store-eu/pom.xml (original)
+++ incubator/tuscany/java/sca/tutorial/store-eu/pom.xml Thu Nov 1 22:10:02
2007
@@ -135,6 +135,40 @@
</execution>
</executions>
</plugin>
+
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>sql-maven-plugin</artifactId>
+ <version>1.0</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.2.1</version>
+ </dependency>
+ </dependencies>
+
+ <executions>
+ <execution>
+ <id>create-db</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+
<driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+
<url>jdbc:derby:target/cart-eu-db;create=true</url>
+ <autocommit>true</autocommit>
+ <onError>continue</onError>
+ <delimiter>;</delimiter>
+ <srcFiles>
+
<srcFile>${pom.basedir}/../assets/services/db/cart.sql</srcFile>
+ </srcFiles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
Modified: incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite (original)
+++ incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite Thu Nov 1
22:10:02 2007
@@ -52,6 +52,7 @@
<component name="ShoppingCart">
<implementation.java class="services.db.ShoppingCartTableImpl"/>
+ <property name="database">cart-eu-db</property>
<service name="Collection">
<t:binding.atom/>
</service>
Modified: incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java
(original)
+++ incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java Thu Nov
1 22:10:02 2007
@@ -39,7 +39,7 @@
node.addToDomainLevelComposite(new QName("http://store", "store-db"));
node.start();
- System.out.println("store.composite ready for big business !!!");
+ System.out.println("store-db.composite ready for big business !!!");
System.in.read();
System.out.println("Stopping ...");
Modified: incubator/tuscany/java/sca/tutorial/store/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store/pom.xml?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store/pom.xml (original)
+++ incubator/tuscany/java/sca/tutorial/store/pom.xml Thu Nov 1 22:10:02 2007
@@ -80,6 +80,7 @@
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-feed</artifactId>
<version>1.1-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
</dependency>
<dependency>
@@ -135,6 +136,40 @@
</execution>
</executions>
</plugin>
+
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>sql-maven-plugin</artifactId>
+ <version>1.0</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.2.1</version>
+ </dependency>
+ </dependencies>
+
+ <executions>
+ <execution>
+ <id>create-db</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+
<driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+
<url>jdbc:derby:target/cart-db;create=true</url>
+ <autocommit>true</autocommit>
+ <onError>continue</onError>
+ <delimiter>;</delimiter>
+ <srcFiles>
+
<srcFile>${pom.basedir}/../assets/services/db/cart.sql</srcFile>
+ </srcFiles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
Modified: incubator/tuscany/java/sca/tutorial/store/store-db.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store/store-db.composite?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store/store-db.composite (original)
+++ incubator/tuscany/java/sca/tutorial/store/store-db.composite Thu Nov 1
22:10:02 2007
@@ -58,6 +58,7 @@
<component name="ShoppingCart">
<implementation.java class="services.db.ShoppingCartTableImpl"/>
+ <property name="database">cart-db</property>
<service name="Collection">
<t:binding.atom/>
</service>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]