在 JBPM6 中创建自定义连接 table
create connection in JBPM6 to custom table
我想为在线航空公司预订系统设计 jbpm 流程。作为第一步,我正在尝试进行旅行者注册流程,用户将在其中注册他们的详细信息。当他们尝试注册它时,它必须将用户输入的详细信息存储到不同 table 的数据库中。
我创建的进程。
开始节点->旅行者表格->注册任务->结束
我已经在 public 模式下在 h2 数据库中创建了名为 ARS_traveller 的 table。
在自定义工作项处理程序中,我给出如下,但它通过错误 table 未找到。请建议 tables.
连接到数据库的正确程序
@Override
public void abortWorkItem(WorkItem arg0, WorkItemManager arg1) {
// TODO Auto-generated method stub
}
@Override
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
Context ctx;
try {
System.out.println("*********From direct connection**************");
Connection conn = this.getDirectConnection();
conn.setAutoCommit(true);
PreparedStatement stmt = conn
.prepareStatement("INSERT INTO ARS_TRAVELLER(NAME,EMAIL,USER_ID,PASSWORD,GENDER,"
+ "AGE,MOBILE_NO,ADDRESS,CREATED_ON,UNIQUECODE,VERIFIED) VALUES(?,?,?,?,?,?,?,?,?,?,?)");
stmt.setString(0, workItem.getParameter("Name").toString());
stmt.setString(1, workItem.getParameter("Email").toString());
stmt.setString(2, workItem.getParameter("UserId").toString());
stmt.setString(3, workItem.getParameter("Password").toString());
stmt.setString(4, workItem.getParameter("Gender").toString());
stmt.setInt(5,
Integer.parseInt(workItem.getParameter("Age").toString()));
stmt.setString(6, workItem.getParameter("MobileNo").toString());
stmt.setString(7, workItem.getParameter("Address").toString());
stmt.setDate(8, new Date((new java.util.Date()).getTime()));
stmt.setString(9, ((new java.util.Date()).getTime() + ""));
stmt.setBoolean(10, false);
stmt.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
manager.completeWorkItem(workItem.getId(), null);
}
private Connection getDirectConnection() {
Connection conn = null;
try {
String url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";
Class.forName("org.h2.Driver");
conn = DriverManager.getConnection(url, "sa", "sa");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return conn;
}
Table not found 是一个直接的错误,您要查找的 table 不存在。 1) 您的连接信息可能不正确,您没有连接到预期的数据库。或者 2) 如果您正在连接到正确的数据库,则很可能没有创建 table,或者它以某种方式被删除了。您是否有某种类型的应用程序可以查看您的数据库中有哪些 table 可用?如果不这样做,您可能需要查看 JDBC DatabaseMetaData.getTables method 以查看您的 table 是否存在。
这是我的理论。看起来您尝试使用的数据库与 JBPM 持久性数据库相同。我有一种感觉,每次重新部署 JBPM 环境时都会重新创建数据库,这会导致 ARS_Traveller table 被删除。我建议将您的应用程序数据保存到单独的数据库中。
除了使用单独的数据库,我会避免使用 JDBC。在 JPA 上,它已被弃用并且更难维护。
我想为在线航空公司预订系统设计 jbpm 流程。作为第一步,我正在尝试进行旅行者注册流程,用户将在其中注册他们的详细信息。当他们尝试注册它时,它必须将用户输入的详细信息存储到不同 table 的数据库中。
我创建的进程。
开始节点->旅行者表格->注册任务->结束
我已经在 public 模式下在 h2 数据库中创建了名为 ARS_traveller 的 table。
在自定义工作项处理程序中,我给出如下,但它通过错误 table 未找到。请建议 tables.
连接到数据库的正确程序@Override
public void abortWorkItem(WorkItem arg0, WorkItemManager arg1) {
// TODO Auto-generated method stub
}
@Override
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
Context ctx;
try {
System.out.println("*********From direct connection**************");
Connection conn = this.getDirectConnection();
conn.setAutoCommit(true);
PreparedStatement stmt = conn
.prepareStatement("INSERT INTO ARS_TRAVELLER(NAME,EMAIL,USER_ID,PASSWORD,GENDER,"
+ "AGE,MOBILE_NO,ADDRESS,CREATED_ON,UNIQUECODE,VERIFIED) VALUES(?,?,?,?,?,?,?,?,?,?,?)");
stmt.setString(0, workItem.getParameter("Name").toString());
stmt.setString(1, workItem.getParameter("Email").toString());
stmt.setString(2, workItem.getParameter("UserId").toString());
stmt.setString(3, workItem.getParameter("Password").toString());
stmt.setString(4, workItem.getParameter("Gender").toString());
stmt.setInt(5,
Integer.parseInt(workItem.getParameter("Age").toString()));
stmt.setString(6, workItem.getParameter("MobileNo").toString());
stmt.setString(7, workItem.getParameter("Address").toString());
stmt.setDate(8, new Date((new java.util.Date()).getTime()));
stmt.setString(9, ((new java.util.Date()).getTime() + ""));
stmt.setBoolean(10, false);
stmt.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
manager.completeWorkItem(workItem.getId(), null);
}
private Connection getDirectConnection() {
Connection conn = null;
try {
String url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";
Class.forName("org.h2.Driver");
conn = DriverManager.getConnection(url, "sa", "sa");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return conn;
}
Table not found 是一个直接的错误,您要查找的 table 不存在。 1) 您的连接信息可能不正确,您没有连接到预期的数据库。或者 2) 如果您正在连接到正确的数据库,则很可能没有创建 table,或者它以某种方式被删除了。您是否有某种类型的应用程序可以查看您的数据库中有哪些 table 可用?如果不这样做,您可能需要查看 JDBC DatabaseMetaData.getTables method 以查看您的 table 是否存在。
这是我的理论。看起来您尝试使用的数据库与 JBPM 持久性数据库相同。我有一种感觉,每次重新部署 JBPM 环境时都会重新创建数据库,这会导致 ARS_Traveller table 被删除。我建议将您的应用程序数据保存到单独的数据库中。
除了使用单独的数据库,我会避免使用 JDBC。在 JPA 上,它已被弃用并且更难维护。