【发布时间】:2017-10-15 03:33:33
【问题描述】:
我是 openfire 的新手,第一次使用 java,当我尝试为 crud 开发插件时被卡住了。你能给我一些样本来制作 crud 插件功能吗?感谢您之前的帮助...
【问题讨论】:
我是 openfire 的新手,第一次使用 java,当我尝试为 crud 开发插件时被卡住了。你能给我一些样本来制作 crud 插件功能吗?感谢您之前的帮助...
【问题讨论】:
你可以从这个答案开始: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 源代码中查看详细和复杂的实现。
【讨论】: