介绍 2021.1版本的干扰群集已发布。(在前一篇文章中,我讨论了该软件的基本功能,可以在这里找到。)人们非常重视改善整体性能和稳定性。我认为,一个有趣的功能已经出现,我想在这篇简短的文章中进行讨论。
以前,干扰群集的概念严格保留在服务器端服务的框架内,该服务器端服务为某些服务器端Java应用程序提供了持久性和事件交互服务。由于作为数据库的干扰概念并未提供JDBC连接,因此我们无法以任何方式从外部访问数据。只能在群集节点的应用程序之间进行任何交互,每个群集节点都包含持久性存储。
现在,在2021.1版本中,您可以使用远程客户端从另一个JVM访问干扰群集数据。为此,只需将interference-2021.1库添加到您的项目中,并使用该Session.getRemoteSession()方法创建与任何群集节点的连接。远程客户端使用与群集内的节点间通信相同的传输机制:
怎么运行的 要创建远程会话,您需要指定用于连接到远程群集节点的主机参数,以及用于从传输服务进行回调的当前主机的参数。客户端连接上的客户端端口可以是任何可用的端口(未被其他应用程序使用):
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则将引发异常()。
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