0
我在openfire和第一次使用java時非常新,當我嘗試開發用於crud的插件時,我陷入了困境。你可以給我一些樣本來製作碎裂插件的能力嗎?感謝您之前幫助...如何爲crud創建插件openfire
我在openfire和第一次使用java時非常新,當我嘗試開發用於crud的插件時,我陷入了困境。你可以給我一些樣本來製作碎裂插件的能力嗎?感謝您之前幫助...如何爲crud創建插件openfire
你可以從這個答案開始:Mapping Openfire Custom plugin with aSmack Client
,並按照與回答的第一個3分官方教程。
關於CRUD:
假設要審覈數據庫中的所有消息爲XML,所以你實現一個PacketInterceptor
只是爲了讓一個簡單的場景。
你的類插件會看起來像:
public class MyCustomPlugin implements Plugin, PacketInterceptor {//foo}
的方法initializePlugin你有一個像invokation:
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必須遵循的明確智商請求,您必須擴展IQHandler
並創建自定義IQ並通過handleIQ(IQ packet)
方法發送給客戶端。您可以在Openfire源代碼中查看詳細和複雜的實現。