Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
Hi Guys,
I want to copy workflow process data into a postgres database before completing the process. So I'm trying to implement a Workflow Process Tool Plugin that can load data from FormRow and save using some spring classes available in spring jar. But when the process runs it returns following error. But i found that  SimpleDriverDataSource is available in default spring jar. How can I resolve this error?
ERROR 06 Mar 2015 10:49:33 org.joget.apps.app.web.JsonResponseFilter - java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/SimpleDriverDataSource java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/SimpleDriverDataSource .... .... .... Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.datasource.SimpleDriverDataSource not found by nz.net.snap.workflow-joget-archiver [1] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460) at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72) at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843) at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
My Plugin class as follow.
package org.joget.workflow; import java.io.IOException; import java.sql.Driver; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import org.joget.apps.app.dao.FormDefinitionDao; import org.joget.apps.app.model.AppDefinition; import org.joget.apps.app.model.FormDefinition; import org.joget.apps.app.service.AppService; import org.joget.apps.app.service.AppUtil; import org.joget.apps.form.model.FormRowSet; import org.joget.commons.util.DynamicDataSourceManager; import org.joget.commons.util.LogUtil; import org.joget.plugin.base.DefaultApplicationPlugin; import org.joget.plugin.base.PluginProperty; import org.joget.plugin.base.PluginWebSupport; import org.joget.workflow.model.WorkflowAssignment; import org.springframework.beans.BeansException; import org.springframework.jdbc.core.simple.SimpleJdbcInsert; import org.springframework.jdbc.datasource.SimpleDriverDataSource; public class MyTool extends DefaultApplicationPlugin implements PluginWebSupport { private static final String TAG = "MyTool1"; @Override public String getName() { return "My Tool"; } @Override public String getVersion() { return "1.0"; } @Override public String getDescription() { return getName(); } @Override public String getLabel() { return getName(); } @Override public String getClassName() { return getClass().getName(); } @Override public PluginProperty[] getPluginProperties() { return null; } @Override public String getPropertyOptions() { return null; } @Override public void webService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { String action = request.getParameter("action"); LogUtil.info(TAG, ">>>>>>>action=" + action); String processId = request.getParameter("id"); // saveRecord(processId); } catch (Exception e) { LogUtil.info(TAG, e.getMessage()); } } @Override public Object execute(Map properties) { WorkflowAssignment wfAssignment = (WorkflowAssignment) properties.get("workflowAssignment"); LogUtil.debug(TAG, wfAssignment.getActivityId()); String processId = appService().getOriginProcessId(wfAssignment.getProcessId()); return saveRecord(processId); } private Object saveRecord(String processId) { AppService appService = appService(); try { //Get primary key AppDefinition appDef = appService.getAppDefinitionForWorkflowProcess(processId); //Get existing data String provFormDefId = "my_from_def"; FormDefinition provFormDef = formDefDao().loadById(provFormDefId, appDef); FormRowSet provDataSet = appService.loadFormData(appDef.getAppId(), appDef.getVersion().toString(), provFormDefId, processId); String provTable = provFormDef.getTableName(); LogUtil.info(TAG, ">>>>>>>>>>>>>>>>>>>>>> " + provDataSet.toString()); try { String driverClass = "org.postgresql.Driver"; String dbURL = "jdbc:postgresql://localhost/workflow"; String user = "admin"; String password = "mypass"; String dbSchema = "public"; Driver driver = (Driver) Class.forName(driverClass).newInstance(); // DataSource ds = new SimpleDriverDataSource(driver, dbURL, user, password); SimpleJdbcInsert insert = new SimpleJdbcInsert(ds); insert.withSchemaName(dbSchema); insert.withTableName(provTable); insert.executeAndReturnKey(provDataSet.get(0).getCustomProperties()); } catch (Exception e) { LogUtil.info(TAG, e.getMessage()); LogUtil.error(TAG, e, e.getMessage()); } finally { DynamicDataSourceManager.changeProfile("default"); } } catch (Exception e) { LogUtil.info(TAG, e.getMessage()); LogUtil.error(TAG, e, e.getMessage()); } finally { } return null; } private static FormDefinitionDao formDefDao() throws BeansException { return (FormDefinitionDao) AppUtil.getApplicationContext().getBean("formDefinitionDao"); } private static AppService appService() throws BeansException { return (AppService) AppUtil.getApplicationContext().getBean("appService"); } }