THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- Install Tomcat(latest version) and MySQL(latest version). Please indicate which version of the Tomcat and MySQL is this tested with?
- Download dependencies and libraries Please add a link to this information. Which dependencies and libraries?
- Create companyweb directory in (Tomcat root)/webapps/. EX: (Tomcat root)/webapps/companyweb
- Create the directory (Tomcat root)/webapps/companyweb/WEB-INF/lib and copy the libraries into it. As an alternative, you can copy the libraries into (Tomcat root)/common/lib directory.
- The required libraries are:
i) common-(latest version).jar
ii) ecore-(latest version).jar
iii) ecore-change-(latest version).jar
iv) ecore-xmi-(lateste version).jar
v) log4j-(latest version).jar
vi) sdo-api-xxx.jar
vii) tuscany-das-rdb-xxx.jar
viii) tuscany-sdo-xxx.jar
ix) xsd-(latest version).jar
x) mysql-connector-java-(latest version).jar -> This is the JDBC connector, It'll be used to connect to Mysql database
...
- Create the file CompanyConfig.xml in the directory (Tomcat root)/webapps/companyweb/WEB-INF/classes
- Edit it and write the following code
No Format <?xml version="1.0" encoding="ASCII"?> <Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd"> <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>
- Save the file.
D. Creating the class and jsp
...
which manages the DAS/SDO features
- Create the file CompanyClient.java in the directory (Tomcat root)/webapps/companyweb/WEB-INF/classes/org/apache/tuscany/samples/das/companyweb
- Write the following code in the file :
It would be helpful to explain what the purpose of this code is. I would suggest you move this code to another page since it is so long and instead have a link on this page
No Format |
---|
package org.apache.tuscany.samples.das.companyweb;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import org.apache.tuscany.das.rdb.Command;
import org.apache.tuscany.das.rdb.DAS;
import commonj.sdo.DataObject;
public class CompanyClient {
private Random generator = new Random();
private DAS das = DAS.FACTORY.createDAS(getConfig("CompanyConfig.xml"));
public final List getCompanies() {
Command read = das.getCommand("all companies");
DataObject root = read.executeQuery();
return root.getList("COMPANY");
}
public final List getCompaniesWithDepartments() {
Command read = das.getCommand("all companies and departments");
DataObject root = read.executeQuery();
return root.getList("COMPANY");
}
public final List getDepartmentsForCompany(int id) {
Command read = das.getCommand("all departments for company");
read.setParameter(1, new Integer(id));
DataObject root = read.executeQuery();
return root.getList("COMPANY");
}
public final void addDepartmentToFirstCompany() {
Command read = das.getCommand("all companies and departments");
DataObject root = read.executeQuery();
DataObject firstCustomer = root.getDataObject("COMPANY[1]");
DataObject newDepartment = root.createDataObject("DEPARTMENT");
newDepartment.setString("NAME", "Default Name");
firstCustomer.getList("departments").add(newDepartment);
das.applyChanges(root);
}
public final void deleteDepartmentsFromFirstCompany() {
// This section gets the ID of the first Company just so I can
// demonstrate a parameterized command next
Command readAll = das.getCommand("all companies and departments");
DataObject root = readAll.executeQuery();
int idOfFirstCustomer = root.getInt("COMPANY[1]/ID");
System.out.println("ID of first company is: " + idOfFirstCustomer);
// Read a specific company based on the known ID
Command readCust = das.getCommand("company by id with departments");
readCust.setParameter(1, new Integer(idOfFirstCustomer));
root = readCust.executeQuery();
// Delete all the comany's departments from the graph
DataObject firstCustomer = root.getDataObject("COMPANY[1]");
// Shallow copy of list for deleting. This is required to avoid the
// dreaded
// ConcurrentModificationException since #delete operation also removes
// from the original list
List allDepartments = new ArrayList(firstCustomer.getList("departments"));
Iterator i = allDepartments.iterator();
DataObject department;
while (i.hasNext()) {
department = (DataObject) i.next();
System.out.println("Deleting department named: " + department.getString("NAME"));
department.delete();
}
das.applyChanges(root);
}
public final void changeFirstCompanysDepartmentNames() {
// This section gets the ID of the first Company just so I can
// demonstrate a parameterized command next
Command readAll = das.getCommand("all companies and departments");
DataObject root = readAll.executeQuery();
int idOfFirstCustomer = root.getInt("COMPANY[1]/ID");
System.out.println("ID of first company is: " + idOfFirstCustomer);
// Read a specific company based on the known ID
Command readCust = das.getCommand("company by id with departments");
readCust.setParameter(1, new Integer(idOfFirstCustomer));
root = readCust.executeQuery();
// Modify all the comany's department names
DataObject firstCustomer = root.getDataObject("COMPANY[1]");
Iterator i = firstCustomer.getList("departments").iterator();
DataObject department;
while (i.hasNext()) {
department = (DataObject) i.next();
System.out.println("Modifying department: " + department.getString("NAME"));
department.setString("NAME", getRandomDepartmentName());
}
das.applyChanges(root);
}
public void releaseResources() {
das.releaseResources();
}
// Utilities
private String getRandomDepartmentName() {
int number = generator.nextInt(1000) + 1;
return "Dept-" + number;
}
private InputStream getConfig(String fileName) {
return getClass().getClassLoader().getResourceAsStream(fileName);
}
}
|
- Create following Company.jsp file under (Tomcat root)/webapps/companyweb.
No Format <html> <head> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" import="org.apache.tuscany.samples.das.companyweb.CompanyClient" import="commonj.sdo.*" %> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Company Test</title> </head> <body> <H2>Tuscany DAS Companies WEB Example</H2> <form> <input type="submit" id="doFill" name="doFill" value="All Companies"> <input type="submit" id="doFillAll" name="doFillAll" value="All Companies/Departments"> <input type="submit" id="doAddDepartment" name="doAddDepartment" value="Add department to first company"> <input type="submit" id="doChangeDepartmentNames" name="doChangeDepartmentNames" value="Change Company(1) Dept names"> <input type="submit" id="doDeleteDepartments" name="doDeleteDepartments" value="Delete Company(1) Depts"> <hr> <!-- Do Fill --> <%if(request.getParameter("doFill") != null){%> <table border> <thead> <tr> <th>ID</th> <th>Name</th> </tr> </thead> <tbody> <% CompanyClient companyClient = new CompanyClient(); java.util.Iterator i = companyClient.getCompaniesWithDepartments().iterator(); while (i.hasNext()) { DataObject company = (DataObject)i.next(); %> <tr> <td><%=company.getInt("ID")%></td> <td><%=company.getString("NAME")%></td> <tr> <% } companyClient.releaseResources(); %> </tbody> </table> <%}%> <!-- Do Add Department --> <% if(request.getParameter("doAddDepartment") != null){ CompanyClient companyClient = new CompanyClient(); companyClient.addDepartmentToFirstCompany(); companyClient.releaseResources(); } %> <!-- Do Delete Departments from first company --> <% if(request.getParameter("doDeleteDepartments") != null){ CompanyClient companyClient = new CompanyClient(); companyClient.deleteDepartmentsFromFirstCompany(); companyClient.releaseResources(); } %> <!-- Do Change First Company's Department Names --> <% if(request.getParameter("doChangeDepartmentNames") != null){ CompanyClient companyClient = new CompanyClient(); companyClient.changeFirstCompanysDepartmentNames(); companyClient.releaseResources(); } %> <!-- Do FillAll --> <%if(request.getParameter("doFill") == null) {%> <table border> <thead> <tr> <th>ID</th> <th>Name</th> <th>Department_ID</th> <th>Department_Name</th> </tr> </thead> <tbody> <% CompanyClient companyClient = new CompanyClient(); java.util.Iterator i = companyClient.getCompaniesWithDepartments().iterator(); while (i.hasNext()) { DataObject company = (DataObject)i.next(); %> <tr> <td><%=company.getInt("ID")%></td> <td><%=company.getString("NAME")%></td> <tr> <% java.util.Iterator j = company.getList("departments").iterator(); while (j.hasNext()) { DataObject department = (DataObject)j.next(); %> <tr> <td></td><td></td><td><%=department.getInt("ID")%></td> <td><%=department.getString("NAME")%></td> <tr> <% } %> <% } companyClient.releaseResources(); %> </tbody> </table> <%}%> </form> </body> </html>
...
All setup is complete now. Run the application in Tomcat and try different options like query company and
departments, addition, deletion.
How do I run this? Can you provide an example?