我在openfire中非常新,第一次使用java,当我尝试为crud开发插件时,我遇到了困难。你能给我一些样本来制作crud插件的能力吗?谢谢你的帮助......
答案 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源代码中查看详细和复杂的实现。