创建和添加Codelets到Yawl



我正在使用yawl 4开发一个应用程序。我需要在自动化任务中添加一个codelet。我写了一个Java课,并根据各种教程添加了它,但没有任何效果。Yawl发动机日志有一个错误,但它只是说"错误加载Codelet X"没有任何详细信息。我检查了default default codelets寻找错误,但没有出现(我只是没有实现所有方法,可能是?)。这是我的代码:

public class PrepareDataTaskCodelet extends AbstractCodelet {
    private Connection connection;
    private Statement statement;
    private PreparedStatement preparedStatement;
    private ResultSet resultSet;
    private String user;
    private String password;
    private String getAllAppuser;
    private String getAllDocument;
    private String getAllRequest;
    private String getAllRole;
    private String tempQuery;
    private Element inData;
    private List<YParameter> inParams;
    private List<YParameter> outParams;
    private boolean cancelled;

    public PrepareDataTaskCodelet() {
        // TODO Auto-generated constructor stub
        super();
         connection = null;
            statement = null;
            preparedStatement = null;
            resultSet = null;
            user = null;
            password = null;
            tempQuery = null;
    }
      private ResultSet getSingleAppuser(String field, String data) throws SQLException{
            tempQuery = getAllAppuser + "WHERE " + field + " = " + data;
            connection.prepareStatement(tempQuery);
            resultSet = preparedStatement.executeQuery();
            return resultSet;
        }
        // controlla se è presente appuser con username e password. ritorna false se non viene trovato alcun appuser, true altrimenti
        public boolean checkAppuser(String username, String password) throws SQLException{
            tempQuery = getAllAppuser + "WHERE username = " + username + "AND password = " + password;
            connection.prepareStatement(tempQuery);
            resultSet = preparedStatement.executeQuery();
            return (resultSet.first()); 
        }
     public void initConnection() throws Exception { // starts connection
            try {
                    Class.forName("com.mysql.jdbc.Driver");               
                    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/yawlConnection","root","root"); //default connection values
                } finally {}
        }
    public PrepareDataTaskCodelet(String desc) {
        super(desc);
        // TODO Auto-generated constructor stub
    }

    @Override   // TODO assegnare paramentri in ingresso (user e pw)
    public Element execute(Element inData, List<YParameter> inParams, List<YParameter> outParams)
            throws CodeletExecutionException {
        // TODO Auto-generated method stub
           setInputs(inData, inParams, outParams);
        String username = "";
        String password = "";
        boolean isValidUser = false;
         username = (String) getParameterValue("username");
         password = (String) getParameterValue("password");
         try {
            initConnection();
            isValidUser = checkAppuser(username, password);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         setParameterValue("isValidUser", String.valueOf(isValidUser));
        return getOutputData();
    }
    protected void setInputs(Element inData, List<YParameter> inParams, List<YParameter> outParams)
      {
        this.inData = inData;
        this.inParams = inParams;
        this.outParams = outParams;
      }
    public void cancel()
      {
        this.cancelled = true;
      }
      public List<YParameter> getRequiredParams() { // corretto
            List<YParameter> params = new ArrayList<YParameter>();
            YParameter param1 = new YParameter(null, YParameter._INPUT_PARAM_TYPE);
            param1.setDataTypeAndName("String", "username", XSD_NAMESPACE);
            param1.setDocumentation("appuser username");
            params.add(param1);
            YParameter param2 = new YParameter(null, YParameter._INPUT_PARAM_TYPE);
            param2.setDataTypeAndName("String", "password", XSD_NAMESPACE);
            param2.setDocumentation("appuser password");
            params.add(param2);
            YParameter param3 = new YParameter(null, YParameter._OUTPUT_PARAM_TYPE);
            param3.setDataTypeAndName("boolean", "isValidUser", XSD_NAMESPACE);
            param3.setDocumentation("check if current user has valid login data");
            params.add(param3);
            return params;
        }
}

我注意到yawl使用.class文件作为codelets,但是我的codelet是一个.java文件,所以我尝试移植它,但我没有成功。有人对4个码头有经验吗?或者,有人可以告诉我如何使用.class文件而不是.java?

我自己发现。必须将库(除Java默认值除外)与.class文件相同的文件夹中。这足以让工作流编辑器注意我的codelet。

最新更新