【仅供内部供应商使用,不提供对外解答和培训】
【仅供内部供应商使用,不提供对外解答和培训】
Workspace接口是对工作空间的抽象,继承自WorkObjectPool
/** * 工作空间对象池 */ public interface WorkObjectPool { /** * 获取对象 */ <T> T get(Class<T> type); void close(); }
WorkObjectPool:管理一组对象
可以通过WorkspaceConnector接口连接一台包含了fine-core包的服务器,生成一个WorkspaceClient接口,表示连接到某台服务器的客户端
通过WorkspaceClient这个客户端可以拿到“服务器的WorkObjectPool”,即从这里拿到的对象,实际上是在服务器上执行的,也就是一个RPC代理的对象池
设计器的远程设计就是通过上述三个接口来实现的。
在activator中注册:
public class DemoActivator extends Activator implements Prepare { @Override public void start() { //模块启动逻辑 } @Override public void stop() { //模块关闭逻辑 } @Override public void prepare() { //注册对象到默认WorkObjectPool addMutable(WorkspaceKey.RPC, WorkPRCRegister.wrap(WorkRPCType.Local, WorkResource.class, FineWorkResource.getInstance()), WorkPRCRegister.wrap(WorkspaceHeartbeat.class, new FineWorkspaceHeartbeat()), WorkPRCRegister.wrap(FileAssistUtilsOperator.class, new FileAssistUtils()) ); } }
/** * 工作空间对象池中的对象分类 */ public enum WorkRPCType { /** * 简单对象,即响应本地的和响应远程的对象是一样的 */ Simple, /** * 只响应本地的请求,如果没有对应的Server实现注册进来的话,就不能响应远程消息 */ Local, /** * 只响应远程的请求,多用于权限控制 */ Server, } /** * WorkObject注册 */ public class WorkPRCRegister<T> { private final Class<T> clazz; private final WorkRPCType type; private final T object; public static <T> WorkPRCRegister<T> wrap(Class<T> clazz, T object) { return new WorkPRCRegister<T>(clazz, WorkRPCType.Simple, object); } public static <T> WorkPRCRegister<T> wrap(WorkRPCType type, Class<T> clazz, T object) { return new WorkPRCRegister<T>(clazz, type, object); } private WorkPRCRegister(Class<T> clazz, WorkRPCType type, T object) { this.clazz = clazz; this.type = type; this.object = object; } }
WorkRPCType用来描述一个对象的作用范围:
默认为Simple。如果需要根据本机/远程连接做权限校验的话,则需要分别注册一个Local的实现和一个Server的实现。
WorkContext.getCurrent().get(CommonOperator.class);
WorkContext是整个Workspace的入口,可以从中获取当前的Workspace实例,进而访问当前对象池(如果当前是远程环境,则拿到的是RPC代理对象)
WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo(url,userName,password,certPath,certSecretKey); WorkspaceClient client = WorkContext.getConnector().connect(connectionInfo);
//获取当前线程对应的远程连接信息 WorkspaceConnection connection = WorkspaceServerContext.currentConnection()
WorkObjectPool相关的序列化使用可扩展的序列化接口中的SerializerSummary实现,SerializerSummary是一个可共扩展的序列化工具,扩展方式如下:
public class DemoActivator extends Activator implements Prepare { @Override public void start() { //模块启动逻辑 } @Override public void stop() { //模块关闭逻辑 } @Override public void prepare() { //注册通用序列化器 addMutable(CommonSerializerKey.KEY,(new AbstractCommonSerializer<Demo2>() { @Override public void serialize(Demo2 obj, OutputStream out) throws Exception { DataOutputStream dataOut = new DataOutputStream(out); dataOut.writeInt(obj.i); } @Override public Demo2 deserialize(InputStream in) throws Exception { DataInputStream dataIn = new DataInputStream(in); int i = dataIn.readInt(); return new Demo2(i); } @Override public boolean accept(Object o) { return o instanceof Demo2; } }); } }
插件接口:WorkRPCProvider
todo