Java 创建Codelet并将其添加到YAWL
我正在用yawl4开发一个应用程序。我需要向自动化任务添加一个codelet。我编写了一个java类,并在各种教程之后添加了它,但没有任何效果。YAWL引擎日志给出了一个错误,但它只是说“加载codelet x时出错”,没有任何细节。我检查了YAWL默认的codelets以查找错误,但没有任何结果(我只是没有实现所有的方法,可能是这样吗?)。这是我的密码:Java 创建Codelet并将其添加到YAWL,java,bpmn,business-process-management,yawl,Java,Bpmn,Business Process Management,Yawl,我正在用yawl4开发一个应用程序。我需要向自动化任务添加一个codelet。我编写了一个java类,并在各种教程之后添加了它,但没有任何效果。YAWL引擎日志给出了一个错误,但它只是说“加载codelet x时出错”,没有任何细节。我检查了YAWL默认的codelets以查找错误,但没有任何结果(我只是没有实现所有的方法,可能是这样吗?)。这是我的密码: public class PrepareDataTaskCodelet extends AbstractCodelet { pri
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;
}
}
公共类preparedataskcodelet扩展了AbstractCodelet{
专用连接;
私人声明;
私人编制的报表;
私有结果集结果集;
私有字符串用户;
私有字符串密码;
私有字符串getAllAppuser;
私有字符串getAllDocument;
私有字符串getAllRequest;
私有字符串getAllRole;
私有字符串查询;
私有元素inData;
私有列表参数;
私有列表输出参数;
取消私有布尔值;
公共准备的StataskCodelet(){
//TODO自动生成的构造函数存根
超级();
连接=空;
语句=null;
preparedStatement=null;
resultSet=null;
user=null;
密码=null;
tempQuery=null;
}
私有结果集getSingleAppuser(字符串字段,字符串数据)引发SQLException{
tempQuery=getAllAppuser+“其中”+字段+“=”+数据;
connection.prepareStatement(临时查询);
resultSet=preparedStatement.executeQuery();
返回结果集;
}
//controlla seèpresente appuser con username e password.ritorna false se non viene trovato alcun appuser,true altrimenti
公共布尔checkAppuser(字符串用户名、字符串密码)引发SQLException{
tempQuery=getAllAppuser+“其中username=“+username+”和password=“+password;
connection.prepareStatement(临时查询);
resultSet=preparedStatement.executeQuery();
返回(resultSet.first());
}
public void initConnection()引发异常{//启动连接
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
connection=DriverManager.getConnection(“jdbc:mysql://localhost:3306/yawlConnection“,”根“,”根“;//默认连接值
}最后{}
}
public preparedataskcodelet(字符串描述){
超级(desc);
//TODO自动生成的构造函数存根
}
@在ingresso中重写//TODO assegnare paramentri(用户e pw)
公共元素执行(元素inData、列表inParams、列表outParams)
抛出CodeLeteExecutionException{
//TODO自动生成的方法存根
设置输入(inData、inParams、outParams);
字符串username=“”;
字符串密码=”;
布尔值isValidUser=false;
用户名=(字符串)getParameterValue(“用户名”);
密码=(字符串)getParameterValue(“密码”);
试一试{
initConnection();
isValidUser=checkAppuser(用户名、密码);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
setParameterValue(“isValidUser”,String.valueOf(isValidUser));
返回getOutputData();
}
受保护的无效设置输入(元素inData、列表inParams、列表outParams)
{
this.inData=inData;
this.inParams=inParams;
this.outParams=outParams;
}
公开作废取消()
{
this.cancelled=true;
}
公共列表getRequiredParams(){//corretto
List params=new ArrayList();
YParameter param1=新的YParameter(null,YParameter.\u输入\u参数类型);
param1.setDataTypeAndName(“字符串”、“用户名”、XSD_名称空间);
param1.setDocumentation(“appuser用户名”);
参数添加(参数1);
YParameter param2=新的YParameter(空,YParameter.\u输入\u参数类型);
param2.setDataTypeAndName(“字符串”、“密码”、XSD_名称空间);
param2.setDocumentation(“appuser密码”);
参数添加(参数2);
YParameter param3=新的YParameter(空,YParameter.\u输出\u参数类型);
param3.setDataTypeAndName(“布尔”、“isValidUser”、XSD_名称空间);
param3.setDocumentation(“检查当前用户是否有有效的登录数据”);
参数添加(参数3);
返回参数;
}
}
我注意到yawl使用.class文件作为codelet,但我的codelet是一个.java文件,所以我尝试移植它,但没有成功。有人对Yawl 4 Codelet有经验吗?或者,有人能告诉我如何使用.class文件而不是.java吗?我自己发现的。类使用的库(java默认库除外)必须与.class文件放在同一文件夹中。这足以让工作流编辑器注意到我的codelet