有时候某个单体Agent需要周期性的执行某项动作,比如某个Agent需要定时从互联网上抓取某些公开数据以填充自身知识库,或者对本地数据库进行操作和更新。对JADE来说,用TickerBehaviour很容易实现,下面是一个周期性操作数据库的简单例子。
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("调用存储过程出错!"); } } protected void setup() { System.out.println("Agent " + getLocalName() + " started."); addBehaviour(new TickerBehaviour(this, 1000000) {// 1000秒执行一次 protected void onTick() { adoptScore(); System.out.println("Agent " + myAgent.getLocalName() + "执行一次知识调整: tick=" + getTickCount()); } }); } } 附:创建数据库连接类 package common; import java.sql.*; public class DataBaseConnection { public static Connection getConnection(){ Connection conn=null; // 连接数据库,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./u/17663/showart_378411.html] |
|