2017-05-16 79 views
0

我在openfire和第一次使用java時非常新,當我嘗試開發用於crud的插件時,我陷入了困境。你可以給我一些樣本來製作碎裂插件的能力嗎?感謝您之前幫助...如何爲crud創建插件openfire

回答

0

你可以從這個答案開始:Mapping Openfire Custom plugin with aSmack Client

,並按照與回答的第一個3分官方教程。

關於CRUD:

假設要審覈數據庫中的所有消息爲XML,所以你實現一個PacketInterceptor只是爲了讓一個簡單的場景。

你的類插件會看起來像:

public class MyCustomPlugin implements Plugin, PacketInterceptor {//foo} 

的方法initializePlugin你有一個像invokation:

public void initializePlugin(PluginManager manager, File pluginDirectory) 
{ 
    InterceptorManager.getInstance().addInterceptor(this); 
} 

和方法interceptPacket類似的東西:

@Override 
public void interceptPacket(Packet packet, Session session, 
     boolean incoming, boolean processed) throws PacketRejectedException { 


    if (!processed) 
    { 
    boolean done = doMyCRUDAction(packet); 
    } 

     if (!done) 
{ //do something if error occourred} 
    } 

現在讓我們寫數據庫:

private static final String AUDIT_CHAT = 
      "INSERT INTO MYTABLE(MESSAGEASXML) VALUES (?)"; 

private boolean doMyCRUDAction(Packet packet) 
{ 
    if ((packet instanceof Message)) 
     { 
      Message message = (Message) packet.createCopy(); 
boolean isAudited = false; 

     Connection con = null; 
     PreparedStatement statement = null; 
     try { 
      con = DbConnectionManager.getConnection(); 


      statement = con.prepareStatement(AUDIT_CHAT); 


      statement.setString(1, message.toString()); 


      statement.executeQuery(); 

      isAudited = true; 

     } 
     catch (SQLException e) { 
      Log.error(e.getMessage(), e); 

     } 
     catch (Exception ex) 
     { 
      Log.error(ex.getMessage(), ex); 
     } 
     finally { 
      DbConnectionManager.closeConnection(statement, con); 
     } 


     return isAudited; 
} 
} 

請記住,這是一個工作代碼減少片段,因此可以有一些sintax修復

如果你的CRUD必須遵循的明確智商請求,您必須擴展IQHandler並創建自定義IQ並通過handleIQ(IQ packet)方法發送給客戶端。您可以在Openfire源代碼中查看詳細和複雜的實現。