This commit is contained in:
@@ -476,7 +476,7 @@ public final class Application {
|
|||||||
application.servicecdl = new CountDownLatch(1);
|
application.servicecdl = new CountDownLatch(1);
|
||||||
final NodeServer server = new NodeHttpServer(application, null);
|
final NodeServer server = new NodeHttpServer(application, null);
|
||||||
server.init(application.config);
|
server.init(application.config);
|
||||||
server.factory.inject(service);
|
server.factory.inject(service, server);
|
||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import java.util.logging.*;
|
|||||||
import javax.annotation.*;
|
import javax.annotation.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HTTP Server节点的配置Server
|
* HTTP Server节点的配置Server
|
||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
*/
|
*/
|
||||||
@@ -63,8 +63,9 @@ public final class NodeHttpServer extends NodeServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initWebSocketService() {
|
private void initWebSocketService() {
|
||||||
|
final NodeServer self = this;
|
||||||
final ResourceFactory regFactory = application.getResourceFactory();
|
final ResourceFactory regFactory = application.getResourceFactory();
|
||||||
factory.add(WebSocketNode.class, (ResourceFactory rf, final Object src, Field field) -> {
|
factory.add(WebSocketNode.class, (ResourceFactory rf, final Object src, Field field, Object attachment) -> {
|
||||||
try {
|
try {
|
||||||
Resource rs = field.getAnnotation(Resource.class);
|
Resource rs = field.getAnnotation(Resource.class);
|
||||||
if (rs == null) return;
|
if (rs == null) return;
|
||||||
@@ -77,7 +78,7 @@ public final class NodeHttpServer extends NodeServer {
|
|||||||
nodeService = Sncp.createLocalService(rcname, getExecutor(), (Class<? extends Service>) WebSocketNodeService.class,
|
nodeService = Sncp.createLocalService(rcname, getExecutor(), (Class<? extends Service>) WebSocketNodeService.class,
|
||||||
getSncpAddress(), sncpDefaultGroups, sncpSameGroupTransports, sncpDiffGroupTransports);
|
getSncpAddress(), sncpDefaultGroups, sncpSameGroupTransports, sncpDiffGroupTransports);
|
||||||
regFactory.register(rcname, WebSocketNode.class, nodeService);
|
regFactory.register(rcname, WebSocketNode.class, nodeService);
|
||||||
factory.inject(nodeService);
|
factory.inject(nodeService, self);
|
||||||
logger.fine("[" + Thread.currentThread().getName() + "] Load " + nodeService);
|
logger.fine("[" + Thread.currentThread().getName() + "] Load " + nodeService);
|
||||||
if (getSncpAddress() != null) {
|
if (getSncpAddress() != null) {
|
||||||
NodeSncpServer sncpServer = null;
|
NodeSncpServer sncpServer = null;
|
||||||
@@ -108,7 +109,7 @@ public final class NodeHttpServer extends NodeServer {
|
|||||||
WebServlet ws = clazz.getAnnotation(WebServlet.class);
|
WebServlet ws = clazz.getAnnotation(WebServlet.class);
|
||||||
if (ws == null || ws.value().length == 0) continue;
|
if (ws == null || ws.value().length == 0) continue;
|
||||||
final HttpServlet servlet = clazz.newInstance();
|
final HttpServlet servlet = clazz.newInstance();
|
||||||
factory.inject(servlet);
|
factory.inject(servlet, this);
|
||||||
String[] mappings = ws.value();
|
String[] mappings = ws.value();
|
||||||
if (ws.fillurl() && !prefix.isEmpty()) {
|
if (ws.fillurl() && !prefix.isEmpty()) {
|
||||||
for (int i = 0; i < mappings.length; i++) {
|
for (int i = 0; i < mappings.length; i++) {
|
||||||
|
|||||||
@@ -146,9 +146,10 @@ public abstract class NodeServer {
|
|||||||
protected abstract void loadServlet(ClassFilter<? extends Servlet> servletFilter) throws Exception;
|
protected abstract void loadServlet(ClassFilter<? extends Servlet> servletFilter) throws Exception;
|
||||||
|
|
||||||
private void initResource() {
|
private void initResource() {
|
||||||
|
final NodeServer self = this;
|
||||||
//---------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------
|
||||||
final ResourceFactory regFactory = application.getResourceFactory();
|
final ResourceFactory regFactory = application.getResourceFactory();
|
||||||
factory.add(DataSource.class, (ResourceFactory rf, final Object src, Field field) -> {
|
factory.add(DataSource.class, (ResourceFactory rf, final Object src, Field field, final Object attachment) -> {
|
||||||
try {
|
try {
|
||||||
Resource rs = field.getAnnotation(Resource.class);
|
Resource rs = field.getAnnotation(Resource.class);
|
||||||
if (rs == null) return;
|
if (rs == null) return;
|
||||||
@@ -177,10 +178,10 @@ public abstract class NodeServer {
|
|||||||
ServiceWrapper wrapper = new ServiceWrapper(DataCacheListenerService.class, cacheListenerService, rs.name(), sncpGroup, sncpDefaultGroups, null);
|
ServiceWrapper wrapper = new ServiceWrapper(DataCacheListenerService.class, cacheListenerService, rs.name(), sncpGroup, sncpDefaultGroups, null);
|
||||||
localServiceWrappers.add(wrapper);
|
localServiceWrappers.add(wrapper);
|
||||||
if (consumer != null) consumer.accept(wrapper);
|
if (consumer != null) consumer.accept(wrapper);
|
||||||
rf.inject(cacheListenerService);
|
rf.inject(cacheListenerService, self);
|
||||||
}
|
}
|
||||||
field.set(src, source);
|
field.set(src, source);
|
||||||
rf.inject(source); // 给 "datasource.nodeid" 赋值
|
rf.inject(source, self); // 给 "datasource.nodeid" 赋值
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.log(Level.SEVERE, "DataSource inject error", e);
|
logger.log(Level.SEVERE, "DataSource inject error", e);
|
||||||
}
|
}
|
||||||
@@ -314,10 +315,10 @@ public abstract class NodeServer {
|
|||||||
final StringBuilder sb = logger.isLoggable(Level.INFO) ? new StringBuilder() : null;
|
final StringBuilder sb = logger.isLoggable(Level.INFO) ? new StringBuilder() : null;
|
||||||
//---------------- inject ----------------
|
//---------------- inject ----------------
|
||||||
new HashSet<>(localServiceWrappers).forEach(y -> {
|
new HashSet<>(localServiceWrappers).forEach(y -> {
|
||||||
factory.inject(y.getService());
|
factory.inject(y.getService(), NodeServer.this);
|
||||||
});
|
});
|
||||||
remoteServiceWrappers.forEach(y -> {
|
remoteServiceWrappers.forEach(y -> {
|
||||||
factory.inject(y.getService());
|
factory.inject(y.getService(), NodeServer.this);
|
||||||
if (sb != null) {
|
if (sb != null) {
|
||||||
sb.append(threadName).append("RemoteService(").append(y.getType()).append(':').append(y.getName()).append(") loaded").append(LINE_SEPARATOR);
|
sb.append(threadName).append("RemoteService(").append(y.getType()).append(':').append(y.getName()).append(") loaded").append(LINE_SEPARATOR);
|
||||||
}
|
}
|
||||||
@@ -392,12 +393,10 @@ public abstract class NodeServer {
|
|||||||
String excludes = list.getValue("excludes", "");
|
String excludes = list.getValue("excludes", "");
|
||||||
filter.setIncludePatterns(includes.split(";"));
|
filter.setIncludePatterns(includes.split(";"));
|
||||||
filter.setExcludePatterns(excludes.split(";"));
|
filter.setExcludePatterns(excludes.split(";"));
|
||||||
} else {
|
} else if (ref2 == null || ref2 == Annotation.class) { //service如果是autoload=false则不需要加载
|
||||||
if (ref2 == null || ref2 == Annotation.class) { //service如果是autoload=false则不需要加载
|
filter.setRefused(true);
|
||||||
filter.setRefused(true);
|
} else if (ref2 != Annotation.class) {
|
||||||
} else if (ref2 != Annotation.class) {
|
filter.setAnnotationClass(ref2);
|
||||||
filter.setAnnotationClass(ref2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
cf = (cf == null) ? filter : cf.or(filter);
|
cf = (cf == null) ? filter : cf.or(filter);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* To change this license header, choose License Headers in Project Properties.
|
|
||||||
* To change this template file, choose Tools | Templates
|
|
||||||
* and open the template in the editor.
|
|
||||||
*/
|
|
||||||
package com.wentch.redkale.source;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.logging.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author zhangjx
|
|
||||||
*/
|
|
||||||
public abstract class DataSourceFactory {
|
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(DataSourceFactory.class.getSimpleName());
|
|
||||||
|
|
||||||
public static DataSource create() {
|
|
||||||
return create("");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DataSource create(final String unitName) {
|
|
||||||
// boolean jpa = false;
|
|
||||||
// if (!"jdbc".equalsIgnoreCase(System.getProperty("source.type", "jpa"))) {
|
|
||||||
// try {
|
|
||||||
// jpa = ServiceLoader.load(Class.forName("javax.persistence.spi.PersistenceProvider")).iterator().hasNext();
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// jpa = false;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (jpa) return new DataJPASource(unitName);
|
|
||||||
try {
|
|
||||||
return new DataDefaultSource(unitName);
|
|
||||||
} catch (IOException ex) {
|
|
||||||
logger.log(Level.WARNING, "cannot create DataSource (" + unitName + ")", ex);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -142,11 +142,15 @@ public final class ResourceFactory {
|
|||||||
if (parent != null) parent.load(reg, clazz, exclude, result);
|
if (parent != null) parent.load(reg, clazz, exclude, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean inject(final Object src) {
|
public <T> boolean inject(final Object src) {
|
||||||
return inject(src, new ArrayList<>());
|
return inject(src, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean inject(final Object src, final List<Object> list) {
|
public <T> boolean inject(final Object src, final T attachment) {
|
||||||
|
return inject(src, attachment, new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> boolean inject(final Object src, final T attachment, final List<Object> list) {
|
||||||
if (src == null) return false;
|
if (src == null) return false;
|
||||||
try {
|
try {
|
||||||
list.add(src);
|
list.add(src);
|
||||||
@@ -178,17 +182,15 @@ public final class ResourceFactory {
|
|||||||
if (rs == null) {
|
if (rs == null) {
|
||||||
if (Map.class.isAssignableFrom(classtype)) {
|
if (Map.class.isAssignableFrom(classtype)) {
|
||||||
rs = find(Pattern.compile(rcname.isEmpty() ? ".*" : rcname), (Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[1], src);
|
rs = find(Pattern.compile(rcname.isEmpty() ? ".*" : rcname), (Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[1], src);
|
||||||
|
} else if (rcname.startsWith("property.")) {
|
||||||
|
rs = find(rcname, String.class);
|
||||||
} else {
|
} else {
|
||||||
if (rcname.startsWith("property.")) {
|
rs = find(rcname, classtype);
|
||||||
rs = find(rcname, String.class);
|
|
||||||
} else {
|
|
||||||
rs = find(rcname, classtype);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rs == null) {
|
if (rs == null) {
|
||||||
Intercepter it = findIntercepter(field.getGenericType(), field);
|
Intercepter it = findIntercepter(field.getGenericType(), field);
|
||||||
if (it != null) it.invoke(this, src, field);
|
if (it != null) it.invoke(this, src, field, attachment);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!rs.getClass().isPrimitive() && classtype.isPrimitive()) {
|
if (!rs.getClass().isPrimitive() && classtype.isPrimitive()) {
|
||||||
@@ -232,7 +234,7 @@ public final class ResourceFactory {
|
|||||||
|
|
||||||
public static interface Intercepter {
|
public static interface Intercepter {
|
||||||
|
|
||||||
public void invoke(ResourceFactory factory, Object src, Field field);
|
public void invoke(ResourceFactory factory, Object src, Field field, Object attachment);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user