2016-08-31 16 views
0

現在、私は複数のエージェントを持つJADEアプリケーションを開発しようとしており、それぞれが共通のデータベースに接続しています。私はSQLiteアプリケーションを管理する方法を知っています。たとえば、あるJADEエージェントに表を表示するなどの問題はありません。Java JADE - SQLiteデータベースを共有するマルチエージェントアプリケーションを開発する

問題がある:

私は一度、別のエージェントZからそれらを実行するのは、B、Cの それらを呼びましょう、同じSQLiteのデータベースを共有する3つのエージェントを作成 - このエージェントは、エージェントのみを起動するために使用されています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(); 
      } 
     } 
    }); 
} 

決して例外が指定されています。

私は間違っていますか?

答えて

0

は、この命令を削除します。答えを

doDelete(); 
+2

感謝を。なぜこれが問題を引き起こしたのか少し詳しく教えていただけますか? –

+0

'それはエージェントを殺し、私たちは循環行動を持っているので、エージェントを生き残らせる必要があります – Katty

関連する問題