openfire中提供了生产序列的管理器(SequenceManager),其构造函数如下:
public SequenceManager(int seqType, int size) {
managers.put(seqType, this);
this.type = seqType;
this.blockSize = size;
currentID = 0l;
maxID = 0l;
}
seqType,为序列类型,默认有3种类型:
public static final int ROSTER = 18;
public static final int OFFLINE = 19;
public static final int MUC_ROOM = 23;
size:序列的增加值。例如a=a+2;
private void getNextBlock(int count) {
if (count == 0) {
Log.error("Failed at last attempt to obtain an ID, aborting...");
return;
}
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
boolean abortTransaction = false;
boolean success = false;
try {
con = DbConnectionManager.getTransactionConnection();
// Get the current ID from the database.
pstmt = con.prepareStatement(LOAD_ID);
pstmt.setInt(1, type);
rs = pstmt.executeQuery();
long currentID = 1;
if (rs.next()) {
currentID = rs.getLong(1);
}
else {
createNewID(con, type);
}
DbConnectionManager.fastcloseStmt(rs, pstmt);
// Increment the id to define our block.
long newID = currentID + blockSize;
// The WHERE clause includes the last value of the id. This ensures
// that an update will occur only if nobody else has performed an
// update first.
pstmt = con.prepareStatement(UPDATE_ID);
pstmt.setLong(1, newID);
pstmt.setInt(2, type);
pstmt.setLong(3, currentID);
// Check to see if the row was affected. If not, some other process
// already changed the original id that we read. Therefore, this
// round failed and we'll have to try again.
success = pstmt.executeUpdate() == 1;
if (success) {
this.currentID = currentID;
this.maxID = newID;
}
}
catch (SQLException e) {
Log.error(e.getMessage(), e);
abortTransaction = true;
}
finally {
DbConnectionManager.closeStatement(rs, pstmt);
DbConnectionManager.closeTransactionConnection(con, abortTransaction);
}
if (!success) {
Log.error("WARNING: failed to obtain next ID block due to " +
"thread contention. Trying again...");
// Call this method again, but sleep briefly to try to avoid thread contention.
try {
Thread.sleep(75);
}
catch (InterruptedException ie) {
// Ignore.
}
getNextBlock(count - 1);
}
}
此方法为:更具类型到数据库中ofid查询ID,获取表中的id,然后id加一个变量,然后将新的id更新到数据库中。
private void createNewID(Connection con, int type) throws SQLException {
Log.warn("Autocreating jiveID row for type '" + type + "'");
// create new ID row
PreparedStatement pstmt = null;
try {
pstmt = con.prepareStatement(CREATE_ID);
pstmt.setInt(1, type);
pstmt.execute();
}
finally {
DbConnectionManager.closeStatement(pstmt);
}
}
在表中创建一条序列的记录。
此篇文章就到此,稍后会有更多关于openfire的个人解读。
联系方式(qq):851392159
相关推荐
### Openfire集成用户数据库知识点详解 #### 一、引言 在企业级即时通讯系统部署过程中,为了确保数据的一致性和提高用户体验,通常会遇到一个关键需求:将Openfire服务器与现有的用户数据库进行集成。这样的集成...
openfire自带数据库的字典,详细展示数据库的每个表的结构,并备注了每个字段的含义,对开发者有很好的帮助。
Openfire 数据库表结构详解 Openfire 是一个流行的即时通信服务端,使用数据库来存储数据。了解 Openfire 数据库的表结构是非常重要的,因为它可以帮助开发者更好地理解和使用 Openfire。 Openfire 数据库表结构...
数据库字典,想了解的朋友。这个真的不错。openfire再次开发必备资料。
**Openfire数据库架构指南** Openfire是一款开源的即时通讯服务器,它基于XMPP协议,用于构建实时通信系统。本文将深入探讨Openfire的数据库架构,包括其设计原理、表结构和字段含义,以便理解Openfire如何存储和...
openfire数据库模式指南,列出了其所有数据库表结构及说明
5. 选择数据库:在下一个页面,Openfire提供了一个内置的数据库选项,对于初次安装,建议选择“嵌入的数据库”。点击“继续”。 6. 保持默认设置:如果对数据库配置不熟悉,可以保留默认的“初始设置”,这将使用...
openfire 脚本文件
4. **多语言支持**:Openfire的Web管理界面支持多种语言,便于全球用户使用。4.1.4版本可能对语言包进行了更新,优化了用户体验。 5. **插件系统**:Openfire拥有强大的插件生态系统,允许用户根据需求添加额外的...
- 下载最新版本的Openfire安装包,如"openfire_4_0_1",并解压到指定目录。 - 双击运行`setup.exe`,按照向导进行安装。选择安装路径,注意保持路径中不含中文字符,以避免潜在问题。 - 安装过程中,可以选择创建...
Openfire 是一款基于 Java 开发的即时通讯(IM)服务器,它支持跨平台运行,并且可以与多种数据库系统集成,包括 MySQL 和 Oracle。在使用 MySQL 作为数据存储时,Openfire 用户经常遇到一个常见的问题,那就是中文...
4. **ofID**:这个表用于生成唯一的ID序列,`idType`标识ID的类型,`id`则为下一个可用的ID编号。 5. **ofOffline**:离线邮件存储,保存用户离线时接收到的消息。`username`、`messageID`和`creationDate`构成主键...
5. **数据库集成**:Openfire支持多种数据库管理系统,如MySQL、PostgreSQL、Oracle等,可以根据组织的需求进行选择和配置。 6. **管理界面**:提供直观的Web管理界面,使得管理员能够轻松管理用户、群组、服务器...
5. **初始化数据库**:Openfire支持多种数据库,如MySQL、PostgreSQL等。根据实际情况选择,创建相应的数据库,并配置Openfire的database.properties文件。 6. **启动服务**:执行 `./openfire start` 命令启动...
如果你的Openfire服务器配置了其他类型的数据库(如PostgreSQL、Oracle等),你可以参照MySQL脚本的模式来创建相应的表结构,因为大多数SQL方言都支持类似的创建表的语法。 在部署此插件时,首先,你需要确保你的...
4. **数据库连接**:Openfire支持多种数据库,包括MySQL、PostgreSQL等。根据你的需求,选择合适的数据库并配置相应的连接信息。默认情况下,Openfire使用内置的HSQLDB,对于生产环境,推荐使用更稳定的MySQL或...
为了在Linux系统上成功安装并配置Openfire,我们需要遵循一系列步骤,涉及的主要组件包括JDK(Java Development Kit)和MySQL数据库。 首先,我们需要确保系统已经安装了Java运行环境。JDK是开发和运行Java应用程序...
数据库驱动jar包的配置是Openfire安装的关键步骤之一。以MySQL数据库为例,需要将对应的jar包mysql-connector-java-5.1.7-bin.jar复制到Openfire安装目录下的lib文件夹内,以确保Openfire能够正确加载数据库驱动。 ...
Openfire的安装过程简洁高效,通过提供的`openfire_4_2_3_x64.exe`执行文件,可以在Windows 64位系统上快速完成部署。安装过程中,用户只需要按照向导提示进行,即可轻松设置服务器的基本配置,包括数据库连接、管理...
openfire服务端自带jre