0

I'm very new in openfire and first time using java, I got stuck when I trying to develop plugin for crud. Could you give me some sample to make crud plugin ability? Thanks for your help before...

thelastone
  • 35
  • 1
  • 6

1 Answers1

0

You can start from this answer: Mapping Openfire Custom plugin with aSmack Client

and follow the official tutorial with first 3 points of the answer.

About CRUD:

Let's assume you want to audit all your messages as XML in your database, so you'll implement a PacketInterceptor just to keep an easy scenario.

Your class plugin will looks like:

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

in method initializePlugin you'll have an invokation like:

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

and in method interceptPacket something like that:

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

now let's write on database:

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

please keep in mind this is a reduced snippet of a working code, so there can be some sintax to fix

If your CRUD must follow an explicit IQ request, you'll have to extends an IQHandler and create a custom IQ and send to the client in handleIQ(IQ packet) method. You can check in Openfire sourcecode about detailed and complex implementations.

Community
  • 1
  • 1
MrPk
  • 2,862
  • 2
  • 20
  • 26