Java 如何为crud创建插件openfire

Java 如何为crud创建插件openfire,java,plugins,openfire,Java,Plugins,Openfire,我是openfire的新手,第一次使用java时,我在尝试为crud开发插件时遇到了麻烦。你能给我一些制作crud插件的例子吗?感谢您在…之前的帮助。您可以从以下答案开始: 并按照官方教程给出答案的前3点 关于积垢: 假设您希望在数据库中以XML形式审核所有消息,因此将实现一个PacketInterceptor,以保持简单的场景 您的类插件将如下所示: public class MyCustomPlugin implements Plugin, PacketInterceptor {//foo}

我是openfire的新手,第一次使用java时,我在尝试为crud开发插件时遇到了麻烦。你能给我一些制作crud插件的例子吗?感谢您在…之前的帮助。

您可以从以下答案开始:

并按照官方教程给出答案的前3点

关于积垢:

假设您希望在数据库中以XML形式审核所有消息,因此将实现一个
PacketInterceptor
,以保持简单的场景

您的类插件将如下所示:

public class MyCustomPlugin implements Plugin, PacketInterceptor {//foo}
在方法initializePlugin中,您将进行如下调用:

public void initializePlugin(PluginManager manager, File pluginDirectory)
{
    InterceptorManager.getInstance().addInterceptor(this);
}
在这种情况下:

@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必须遵循显式IQ请求,则必须扩展
IQHandler
,并创建自定义IQ,并在
handleIQ(IQ数据包)
方法中发送给客户端。您可以在Openfire源代码中查看详细和复杂的实现