diff options
author | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
---|---|---|
committer | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
commit | bdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a (patch) | |
tree | 38a92061c0793434c4be189f1d70c3458b6bc41d /sandbox/lresende/sca/samples/company-das-webapp |
Move Tuscany from Incubator to top level.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sandbox/lresende/sca/samples/company-das-webapp')
14 files changed, 962 insertions, 0 deletions
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/build.xml b/sandbox/lresende/sca/samples/company-das-webapp/build.xml new file mode 100644 index 0000000000..feef76481b --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/build.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<project name="samples" default="compile">
+ <property name="mainDir" value="../../.."/>
+ <path id="javac.classpath">
+ <fileset dir="${mainDir}/lib">
+ <include name="tuscany-runtime-incubating-M1.jar"/>
+ </fileset>
+ </path>
+ <path id="java.classpath">
+ <fileset dir="${mainDir}/lib">
+ <include name="tuscany-runtime-incubating-M1.jar"/>
+ </fileset>
+ <pathelement path="target/sample-companyweb.jar"/>
+ </path>
+
+ <target name="init">
+ <mkdir dir="target/classes"/>
+ </target>
+
+ <target name="compile" depends="init">
+ <javac srcdir="src/main/java" destdir="target/classes" debug="on" source="1.5" target="1.5">
+ <classpath refid="javac.classpath"/>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="src/main/resources"/>
+ </copy>
+ <war destfile="target/sample-companyweb.war" webxml="src/main/webapp/WEB-INF/web.xml">
+ <classes dir="target/classes"/>
+ </war>
+ </target>
+
+ <target name="clean">
+ <delete quiet="true" includeemptydirs="true">
+ <fileset dir="target" excludes="sample-companyweb-incubating-M1.war"/>
+ </delete>
+ </target>
+</project>
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/company.sql b/sandbox/lresende/sca/samples/company-das-webapp/company.sql new file mode 100644 index 0000000000..8fb5c2d4cd --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/company.sql @@ -0,0 +1,40 @@ +DROP TABLE EMPLOYEE;
+DROP TABLE DEPARTMENT;
+DROP TABLE COMPANY;
+
+CREATE TABLE COMPANY (
+ ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
+ NAME VARCHAR(30));
+
+CREATE TABLE DEPARTMENT (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
+ NAME VARCHAR(30),
+ LOCATION VARCHAR(30),
+ DEPNUMBER VARCHAR(10),
+ COMPANYID INT);
+
+CREATE TABLE EMPLOYEE (ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
+ NAME VARCHAR(30),
+ SN VARCHAR(10),
+ MANAGER SMALLINT,
+ DEPARTMENTID INT);
+
+
+INSERT INTO COMPANY (NAME) VALUES('ACME Publishing');
+INSERT INTO COMPANY (NAME) VALUES('Do-rite plumbing');
+INSERT INTO COMPANY (NAME) VALUES('MegaCorp');
+
+INSERT INTO DEPARTMENT (NAME, LOCATION, DEPNUMBER, COMPANYID) VALUES('Advanced Technologies','NY','123', 1);
+INSERT INTO DEPARTMENT (NAME, LOCATION, DEPNUMBER, COMPANYID) VALUES('Default Name 2','','', 1);
+INSERT INTO DEPARTMENT (NAME, LOCATION, DEPNUMBER, COMPANYID) VALUES('Default Name 3','','', 1);
+INSERT INTO DEPARTMENT (NAME, LOCATION, DEPNUMBER, COMPANYID) VALUES('Default Name 4','','', 1);
+INSERT INTO DEPARTMENT (NAME, LOCATION, DEPNUMBER, COMPANYID) VALUES('Default Name 5','','', 1);
+INSERT INTO DEPARTMENT (NAME, LOCATION, DEPNUMBER, COMPANYID) VALUES('Default Name 6','','', 1);
+INSERT INTO DEPARTMENT (NAME, LOCATION, DEPNUMBER, COMPANYID) VALUES('Default Name 7','','', 1);
+INSERT INTO DEPARTMENT (NAME, LOCATION, DEPNUMBER, COMPANYID) VALUES('Default Name 8','','', 1);
+
+INSERT INTO EMPLOYEE (NAME, SN, MANAGER, DEPARTMENTID) VALUES('John Jones','E0001', 0, 1);
+INSERT INTO EMPLOYEE (NAME, SN, MANAGER, DEPARTMENTID) VALUES('Mary Smith','E0002', 1, null);
+INSERT INTO EMPLOYEE (NAME, SN, MANAGER, DEPARTMENTID) VALUES('Jane Doe','E0003', 0, 1);
+INSERT INTO EMPLOYEE (NAME, SN, MANAGER, DEPARTMENTID) VALUES('Al Smith','E0004', 1, 1);
+
+
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/pom.xml b/sandbox/lresende/sca/samples/company-das-webapp/pom.xml new file mode 100644 index 0000000000..12838b6565 --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/pom.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca</artifactId>
+ <version>1.1-incubating-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sample-company-das-webapp</artifactId>
+ <name>Apache Tuscany SCA Company Sample Web Client</name>
+ <packaging>war</packaging>
+
+ <dependencies>
+
+ <!-- runtime is need for webapp integration to include jar -->
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-webapp</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.2-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <!-- das & sdo -->
+ <dependency>
+ <groupId>org.apache.tuscany.das</groupId>
+ <artifactId>tuscany-das-rdb</artifactId>
+ <version>1.0-incubating-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sdo</groupId>
+ <artifactId>tuscany-sdo-impl</artifactId>
+ <version>1.0-incubating-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- testing -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <!-- this will place the java source files inside the war -->
+ <build>
+ <finalName>${artifactId}</finalName>
+ <sourceDirectory>src/main/java</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/java</directory>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>sql-maven-plugin</artifactId>
+ <!-- 1.1 due to MOJO-619 -->
+ <version>1.1-SNAPSHOT</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:${pom.basedir}/target/classes/company_db;create=true</url>
+ <autocommit>true</autocommit>
+ <onError>continue</onError>
+ <onConnectionError>skip</onConnectionError>
+ <delimiter>;</delimiter>
+ <srcFiles>
+ <srcFile>${pom.basedir}/company.sql</srcFile>
+ </srcFiles>
+ </configuration>
+ </execution>
+
+ <!-- Shutdown DB in order to be able to run unit tests -->
+ <execution>
+ <id>shutdown-database-sothat-test-can-run</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:${pom.basedir}/target/classes/company_db;shutdown=true</url>
+ <skipOnConnectionError>true</skipOnConnectionError>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/readme.html b/sandbox/lresende/sca/samples/company-das-webapp/readme.html new file mode 100644 index 0000000000..65a50de320 --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/readme.html @@ -0,0 +1,199 @@ +<!--
+ 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.
+ -->
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Tuscany RDB DAS Service client</title>
+
+<style>
+.code {font-size: 11px; color: #006699}
+.codebox {border: 1px solid #6699CC; background-color: #F1F7FA;padding:15px}
+.codebox2 {border: 1px solid #6699CC; background-color: #F1F7FA;padding:15px; width:85%}
+.codeboxW {border: 1px solid #6699CC; background-color: #FFFFFF;padding:15px}
+.codeboxB {background-color: #C9DBED;padding:1px 10px 10px 10px}
+</style>
+
+</head>
+
+
+
+
+<body>
+
+<h1>Tuscany RDB DAS Service client</h1>
+
+
+<h3>Introduction</h3>
+
+<p>
+This stand-alone sample application demonstrate how to consume the DAS Service exposed trough an SCA service.<br>
+The application starts with a canned database of Companies and their related Departments.<br>
+Through the web page interface, a user can consume the DAS Service to display the list of available companies.<br>
+The sample runs on Tomcat 5.5 and employs a Derby database accessed via a DataSource.
+</p>
+
+
+
+
+
+<h3>Running the sample</h3>
+
+<p>There are two options for running this sample:</p>
+
+<ol>
+ <li>Run from Tomcat configured by the build</li>
+ <li>Deploying the DASService.client WAR into a Tomcat you configure yourself</li>
+</ol>
+
+
+<h3>Running from Tomcat configured by the build</h3>
+
+<p>
+This sample application is deployed (along with the canned test database) to an instance of Tomcat as part of our automated sample
+testing.This means you can run the java/samples/testing/tomcat build (see java/das/samples/testing/tomcat/readme.htm ) and then access
+the application by pointing your browser to http://localhost:8080/companyweb-service-client/
+</p>
+
+
+
+<h3>Deploying the DASService.client WAR into a Tomcat you configure yourself</h3>
+
+<p>
+Alternatively, you can deploy the sample to your own configured Tomcat installation by following the instructions below.
+These instructions assume that you have either 1) downloaded the Tuscany sample distribution or 2) Downloaded the Tuscany
+source and run our maven build, see the following link to more details steps on how to build DAS Sample applications <a
+href="http://incubator.apache.org/tuscany/java_das_overview.html">http://incubator.apache.org/tuscany/java_das_overview.html</a>.
+</p>
+
+<p><b><u>Set Up:</u></b></p>
+
+
+<ol>
+ <li>Download and install the most recent stable version of Tomcat 5.5. You can find it here: <a
+ href="http://tomcat.apache.org/download-55.cgi">http://tomcat.apache.org/download-55.cgi</a></li>
+ <li>Download the most recent official release of Derby from here: <a href="http://db.apache.org/derby/index.html">http://db.apache.org/derby/index.html</a>.
+ The only file you’ll need from this download is derby.jar</li>
+ <li>Stop Tomcat</li>
+ <li>Copy derby.jar (from the derby distribution) to {Tomcat_Home}/common/lib:</li>
+ <li>Add the sample war file to {Tomcat_Home}/webapps</li>
+ <ol start=1 type=a>
+ <li>sample-das-service-client-xxx.war (e.g.sample-das-service-client-1.0-incubator-SNAPSHOT.war)</li>
+ </ol>
+ <li>Install the canned Derby database to Tomcat: </li>
+ <ol start=1 type=a>
+ <li>First, create a new directory named “Databases” to hold the sample database. Create {Tomcat_Home}/Databases</li>
+ <li>Copy the <b>dastest</b> folder (and all its contents) from {build directory root OR
+ where samples where unzipped}/java/das/samples/DASService.client to {Tomcat_Home}/Databases.<br>
+ <br>
+ <b>NOTE</b>: If you are running this from a sample distribution, the canned database is available in the
+ distribution, inside the databases directory. </li>
+ </ol>
+ <li>Define a DataSource by adding a datasource definition to {Tomcat_Home}/conf/server.xml.</li>
+ <ol start=1 type=a>
+ <li>Find the end-of-section marker </GlobalNamingResources> and add the following lines just above it:
+ <p>
+ <div class="codebox2">
+ <pre>
+ <!-- Global Datasource for Derby dastest database -->
+ <Resource name="jdbc/dastest"
+ type="javax.sql.DataSource" auth="Container"
+ description="Derby database for DAS Company sample"
+ maxActive="100" maxIdle="30" maxWait="10000"
+ username="" password=""
+ driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
+ url="jdbc:derby:{absolute path}Databases/dastest"/>
+ </pre>
+ </div>
+ </p>
+ <p><b>Requirement</b>:You must include the absolute path to the “Databases” directory in the above url attribute. Fore example:</p>
+ <p><pre> url="jdbc:derby:c:\apache-tomcat-5.5.17\Databases/dastest"</pre></p>
+ </li>
+ </ol>
+ <li><p>Start tomcat and point your browser to: <a href="http://localhost:8080/sample-das-service-client-%7bversion%20tag%7d/">http://localhost:8080/sample-das-service-client-{version
+ tag}/</a>. Example:</p>
+ <p><pre> http://localhost:8080/sample-das-service-client-1.0-incubator-SNAPSHOT/</pre></p>
+
+ </li>
+
+</ol>
+
+
+
+
+<h3>Sample Architecture</h3>
+
+<p>This is a simple, single-page, web application to consume DAS exposed as an SCA service.</p>
+<p>The main components of this application are:</p>
+
+<ul type=disc>
+ <li>The SCA DAS Service</li>
+ <li>SDO</li>
+ <li>Company.jsp</li>
+ <li>The canned Derby database</li>
+</ul>
+
+
+<p>The <b>Company.jsp</b> directly invoke the DAS Service to get a list of companies available and then iterate trough the SDO data graphs and manipulate SDO directly to display data</p>
+
+<p>The canned <b>Derby database</b> comes preloaded with Companies and related Departments. The Derby database instance is a simple file folder.</p>
+
+<p>The <b>SCA DAS Service</b> accepts directives (commands) and reads and writes to the derby database instance appropriately using DAS as the service implementation.</p>
+
+
+
+<h3>Consuming the DAS service</h3>
+
+<p>First, note that the application have dependencies on the DAS Service:</p>
+
+
+<p>
+<div class="codebox2">
+<pre>
+<!-- DAS Service -->
+<dependency>
+ <groupId>org.apache.tuscany.das.samples</groupId>
+ <artifactId>sample-das-service</artifactId>
+ <version>${pom.version}</version>
+</dependency>
+</pre>
+</div>
+</p>
+
+<br>
+<p>And the SCDL references the service:</p>
+
+<p>
+<div class="codebox2">
+<pre>
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="DASServiceComposite">
+ <component name="DASServiceComponent">
+ <implementation.composite name="DASServiceComposite" jarLocation="lib/sample-das-service-1.0-incubator-SNAPSHOT.jar"/>
+ </component>
+</composite>
+</pre>
+</div>
+</p>
+
+
+
+
+</body>
+
+</html>
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASService.java b/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASService.java new file mode 100644 index 0000000000..0387341b87 --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASService.java @@ -0,0 +1,61 @@ +/*
+ * 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.
+ */
+package das;
+
+import java.io.InputStream;
+import java.util.Vector;
+
+import commonj.sdo.DataObject;
+
+public interface DASService {
+
+ /**
+ * Set DAS configuration file to be used
+ * @param configStream
+ * @throws DASServiceException
+ */
+ public void configureService(InputStream configStream) throws DASServiceException;
+
+ /**
+ * Execute an existing command. The commands are defined in the DAS Configuration file being used by the service
+ * @param commandName Command name as it appears on the DAS Configuration file
+ * @param commandArguments Vector with arguments to be used by the command
+ * @throws DASServiceException
+ * @return
+ */
+ public DataObject executeCommand(String commandName, Vector commandArguments) throws DASServiceException;
+
+ /**
+ * Execute a new command, this can be any arbitrary valid query based on the backend implementation (e.g. SQL Query for DAS RDB)
+ * @param adHocQuery A new command to be executed (e.g SQL Query)
+ * @param commandArguments Vector with arguments to be used by the command
+ * @throws DASServiceException
+ * @return
+ */
+ public DataObject execute(String adHocQuery, Vector commandArguments) throws DASServiceException;
+
+ /**
+ * Apply all changes on the graph back to the persistent repository.
+ * This would save the changes on the SDO ChangeSummary back to the database
+ * Note: Your SDO ojects should have been created with ChangeSummary support
+ * @param graphRoot SDO Object with changes to be commited to persistent repository
+ * @throws DASServiceException
+ */
+ public void applyChanges(DataObject graphRoot) throws DASServiceException;
+}
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASServiceException.java b/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASServiceException.java new file mode 100644 index 0000000000..e62201a4de --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASServiceException.java @@ -0,0 +1,37 @@ +/*
+ * 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.
+ */
+package das;
+
+public class DASServiceException extends Exception {
+
+ private static final long serialVersionUID = -7514653215235902874L;
+
+ public DASServiceException() {
+ super();
+ }
+
+ public DASServiceException(String msg) {
+ super(msg);
+ }
+
+ public DASServiceException(String msg, Throwable ex) {
+ super(msg, ex);
+ }
+
+}
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASServiceImpl.java b/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASServiceImpl.java new file mode 100644 index 0000000000..a0dd38601a --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/java/das/DASServiceImpl.java @@ -0,0 +1,146 @@ +/*
+ * 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.
+ */
+package das;
+
+import java.io.InputStream;
+import java.util.Vector;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.osoa.sca.annotations.Scope;
+
+import commonj.sdo.DataObject;
+
+@Scope("COMPOSITE")
+public class DASServiceImpl implements DASService {
+
+ private DAS das = null;
+
+
+ /**
+ * Initialize DAS
+ * @return
+ * @throws DASServiceException
+ */
+ private void initDAS(InputStream config) throws DASServiceException {
+ if(config == null){
+ throw new DASServiceException("Missing configuration information");
+ }
+
+ if(this.das != null){
+ this.das.releaseResources();
+ this.das = null;
+ }
+
+ this.das = DAS.FACTORY.createDAS(config);
+ }
+
+ /**
+ * Get a DAS instance based on the configuration
+ * @return
+ * @throws DASServiceException
+ */
+ private DAS getDAS() throws DASServiceException {
+ if(this.das == null){
+ throw new DASServiceException("DAS not initialized. Please provide DAS configuration torugh das.SetConfig");
+ }
+
+ return this.das;
+ }
+
+ /**
+ * Set DAS configuration file to be used
+ * @param configStream
+ * @throws DASServiceException
+ */
+ public void configureService(InputStream configStream) throws DASServiceException{
+ this.initDAS(configStream);
+ }
+
+
+
+ /**
+ * Execute an existing command. The commands are defined in the DAS Configuration file being used by the service
+ * @param commandName Command name as it appears on the DAS Configuration file
+ * @param commandArguments Vector with arguments to be used by the command
+ * @throws DASServiceException
+ * @return
+ */
+ public DataObject executeCommand(String commandName, Vector commandArguments) throws DASServiceException{
+ Command command = this.getDAS().getCommand(commandName);
+
+ if(command == null){
+ throw new DASServiceException("Invalid command: " + commandName);
+ }
+
+ //check if arguments was passed
+ if(commandArguments != null && commandArguments.size() > 0){
+ //we need to set the arguments
+ int pos=0;
+ for(Object argument : commandArguments){
+ pos++;
+ command.setParameter(pos, argument);
+ }
+ }
+
+ DataObject root = command.executeQuery();
+
+ return root;
+ }
+
+ /**
+ * Execute a new command, this can be any arbitrary valid query based on the backend implementation (e.g. SQL Query for DAS RDB)
+ * @param newCommand A new command to be executed (e.g SQL Query)
+ * @param commandArguments Vector with arguments to be used by the command
+ * @throws DASServiceException
+ * @return
+ */
+ public DataObject execute(String adHocQuery, Vector commandArguments) throws DASServiceException {
+ Command command = this.getDAS().createCommand(adHocQuery);
+
+ if(command == null){
+ throw new DASServiceException("Invalid command: " + adHocQuery);
+ }
+
+ //check if arguments was passed
+ if(commandArguments != null && commandArguments.size() > 0){
+ //we need to set the arguments
+ int pos=0;
+ for(Object argument : commandArguments){
+ pos++;
+ command.setParameter(pos, argument);
+ }
+ }
+ DataObject root = command.executeQuery();
+
+ return root;
+ }
+
+ /**
+ * Apply all changes on the graph back to the persistent repository.
+ * This would save the changes on the SDO ChangeSummary back to the database
+ * Note: Your SDO ojects should have been created with ChangeSummary support
+ * @throws DASServiceException
+ * @param graphRoot SDO Object with changes to be commited to persistent repository
+ */
+ public void applyChanges(DataObject graphRoot) throws DASServiceException{
+ // TODO Auto-generated method stub
+
+ }
+}
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/company.xml b/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/company.xml new file mode 100644 index 0000000000..9d0d8e944c --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/company.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<Config xsi:noNamespaceSchemaLocation="http:///org.apache.tuscany.das.rdb/config.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <ConnectionInfo dataSource="java:comp/env/jdbc/company_db"/>
+
+ <Command name="all companies" SQL="select * from COMPANY" kind="Select"/>
+
+ <Command name="all companies and departments" SQL="select * from COMPANY left outer join DEPARTMENT on COMPANY.ID = DEPARTMENT.COMPANYID" kind="Select"/>
+
+ <Command name="all departments for company" SQL="select * from COMPANY inner join DEPARTMENT on COMPANY.ID = DEPARTMENT.COMPANYID where COMPANY.ID = ?" kind="Select"/>
+
+ <Command name="company by id with departments" SQL="select * from COMPANY left outer join DEPARTMENT on COMPANY.ID = DEPARTMENT.COMPANYID where COMPANY.ID = ?" kind="Select"/>
+
+
+ <Table tableName="COMPANY">
+ <Column columnName="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Table tableName="DEPARTMENT">
+ <Column columnName="ID" primaryKey="true" generated="true"/>
+ </Table>
+
+ <Relationship name="departments" primaryKeyTable="COMPANY" foreignKeyTable="DEPARTMENT" many="true">
+ <KeyPair primaryKeyColumn="ID" foreignKeyColumn="COMPANYID"/>
+ </Relationship>
+
+
+</Config>
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/dasservice.composite b/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/dasservice.composite new file mode 100644 index 0000000000..6530e68050 --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/dasservice.composite @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://das-service"
+ xmlns:das-service="http://das-service"
+ name="DASService">
+
+ <component name="DASServiceComponent">
+ <implementation.java class="das.DASServiceImpl"/>
+ </component>
+
+</composite>
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/log4j.properties b/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/log4j.properties new file mode 100644 index 0000000000..c5c2868aaa --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/resources/log4j.properties @@ -0,0 +1,29 @@ +# 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.
+#
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=INFO, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[DAS RDB] - %c{1}.%M (%L) : %m %n
+
+# Print only messages of level WARN or above in the package com.foo.
+log4j.logger.org.apache.tuscany=NONE
\ No newline at end of file diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/Company.jsp b/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/Company.jsp new file mode 100644 index 0000000000..67d7ead499 --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/Company.jsp @@ -0,0 +1,97 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!--
+ 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.
+ -->
+
+<%@ page import="java.util.*" %>
+
+<%@ page import="org.apache.tuscany.sca.host.embedded.SCADomain"%>
+
+<%@ page import="commonj.sdo.*" %>
+<%@ page import="das.*" %>
+
+<html>
+<head>
+<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
+<%
+
+ SCADomain domain = (SCADomain) application.getAttribute("org.apache.tuscany.sca.SCADomain");
+ if (domain == null) {
+ System.out.println("domain == NULL");
+ }
+
+
+ DASService dasService = domain.getService(DASService.class, "DASServiceComponent");
+
+ if (dasService == null) {
+ System.out.println("DASService == NULL");
+ }
+
+ List companyList = null;
+
+ try{
+ dasService.configureService(this.getClass().getClassLoader().getResourceAsStream("company.xml"));
+ DataObject root = dasService.executeCommand("all companies", null);
+ companyList = root.getList("COMPANY");
+ if(companyList == null) {
+ System.out.println("::NULL::");
+ }
+ }catch(Exception e){
+ //TODO: handle case where dasService can't be initiated properly
+ e.printStackTrace();
+ }
+
+%>
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>DASService Client Test</title>
+</head>
+<body>
+
+<H2>Tuscany DAS Service WEB Client Application Example</H2>
+
+<!-- Do Fill -->
+<table border>
+ <thead>
+ <tr>
+ <th>ID</th>
+ <th>Name</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <%
+ java.util.Iterator i = companyList.iterator();
+ while (i.hasNext()) {
+ DataObject company = (DataObject)i.next();
+ %>
+ <tr>
+ <td><%=company.getInt("ID")%></td>
+ <td><%=company.getString("NAME")%></td>
+ <tr>
+ <%
+ }
+ %>
+ </tbody>
+</table>
+
+
+
+</form>
+</body>
+</html>
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/META-INF/context.xml b/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/META-INF/context.xml new file mode 100644 index 0000000000..0e90eb0a83 --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/META-INF/context.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<Context path="/DAS Stand alone app" debug="5" reloadable="true" crossContext="true">
+
+ <Manager pathname=""/>
+ <ResourceLink name="jdbc/dastest" global="jdbc/dastest" type="javax.sql.DataSource" />
+
+</Context>
diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/META-INF/sca-contribution.xml b/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..25849fa6b9 --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/META-INF/sca-contribution.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://sample"
+ xmlns:sample="http://sample">
+ <deployable composite="sample:DASService"/>
+</contribution>
\ No newline at end of file diff --git a/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/WEB-INF/web.xml b/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..67a782269e --- /dev/null +++ b/sandbox/lresende/sca/samples/company-das-webapp/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+ -->
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
+Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app>
+
+ <display-name>Tuscany DAS Service Client Application</display-name>
+
+ <listener>
+ <listener-class>org.apache.tuscany.sca.host.webapp.TuscanyContextListener</listener-class>
+ </listener>
+
+ <welcome-file-list id="WelcomeFileList">
+ <welcome-file>Company.jsp</welcome-file>
+ </welcome-file-list>
+
+</web-app>
|