AppParameter Question

Sean McDonald <[email protected]> Fri, 23 Sep 2005 16:50:41 +0200
Newsgroups gmane.comp.java.enhydra.shark
Organization Obsidian
Message-ID <[email protected]>
I have a datafield that is defined thusly:

<DataField Id="AllCompanies" IsArray="TRUE">
                    <DataType>
                        <BasicType Type="STRING"/>
                    </DataType>
</DataField>

I'm using it in a tool agent, to return a list of companies from the 
database.

Here's the method in question:

public static void execute(AppParameter tableName, AppParameter 
descriptionExpression,
                               AppParameter idField, AppParameter 
filterField,
                               AppParameter filterValue, AppParameter 
results) {
        //make a connection to the database
       
//        Database variables

        Connection db = null; // A connection to the database

        Statement sql = null; // Our statement to run queries with

        DatabaseMetaData dbmd = null; // This is basically info the 
driver delivers
       
        ResultSet rs = null;
       
        //Initialize variables
        String database = "//localhost/jpadmin";
        String username = "jpadmin";
        String password = "jpadmin";
       
        try {
            Class.forName("org.postgresql.Driver"); //load the driver
            db = DriverManager.getConnection("jdbc:postgresql:" + database,
                    username, password); //connect to the db
            dbmd = db.getMetaData(); //get MetaData to confirm connection
            System.out.println("Connection to " + 
dbmd.getDatabaseProductName()
                    + " " + dbmd.getDatabaseProductVersion() + " 
successful.\n");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        //parse the query
        String queryText = "SELECT " + (String) idField.the_value + ", " 
+ (String) descriptionExpression.the_value + " " +
                           "FROM " + (String) tableName.the_value + " ";
       
        //if filter clauses were specified, add them to the query
        if(filterField.the_length > 0){
            String filterText = "WHERE " + (String) 
filterField.the_value + "=" + (String) filterValue.the_value;
            queryText = queryText + filterText;
        }
       
       
       
        //create & execute the query
        try {
            sql = db.createStatement();
            rs = sql.executeQuery(queryText);
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
       
        ArrayList myList = new ArrayList();
       
        //build the array list
        int i = 1;
        try {
            while(rs.next()){
                listElement myElement = new listElement();
                int id = rs.getInt(1);
                String description = rs.getString(2);
                myList.add(id + "  " + description);
            }
        } catch (SQLException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
       
        //create the results
        String[] strResults = (String[]) myList.toArray(new String[0]);
       
-----  This is the part i'm uncertain about - i'm not sure how to 
transfer the String array I've created back to the results AppParameter
       
    results.the_value = strResults;
              
}

Here's the error stack:

2005-09-23 14:55:48,612: Rollback of Shark transaction happened.
org.enhydra.shark.api.client.wfmodel.InvalidData: Invalid data type for 
activity variable AllCompanies
    at 
org.enhydra.shark.WfActivityImpl.setProcessContext(WfActivityImpl.java:470)
    at org.enhydra.shark.WfActivityImpl.set_result(WfActivityImpl.java:279)
    at 
org.enhydra.shark.ToolAgentManagerImpl$ToolRunner.invokeApplication(ToolAgentManagerImpl.java:247)
    at 
org.enhydra.shark.ToolAgentManagerImpl$ToolRunner.run(ToolAgentManagerImpl.java:96)
    at 
org.enhydra.shark.ToolAgentManagerImpl.executeActivity(ToolAgentManagerImpl.java:67)
    at org.enhydra.shark.WfActivityImpl.runTool(WfActivityImpl.java:1269)
    at 
org.enhydra.shark.WfActivityImpl.startActivity(WfActivityImpl.java:1212)
    at org.enhydra.shark.WfActivityImpl.activate(WfActivityImpl.java:1157)
    at org.enhydra.shark.WfProcessImpl.startActivity(WfProcessImpl.java:816)
    at org.enhydra.shark.WfProcessImpl.run(WfProcessImpl.java:695)
    at org.enhydra.shark.WfProcessImpl.start(WfProcessImpl.java:365)
    at org.enhydra.shark.WfProcessWrapper.start(WfProcessWrapper.java:571)
    at org.enhydra.shark.WfProcessWrapper.start(WfProcessWrapper.java:531)
    at org.enhydra.shark.corba.WfProcessCORBA.start(WfProcessCORBA.java:166)
    at 
org.omg.WorkflowModel._WfProcessImplBase._invoke(_WfProcessImplBase.java:193)
    at 
com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:608)
    at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:461)
    at com.ibm.rmi.iiop.ORB.process(ORB.java:436)
    at com.ibm.CORBA.iiop.ORB.process(ORB.java:1728)
    at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2230)
    at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:65)
    at com.ibm.rmi.iiop.WorkerThread.run(ThreadPoolImpl.java:203)
    at java.lang.Thread.run(Thread.java:568)


What I'm asking is how i can pass this array of Strings back to Shark 
correctly?

I'm painfully new to all of this, so please be gentle :)

Many thanks
Sean
message-footer.txt (text/plain, 271 B)
--
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
ObjectWeb mailing lists service home page: http://www.objectweb.org/wws