2017-03-13 29 views
0

我正在開發一個應用程序與YAWL 4.我需要添加一個codelet到自動化任務。我寫了一個java類,並添加它遵循各種教程,但沒有任何工作。 YAWL引擎日誌提供了一個錯誤,但它只是說「錯誤加載codelet x」,沒有任何細節。我檢查了YAWL的默認codelet尋找錯誤,但沒有出現(我只是沒有實現所有的方法,可能是這樣?)。這裏是我的代碼:創建並添加codelet到YAWL

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文件爲小碼,但我的小碼是一個.java文件,所以我tryed端口,但我沒有成功。有人有關於Yawl 4 codelet的經驗嗎?或者,有人可以告訴我如何使用.class文件而不是.java?

回答

0

我自己發現了。該類使用的庫(java缺省值除外)必須放在與.class文件相同的文件夾中。這足以讓工作流編輯器注意到我的codelet。