有時候某個單體
Agent需要周期性的執(zhí)行某項動作,比如某個
Agent需要定時從互聯(lián)網(wǎng)上抓取某些公開數(shù)據(jù)以填充自身知識庫,或者對本地數(shù)據(jù)庫進行操作和更新。對
JADE來說,用TickerBehaviour很容易實現(xiàn),下面是一個周期性操作數(shù)據(jù)庫的簡單例子。
package
jade.capScoreAdopter;
import
jade.core.*;
import
jade.core.behaviours.*;
import java.sql.*;
import common.DataBaseConnection;
public class IndustryScoreAdopt extends
Agent {
protected void adoptScore(){
Connection conn=null;
CallableStatement proc=null;
try{
conn=DataBaseConnection.getConnection();
proc=conn.prepareCall("{call P_WriteIndustryScore}");
proc.close();
conn.close();
}
catch (SQLException e)
{
System.out.println("調(diào)用存儲過程出錯!");
}
}
protected void setup() {
System.out.println("
Agent " + getLocalName() + " started.");
addBehaviour(new TickerBehaviour(this, 1000000) {// 1000秒執(zhí)行一次
protected void onTick() {
adoptScore();
System.out.println("
Agent " + myAgent.getLocalName()
+ "執(zhí)行一次知識調(diào)整: tick=" + getTickCount());
}
});
}
}
附:創(chuàng)建數(shù)據(jù)庫連接類
package common;
import java.sql.*;
public class DataBaseConnection {
public static Connection getConnection(){
Connection conn=null;
// 連接數(shù)據(jù)庫,sqlserver連接串
String CLASSFORNAME="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String SERVANDDB="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=enterprisediagnose";
String USER="sa";//用戶和密碼
String PWD="sa";
try{
Class.forName(CLASSFORNAME);
conn = java.sql.DriverManager.getConnection(SERVANDDB,USER,PWD);
}catch(Exception e){
e.printStackTrace();
System.out.println("Error Trace in getConnection() : " + e.getMessage());
}
return conn;
}
}
[from
http://blog.chinaunix.net/u/17663/showart_378411.html]