移除DataCacheListener功能
This commit is contained in:
@@ -284,20 +284,6 @@ public abstract class NodeServer {
|
|||||||
application.dataSources.add(source);
|
application.dataSources.add(source);
|
||||||
appResFactory.register(resourceName, DataSource.class, source);
|
appResFactory.register(resourceName, DataSource.class, source);
|
||||||
|
|
||||||
SncpClient client = Sncp.getSncpClient((Service) src);
|
|
||||||
final InetSocketAddress sncpAddr = client == null ? null : client.getClientAddress();
|
|
||||||
if ((src instanceof DataSource) && sncpAddr != null && resourceFactory.find(resourceName, DataCacheListener.class) == null) { //只有DataSourceService 才能赋值 DataCacheListener
|
|
||||||
final NodeSncpServer sncpServer = application.findNodeSncpServer(sncpAddr);
|
|
||||||
final Set<String> groups = new HashSet<>();
|
|
||||||
if (client != null && client.getSameGroup() != null) groups.add(client.getSameGroup());
|
|
||||||
if (client != null && client.getDiffGroups() != null) groups.addAll(client.getDiffGroups());
|
|
||||||
Service cacheListenerService = Sncp.createLocalService(serverClassLoader, resourceName, DataCacheListenerService.class, appResFactory, appSncpTranFactory, sncpAddr, groups, Sncp.getConf((Service) src));
|
|
||||||
appResFactory.register(resourceName, DataCacheListener.class, cacheListenerService);
|
|
||||||
localServices.add(cacheListenerService);
|
|
||||||
sncpServer.consumerAccept(cacheListenerService);
|
|
||||||
rf.inject(cacheListenerService, self);
|
|
||||||
logger.info("[" + Thread.currentThread().getName() + "] Load Service " + cacheListenerService);
|
|
||||||
}
|
|
||||||
field.set(src, source);
|
field.set(src, source);
|
||||||
rf.inject(source, self); // 给其可能包含@Resource的字段赋值;
|
rf.inject(source, self); // 给其可能包含@Resource的字段赋值;
|
||||||
//NodeServer.this.watchFactory.inject(src);
|
//NodeServer.this.watchFactory.inject(src);
|
||||||
@@ -418,7 +404,6 @@ public abstract class NodeServer {
|
|||||||
if (Modifier.isAbstract(serviceImplClass.getModifiers())) continue; //修饰abstract的类跳过
|
if (Modifier.isAbstract(serviceImplClass.getModifiers())) continue; //修饰abstract的类跳过
|
||||||
if (DataSource.class.isAssignableFrom(serviceImplClass)) continue;
|
if (DataSource.class.isAssignableFrom(serviceImplClass)) continue;
|
||||||
if (CacheSource.class.isAssignableFrom(serviceImplClass)) continue;
|
if (CacheSource.class.isAssignableFrom(serviceImplClass)) continue;
|
||||||
if (DataCacheListener.class.isAssignableFrom(serviceImplClass)) 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());
|
||||||
Service oldother = resourceFactory.find(entry.getName(), serviceImplClass);
|
Service oldother = resourceFactory.find(entry.getName(), serviceImplClass);
|
||||||
|
|||||||
@@ -1,49 +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 org.redkale.service;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import javax.annotation.*;
|
|
||||||
import org.redkale.source.*;
|
|
||||||
import org.redkale.util.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 实现进程间DataSource的缓存数据同步
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* 详情见: https://redkale.org
|
|
||||||
*
|
|
||||||
* @author zhangjx
|
|
||||||
*/
|
|
||||||
@AutoLoad(false)
|
|
||||||
@ResourceType(DataCacheListener.class)
|
|
||||||
public class DataCacheListenerService implements DataCacheListener, Service {
|
|
||||||
|
|
||||||
@Resource(name = "$")
|
|
||||||
private DataSource source;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@RpcMultiRun(selfrun = false, async = true)
|
|
||||||
public <T> int insertCache(Class<T> clazz, T... entitys) {
|
|
||||||
if (!(source instanceof DataCacheListener)) return -2;
|
|
||||||
return ((DataCacheListener) source).insertCache(clazz, entitys);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@RpcMultiRun(selfrun = false, async = true)
|
|
||||||
public <T> int updateCache(Class<T> clazz, T... entitys) {
|
|
||||||
if (!(source instanceof DataCacheListener)) return -2;
|
|
||||||
return ((DataCacheListener) source).updateCache(clazz, entitys);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@RpcMultiRun(selfrun = false, async = true)
|
|
||||||
public <T> int deleteCache(Class<T> clazz, Serializable... ids) {
|
|
||||||
if (!(source instanceof DataCacheListener)) return -2;
|
|
||||||
return ((DataCacheListener) source).deleteCache(clazz, ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,24 +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 org.redkale.source;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* 详情见: https://redkale.org
|
|
||||||
*
|
|
||||||
* @author zhangjx
|
|
||||||
*/
|
|
||||||
public interface DataCacheListener {
|
|
||||||
|
|
||||||
public <T> int insertCache(Class<T> clazz, T... entitys);
|
|
||||||
|
|
||||||
public <T> int updateCache(Class<T> clazz, T... entitys);
|
|
||||||
|
|
||||||
public <T> int deleteCache(Class<T> clazz, Serializable... pks);
|
|
||||||
}
|
|
||||||
@@ -15,7 +15,6 @@ import java.util.concurrent.atomic.*;
|
|||||||
import java.util.function.*;
|
import java.util.function.*;
|
||||||
import java.util.logging.*;
|
import java.util.logging.*;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import javax.annotation.Resource;
|
|
||||||
import org.redkale.service.*;
|
import org.redkale.service.*;
|
||||||
import static org.redkale.source.DataSources.*;
|
import static org.redkale.source.DataSources.*;
|
||||||
import org.redkale.util.*;
|
import org.redkale.util.*;
|
||||||
@@ -34,7 +33,7 @@ import org.redkale.util.*;
|
|||||||
@AutoLoad(false)
|
@AutoLoad(false)
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@ResourceType(DataSource.class)
|
@ResourceType(DataSource.class)
|
||||||
public abstract class DataSqlSource<DBChannel> extends AbstractService implements DataSource, DataCacheListener, Function<Class, EntityInfo>, AutoCloseable, Resourcable {
|
public abstract class DataSqlSource<DBChannel> extends AbstractService implements DataSource, Function<Class, EntityInfo>, AutoCloseable, Resourcable {
|
||||||
|
|
||||||
protected static final Flipper FLIPPER_ONE = new Flipper(1);
|
protected static final Flipper FLIPPER_ONE = new Flipper(1);
|
||||||
|
|
||||||
@@ -56,9 +55,6 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
|
|
||||||
protected PoolSource<DBChannel> writePool;
|
protected PoolSource<DBChannel> writePool;
|
||||||
|
|
||||||
@Resource(name = "$")
|
|
||||||
protected DataCacheListener cacheListener;
|
|
||||||
|
|
||||||
protected final BiFunction<EntityInfo, Object, CharSequence> sqlFormatter;
|
protected final BiFunction<EntityInfo, Object, CharSequence> sqlFormatter;
|
||||||
|
|
||||||
protected final BiConsumer futureCompleteConsumer = (r, t) -> {
|
protected final BiConsumer futureCompleteConsumer = (r, t) -> {
|
||||||
@@ -387,20 +383,6 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
for (final T value : entitys) {
|
for (final T value : entitys) {
|
||||||
c += cache.insert(value);
|
c += cache.insert(value);
|
||||||
}
|
}
|
||||||
if (cacheListener != null) cacheListener.insertCache(info.getType(), entitys);
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> int insertCache(Class<T> clazz, T... entitys) {
|
|
||||||
if (entitys.length == 0) return 0;
|
|
||||||
final EntityInfo<T> info = loadEntityInfo(clazz);
|
|
||||||
final EntityCache<T> cache = info.getCache();
|
|
||||||
if (cache == null) return -1;
|
|
||||||
int c = 0;
|
|
||||||
for (T value : entitys) {
|
|
||||||
c += cache.insert(value);
|
|
||||||
}
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -683,7 +665,6 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
final EntityCache<T> cache = info.getCache();
|
final EntityCache<T> cache = info.getCache();
|
||||||
if (cache == null) return -1;
|
if (cache == null) return -1;
|
||||||
Serializable[] ids = cache.delete(flipper, node);
|
Serializable[] ids = cache.delete(flipper, node);
|
||||||
if (cacheListener != null) cacheListener.deleteCache(info.getType(), ids);
|
|
||||||
return count >= 0 ? count : (ids == null ? 0 : ids.length);
|
return count >= 0 ? count : (ids == null ? 0 : ids.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -694,23 +675,9 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
for (Serializable key : pks) {
|
for (Serializable key : pks) {
|
||||||
c += cache.delete(key);
|
c += cache.delete(key);
|
||||||
}
|
}
|
||||||
if (cacheListener != null) cacheListener.deleteCache(info.getType(), pks);
|
|
||||||
return count >= 0 ? count : c;
|
return count >= 0 ? count : c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> int deleteCache(Class<T> clazz, Serializable... pks) {
|
|
||||||
if (pks.length == 0) return 0;
|
|
||||||
final EntityInfo<T> info = loadEntityInfo(clazz);
|
|
||||||
final EntityCache<T> cache = info.getCache();
|
|
||||||
if (cache == null) return -1;
|
|
||||||
int c = 0;
|
|
||||||
for (Serializable id : pks) {
|
|
||||||
c += cache.delete(id);
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static StringBuilder multisplit(char ch1, char ch2, String split, StringBuilder sb, String str, int from) {
|
protected static StringBuilder multisplit(char ch1, char ch2, String split, StringBuilder sb, String str, int from) {
|
||||||
if (str == null) return sb;
|
if (str == null) return sb;
|
||||||
int pos1 = str.indexOf(ch1, from);
|
int pos1 = str.indexOf(ch1, from);
|
||||||
@@ -1220,11 +1187,9 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
}
|
}
|
||||||
if (neednode) {
|
if (neednode) {
|
||||||
T[] rs = cache.update(entity, attrs, node);
|
T[] rs = cache.update(entity, attrs, node);
|
||||||
if (cacheListener != null) cacheListener.updateCache(info.getType(), rs);
|
|
||||||
return count >= 0 ? count : (rs == null ? 0 : rs.length);
|
return count >= 0 ? count : (rs == null ? 0 : rs.length);
|
||||||
} else {
|
} else {
|
||||||
T rs = cache.update(entity, attrs);
|
T rs = cache.update(entity, attrs);
|
||||||
if (cacheListener != null) cacheListener.updateCache(info.getType(), rs);
|
|
||||||
return count >= 0 ? count : (rs == null ? 0 : 1);
|
return count >= 0 ? count : (rs == null ? 0 : 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1242,7 +1207,6 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
cols.add(col);
|
cols.add(col);
|
||||||
}
|
}
|
||||||
T[] rs = cache.updateColumn(node, flipper, attrs, cols);
|
T[] rs = cache.updateColumn(node, flipper, attrs, cols);
|
||||||
if (cacheListener != null) cacheListener.updateCache(info.getType(), rs);
|
|
||||||
return count >= 0 ? count : (rs == null ? 0 : 1);
|
return count >= 0 ? count : (rs == null ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1259,7 +1223,6 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
cols.add(col);
|
cols.add(col);
|
||||||
}
|
}
|
||||||
T rs = cache.updateColumn(pk, attrs, cols);
|
T rs = cache.updateColumn(pk, attrs, cols);
|
||||||
if (cacheListener != null) cacheListener.updateCache(info.getType(), rs);
|
|
||||||
return count >= 0 ? count : (rs == null ? 0 : 1);
|
return count >= 0 ? count : (rs == null ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1267,7 +1230,6 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
final EntityCache<T> cache = info.getCache();
|
final EntityCache<T> cache = info.getCache();
|
||||||
if (cache == null) return count;
|
if (cache == null) return count;
|
||||||
T[] rs = cache.update(info.getAttribute(column), colval, node);
|
T[] rs = cache.update(info.getAttribute(column), colval, node);
|
||||||
if (cacheListener != null) cacheListener.updateCache(info.getType(), rs);
|
|
||||||
return count >= 0 ? count : (rs == null ? 0 : 1);
|
return count >= 0 ? count : (rs == null ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1275,7 +1237,6 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
final EntityCache<T> cache = info.getCache();
|
final EntityCache<T> cache = info.getCache();
|
||||||
if (cache == null) return count;
|
if (cache == null) return count;
|
||||||
T rs = cache.update(pk, info.getAttribute(column), colval);
|
T rs = cache.update(pk, info.getAttribute(column), colval);
|
||||||
if (cacheListener != null) cacheListener.updateCache(info.getType(), rs);
|
|
||||||
return count >= 0 ? count : (rs == null ? 0 : 1);
|
return count >= 0 ? count : (rs == null ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1286,23 +1247,9 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
|||||||
for (final T value : entitys) {
|
for (final T value : entitys) {
|
||||||
c2 += cache.update(value);
|
c2 += cache.update(value);
|
||||||
}
|
}
|
||||||
if (cacheListener != null) cacheListener.updateCache(info.getType(), entitys);
|
|
||||||
return count >= 0 ? count : c2;
|
return count >= 0 ? count : c2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> int updateCache(Class<T> clazz, T... entitys) {
|
|
||||||
if (entitys.length == 0) return 0;
|
|
||||||
final EntityInfo<T> info = loadEntityInfo(clazz);
|
|
||||||
final EntityCache<T> cache = info.getCache();
|
|
||||||
if (cache == null) return -1;
|
|
||||||
int c = 0;
|
|
||||||
for (T value : entitys) {
|
|
||||||
c += cache.update(value);
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> int reloadCache(Class<T> clazz, Serializable... pks) {
|
public <T> int reloadCache(Class<T> clazz, Serializable... pks) {
|
||||||
final EntityInfo<T> info = loadEntityInfo(clazz);
|
final EntityInfo<T> info = loadEntityInfo(clazz);
|
||||||
final EntityCache<T> cache = info.getCache();
|
final EntityCache<T> cache = info.getCache();
|
||||||
|
|||||||
Reference in New Issue
Block a user