如何为crud创建插件openfire

时间:2017-05-16 07:21:46

标签: java plugins openfire

我在openfire中非常新,第一次使用java,当我尝试为crud开发插件时,我遇到了困难。你能给我一些样本来制作crud插件的能力吗?谢谢你的帮助......

1 个答案:

答案 0 :(得分:0)

您可以从这个答案开始: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;
}
}

请记住,这是一个简化的工作代码片段,因此可以修复一些sintax

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