在JBPM6中创建连接到自定义表

时间:2015-02-26 12:28:40

标签: jbpm

我想为在线航空公司预订系统设计jbpm流程。作为第一步,我正在尝试为旅行者注册做进程,用户将注册他们的详细信息。当他们尝试注册它时,它必须将用户已经停止的详细信息存储在不同表中的db中。

我创建的流程。

开始节点 - >旅行者表格 - >注册任务 - >端

我在公共架构下的h2数据库中创建了名为ARS_traveller的表。

在自定义工作项处理程序中,我已经给出如下,但它通过错误找不到表。请建议连接数据库表的正确程序。

@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;
    }

1 个答案:

答案 0 :(得分:1)

未找到表是一个直接错误,您要查找的表不存在。 1)您的连接信息可能不正确,并且您没有连接到预期的数据库。或2)如果您要连接到正确的数据库,则可能是表未创建,或者以某种方式删除了表。您是否有某种类型的应用程序来查看数据库中可用的表?如果不这样做,您可能需要查看JDBC DatabaseMetaData.getTables method以查看您的表是否存在。

这是我的理论。看起来您尝试使用的数据库与JBPM持久性数据库相同。我觉得每次重新部署JBPM环境时都会重新创建数据库,这会导致您的ARS_Traveller表被删除。我建议将您的应用程序数据保存到一个单独的数据库中。

除了使用单独的数据库,我还是会避免使用JDBC。它非常被弃用,并且比JPA更难维护。