This commit is contained in:
@@ -5,6 +5,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.boot;
|
package org.redkale.boot;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import org.redkale.service.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
@@ -21,4 +24,64 @@ public class NodeInterceptor {
|
|||||||
public void preShutdown(NodeServer server) {
|
public void preShutdown(NodeServer server) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class InterceptorServiceWrapper<T extends Service> {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private Class<T> type;
|
||||||
|
|
||||||
|
private T service;
|
||||||
|
|
||||||
|
public InterceptorServiceWrapper() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public InterceptorServiceWrapper(String name, Class<T> type, T service) {
|
||||||
|
this.name = name;
|
||||||
|
this.type = type;
|
||||||
|
this.service = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<T> getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(Class<T> type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getService() {
|
||||||
|
return service;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setService(T service) {
|
||||||
|
this.service = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int hash = 7;
|
||||||
|
hash = 97 * hash + Objects.hashCode(this.name);
|
||||||
|
hash = 97 * hash + Objects.hashCode(this.type);
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj) return true;
|
||||||
|
if (obj == null) return false;
|
||||||
|
if (getClass() != obj.getClass()) return false;
|
||||||
|
final InterceptorServiceWrapper<?> other = (InterceptorServiceWrapper<?>) obj;
|
||||||
|
return Objects.equals(this.name, other.name) && Objects.equals(this.type, other.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,9 @@ public abstract class NodeServer {
|
|||||||
//加载server节点后的拦截器
|
//加载server节点后的拦截器
|
||||||
protected NodeInterceptor interceptor;
|
protected NodeInterceptor interceptor;
|
||||||
|
|
||||||
|
//供interceptor使用的Service对象集合
|
||||||
|
protected final Set<NodeInterceptor.InterceptorServiceWrapper> interceptorServiceWrappers = new LinkedHashSet<>();
|
||||||
|
|
||||||
//本地模式的Service对象集合
|
//本地模式的Service对象集合
|
||||||
protected final Set<ServiceWrapper> localServiceWrappers = new LinkedHashSet<>();
|
protected final Set<ServiceWrapper> localServiceWrappers = new LinkedHashSet<>();
|
||||||
|
|
||||||
@@ -266,7 +269,11 @@ public abstract class NodeServer {
|
|||||||
if (WebSocketNode.class.isAssignableFrom(type)) continue;
|
if (WebSocketNode.class.isAssignableFrom(type)) continue;
|
||||||
}
|
}
|
||||||
if (entry.getName().contains("$")) throw new RuntimeException("<name> value cannot contains '$' in " + entry.getProperty());
|
if (entry.getName().contains("$")) throw new RuntimeException("<name> value cannot contains '$' in " + entry.getProperty());
|
||||||
if (resourceFactory.find(entry.getName(), type) != null) continue; //Server加载Service时需要判断是否已经加载过了。
|
if (resourceFactory.find(entry.getName(), type) != null) { //Server加载Service时需要判断是否已经加载过了。
|
||||||
|
Service oldother = resourceFactory.find(entry.getName(), type);
|
||||||
|
interceptorServiceWrappers.add(new NodeInterceptor.InterceptorServiceWrapper(entry.getName(), type, oldother));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
final HashSet<String> groups = entry.getGroups(); //groups.isEmpty()表示<services>没有配置groups属性。
|
final HashSet<String> groups = entry.getGroups(); //groups.isEmpty()表示<services>没有配置groups属性。
|
||||||
if (groups.isEmpty() && isSNCP() && this.sncpGroup != null) groups.add(this.sncpGroup);
|
if (groups.isEmpty() && isSNCP() && this.sncpGroup != null) groups.add(this.sncpGroup);
|
||||||
|
|
||||||
@@ -299,6 +306,7 @@ public abstract class NodeServer {
|
|||||||
remoteServiceWrappers.add(wrapper);
|
remoteServiceWrappers.add(wrapper);
|
||||||
} else {
|
} else {
|
||||||
localServiceWrappers.add(wrapper);
|
localServiceWrappers.add(wrapper);
|
||||||
|
interceptorServiceWrappers.add(new NodeInterceptor.InterceptorServiceWrapper(entry.getName(), type, service));
|
||||||
if (consumer != null) consumer.accept(wrapper);
|
if (consumer != null) consumer.accept(wrapper);
|
||||||
}
|
}
|
||||||
} catch (RuntimeException ex) {
|
} catch (RuntimeException ex) {
|
||||||
@@ -526,6 +534,10 @@ public abstract class NodeServer {
|
|||||||
return (T) server;
|
return (T) server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<NodeInterceptor.InterceptorServiceWrapper> getInterceptorServiceWrappers() {
|
||||||
|
return new LinkedHashSet<>(interceptorServiceWrappers);
|
||||||
|
}
|
||||||
|
|
||||||
public Set<ServiceWrapper> getLocalServiceWrappers() {
|
public Set<ServiceWrapper> getLocalServiceWrappers() {
|
||||||
return new LinkedHashSet<>(localServiceWrappers);
|
return new LinkedHashSet<>(localServiceWrappers);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user