【仅供内部供应商使用,不提供对外解答和培训】
【仅供内部供应商使用,不提供对外解答和培训】
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