Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Create the file CompanyClient.java in the directory (Tomcat root)/webapps/companyweb/WEB-INF/classes/org/apache/tuscany/samples/das/companyweb
  2. Write the following code in the file :
    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
  3. 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>
    

E. Creating web and context configuration files supporting Tomcat

...

  1. Under WEB-INF create following web.xml file and save it.
    web.xml
    No Format
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!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 sample Company  WEB</display-name>
    
        <welcome-file-list id="WelcomeFileList">
            <welcome-file>Company.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    

...

  1. Under META-INF create following context.xml file and save it.
    context.xml
    No Format
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    

...

  1. Under (Tomcat root)/conf modify server.xml with following entry in <GlobalNamingResources>
    No Format
    
    <Resource name="jdbc/dastest"
    type="javax.sql.DataSource"  auth="Container"
    description="MySQL database for DAS Web sample"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="" password=""
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql:///dastest?user=xxx&password=yyy"/>
    

F. Run the sample companyweb

...