Java JADE - 开发多代理应用程序共享SQLite数据库

时间:2016-08-31 20:56:01

标签: java sqlite agents-jade

目前我正在尝试开发具有多个代理的JADE应用程序,每个代理都连接到一个公共数据库。我知道如何管理SQLite应用程序,我没有任何问题,例如在一个JADE代理中显示表。

问题是:

我创建了3个共享相同SQLite数据库的代理,让我们称它们为A,B,C。 我从另一个代理Z立即运行它们 - 这个代理仅用于启动代理A,B和C. 代理应在从数据库中选择或插入数据时结束其工作。有时候,例如,代理人A做了他的工作,B和C没有。另一次代理商A和C做了他们的工作而B没有(这就像永远挂起)。我让不同的代理人结束了,但从来没有所有代理人一起完成他们的工作。

代码非常简单,所有代理都很相似:

protected void setup() 
{
    Object args[] = getArguments();
    if (args.length > 0) {
        id = args[0].toString();
    }

    addBehaviour(new CyclicBehaviour(this) 
    {
        @Override
        public void action() 
        {
            Statement stmt = null;
            try {                       
                stmt = connection.createStatement();
                String sql = "DROP TABLE IF EXISTS TblTemp;"; 
                stmt.executeUpdate(sql);
                stmt.close();

                stmt = connection.createStatement();
                sql = "CREATE TABLE TblTemp" +
                             "(AdID INT PRIMARY KEY NOT NULL," +
                             " CategoryID INT NOT NULL, " + 
                             " Title TEXT NOT NULL, " + 
                             " IsContext INT);"; 
                stmt.executeUpdate(sql);
                stmt.close();

                stmt = connection.createStatement();
                sql = "INSERT INTO TblTemp SELECT AdID, CategoryID, Title, IsContext FROM TblWHERE CategoryID="+id+";";
                stmt.executeUpdate(sql);
                stmt.close();

                doDelete();

            } catch ( SQLException e ) {
                System.err.println( e.getClass().getName() + ": " + e.getMessage() );
                block();
            }
        }
    });
}

绝不会有任何例外。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

删除此说明:

doDelete();