?? db.py
字號:
import javaimport jacommafrom jacomma.icm.type import Symbolfrom jacomma.platform.core import Agent, AgentManager, \ MessagePattern, AgentObserver, AgentObserverAdapter# The Message Handler classclass QueryHandler( Agent.MessageHandler ): def onMessage( self, agent, msg ): print agent, ": Incoming query", msg.getContent().get( 1 ) con = agent.getProperty( "connection" ) try: stmt = con.createStatement() res = java.util.ArrayList() rs = stmt.executeQuery( msg.getContent().get( 1 ) ) md = rs.getMetaData() cc = md.getColumnCount() res.add( Symbol( "query-ref" ) ) head = java.util.ArrayList() res.add( head ) # column labels for i in range( 1, cc + 1 ) : head.add( md.getColumnLabel( i ) ) # result set rsl = java.util.ArrayList() res.add( rsl ) while( rs.next() ) : cur = java.util.ArrayList() rsl.add( cur ) for i in range( 1, cc + 1 ): cur.add( rs.getObject( i ) ) print agent, "Query processed" agent.send( msg.replyto(), res ) except java.sql.SQLException, exc: print agent, exc.getMessage() res = java.util.ArrayList() res.add( Symbol( "query-error" ) ) res.add( exc.getMessage() ) agent.send( msg.replyto(), res )# The Message Handler classclass UpdateHandler( Agent.MessageHandler ): def onMessage( self, agent, msg ): print agent, ": Incoming update", msg.getContent().get( 1 ) con = agent.getProperty( "connection" ) try: stmt = con.createStatement() res = java.util.ArrayList() res.add( Symbol( "update-ref" ) ) res.add( java.lang.Integer( stmt.executeUpdate( msg.getContent().get( 1 ) ) ) ) print agent, "Update processed" agent.send( msg.replyto(), res ) except java.sql.SQLException, exc: print agent, exc.getMessage() res = java.util.ArrayList() res.add( Symbol( "update-error" ) ) res.add( exc.getMessage() ) agent.send( msg.replyto(), res ) ## The pattern test objectclass query_test( java.lang.Object ) : def equals( self, msg ) : l = msg.getContent() return java.util.List.isInstance( l ) \ and l.size() == 2 \ and l.get( 0 ).equals( Symbol( "query" ) ) \ and java.lang.String.isInstance( l.get( 1 ) ) ## The pattern test objectclass update_test( java.lang.Object ) : def equals( self, msg ) : l = msg.getContent() return java.util.List.isInstance( l ) \ and l.size() == 2 \ and l.get( 0 ).equals( Symbol( "update" ) ) \ and java.lang.String.isInstance( l.get( 1 ) )# The local observerclass DBObserver( AgentObserverAdapter ): def __init__( self, con ) : self.con_ = con def onRegisteredAgent( self, agent, at ): agent.setProperty( "connection", self.con_ ) query_ptrn = MessagePattern.createPattern( java.util.List, query_test() ) agent.registerHandler( query_ptrn, QueryHandler() ) update_ptrn = MessagePattern.createPattern( java.util.List, update_test() ) agent.registerHandler( update_ptrn, UpdateHandler() ) def onDeregisteredAgent( self, agent, at ) : self.con_.close()## the code that creates the agentdef spawnAgent( name, driver, url, user, passwd ) : java.lang.Class.forName( driver ) con = java.sql.DriverManager.getConnection( url, user, passwd ) return AgentManager.instance.createAgent( name, DBObserver( con ) )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -