【问题标题】:How to create plugin openfire for crud如何为 crud 创建插件 openfire
【发布时间】:2017-10-15 03:33:33
【问题描述】:

我是 openfire 的新手,第一次使用 java,当我尝试为 crud 开发插件时被卡住了。你能给我一些样本来制作 crud 插件功能吗?感谢您之前的帮助...

【问题讨论】:

    标签: java plugins openfire


    【解决方案1】:

    你可以从这个答案开始:Mapping Openfire Custom plugin with aSmack Client

    并按照官方教程回答前3点。

    关于 CRUD:

    假设您希望将数据库中的所有消息都审核为 XML,因此您将实现 PacketInterceptor 以保持简单的场景。

    你的类插件看起来像:

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

    initializePlugin 方法中,您将有如下调用:

    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;
    }
    }
    

    请记住,这是工作代码的简化 sn-p,因此可能需要修复一些 sintax

    如果您的 CRUD 必须遵循明确的 IQ 请求,则您必须扩展 IQHandler 并创建自定义 IQ 并以 handleIQ(IQ packet) 方法发送给客户端。您可以在 Openfire 源代码中查看详细和复杂的实现。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      相关资源
      最近更新 更多