2021.1版中干扰群集发布的新功能


介绍 2021.1版本的干扰群集已发布。(在前一篇文章中,我讨论了该软件的基本功能,可以在这里找到。)人们非常重视改善整体性能和稳定性。我认为,一个有趣的功能已经出现,我想在这篇简短的文章中进行讨论。

以前,干扰群集的概念严格保留在服务器端服务的框架内,该服务器端服务为某些服务器端Java应用程序提供了持久性和事件交互服务。由于作为数据库的干扰概念并未提供JDBC连接,因此我们无法以任何方式从外部访问数据。只能在群集节点的应用程序之间进行任何交互,每个群集节点都包含持久性存储。

现在,在2021.1版本中,您可以使用远程客户端从另一个JVM访问干扰群集数据。为此,只需将interference-2021.1库添加到您的项目中,并使用该Session.getRemoteSession()方法创建与任何群集节点的连接。远程客户端使用与群集内的节点间通信相同的传输机制:

ioclient.png

怎么运行的 要创建远程会话,您需要指定用于连接到远程群集节点的主机参数,以及用于从传输服务进行回调的当前主机的参数。客户端连接上的客户端端口可以是任何可用的端口(未被其他应用程序使用):

String host = "remote.host.com"; //one of cluster nodes
int port = 8050; //service port
String callbackHost = "client.host.com"; //your client host
Int callbackPort = 8099; //your client port
RemoteSession session = Session.getRemoteSession(host, port, callbackHost, callbackPort);

此方法在远程群集内创建一个Session对象,并将其标识符作为本地RemoteSession对象返回。远程应用程序可通过使用标准的JPA状的方法(于RemoteSession对象的方法的调用执行进一步操作persist(),find(),execute()...,)在干扰固有Session类。

之前曾说过,对于任何使用实体类对象的操作,此类都必须在干扰服务中注册。

要注册@Entity类,我们首先必须执行以下操作:

session.register(YourEntityClass.class);

在哪里上课看起来像:

package domain.com;
import su.interference.persistent.Session;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name="YourEntityClass", indexes={@Index(name="YourEntityClassPk", columnList="id", unique=true)})
public class YourEntityClass {
    @Column
    @Id
    private int id;
    @Column
    private int description;

    public int getId(Session s) {
        return this.id;
    }
    public void setId(int id, Session s) {
        this.id = id;
    }

    public int getDescription (Session s) {
        return description;
    }


    public void setDescription (int description, Session s) {
        this.description = description;
    }
}

该类只能在集群中注册一次。如果该类之前已经注册过,class already registered则将引发异常()。

在表中插入或更改一些对象:

Object o = new YourEntityClass;
... // set some values 
session.persist(o);

通过标识符搜索对象:

YourEntityClass o = (YourEntityClass) session.find(YourEntityClass.class, id)

执行一个SQL查询,将返回RemoteResultSet对象的一个​​实例:

RemoteResultSet rs = session.execute("select c.id, c.description from com.domain.YourEntityClass c");

轮询结果集中的所有对象:

GenericObject g = rs.poll();
while (g != null) {
    int id = (int) g.getValueByName("cid");
    String description = (String) g.getValueByName("cdescription");
    g = rs.poll();
}

提交更改:

session.commit();

回滚更改:

session.rollback();


原文链接:http://codingdict.com