Преглед на файлове

Use ServiceLoaderUtil to create SPI ServiceLoader

Signed-off-by: Eric Zhao <sczyh16@gmail.com>
master
Eric Zhao преди 5 години
родител
ревизия
b0905547ff
променени са 5 файла, в които са добавени 21 реда и са изтрити 47 реда
  1. +6
    -23
      sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/TokenServiceProvider.java
  2. +3
    -2
      sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java
  3. +2
    -1
      sentinel-core/src/main/java/com/alibaba/csp/sentinel/init/InitExecutor.java
  4. +7
    -20
      sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/SlotChainProvider.java
  5. +3
    -1
      sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandHandlerProvider.java

+ 6
- 23
sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/TokenServiceProvider.java Целия файл

@@ -15,13 +15,10 @@
*/
package com.alibaba.csp.sentinel.cluster.server;

import java.util.ArrayList;
import java.util.List;
import java.util.ServiceLoader;

import com.alibaba.csp.sentinel.cluster.TokenService;
import com.alibaba.csp.sentinel.cluster.flow.DefaultTokenService;
import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.util.SpiLoader;

/**
* @author Eric Zhao
@@ -31,8 +28,6 @@ public final class TokenServiceProvider {

private static TokenService service = null;

private static final ServiceLoader<TokenService> LOADER = ServiceLoader.load(TokenService.class);

static {
resolveTokenServiceSpi();
}
@@ -42,24 +37,12 @@ public final class TokenServiceProvider {
}

private static void resolveTokenServiceSpi() {
boolean hasOther = false;
List<TokenService> list = new ArrayList<TokenService>();
for (TokenService service : LOADER) {
if (service.getClass() != DefaultTokenService.class) {
hasOther = true;
list.add(service);
}
}

if (hasOther) {
// Pick the first.
service = list.get(0);
service = SpiLoader.loadFirstInstanceOrDefault(TokenService.class, DefaultTokenService.class);
if (service != null) {
RecordLog.info("[TokenServiceProvider] Global token service resolved: "
+ service.getClass().getCanonicalName());
} else {
// No custom token service, using default.
service = new DefaultTokenService();
RecordLog.warn("[TokenServiceProvider] Unable to resolve TokenService: no SPI found");
}

RecordLog.info("[TokenServiceProvider] Global token service resolved: "
+ service.getClass().getCanonicalName());
}
}

+ 3
- 2
sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java Целия файл

@@ -20,6 +20,7 @@ import java.util.ServiceLoader;
import java.util.concurrent.ConcurrentHashMap;

import com.alibaba.csp.sentinel.cluster.annotation.RequestType;
import com.alibaba.csp.sentinel.spi.ServiceLoaderUtil;
import com.alibaba.csp.sentinel.util.AssertUtil;

/**
@@ -30,7 +31,8 @@ public final class RequestProcessorProvider {

private static final Map<Integer, RequestProcessor> PROCESSOR_MAP = new ConcurrentHashMap<>();

private static final ServiceLoader<RequestProcessor> SERVICE_LOADER = ServiceLoader.load(RequestProcessor.class);
private static final ServiceLoader<RequestProcessor> SERVICE_LOADER = ServiceLoaderUtil.getServiceLoader(
RequestProcessor.class);

static {
loadAndInit();
@@ -71,6 +73,5 @@ public final class RequestProcessorProvider {
PROCESSOR_MAP.put(type, processor);
}


private RequestProcessorProvider() {}
}

+ 2
- 1
sentinel-core/src/main/java/com/alibaba/csp/sentinel/init/InitExecutor.java Целия файл

@@ -21,6 +21,7 @@ import java.util.ServiceLoader;
import java.util.concurrent.atomic.AtomicBoolean;

import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.spi.ServiceLoaderUtil;

/**
* Load registered init functions and execute in order.
@@ -42,7 +43,7 @@ public final class InitExecutor {
return;
}
try {
ServiceLoader<InitFunc> loader = ServiceLoader.load(InitFunc.class);
ServiceLoader<InitFunc> loader = ServiceLoaderUtil.getServiceLoader(InitFunc.class);
List<OrderWrapper> initList = new ArrayList<OrderWrapper>();
for (InitFunc initFunc : loader) {
RecordLog.info("[InitExecutor] Found init func: " + initFunc.getClass().getCanonicalName());


+ 7
- 20
sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/SlotChainProvider.java Целия файл

@@ -17,7 +17,7 @@ package com.alibaba.csp.sentinel.slotchain;

import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.slots.DefaultSlotChainBuilder;
import java.util.ServiceLoader;
import com.alibaba.csp.sentinel.util.SpiLoader;

/**
* A provider for creating slot chains via resolved slot chain builder SPI.
@@ -29,8 +29,6 @@ public final class SlotChainProvider {

private static volatile SlotChainBuilder slotChainBuilder = null;

private static final ServiceLoader<SlotChainBuilder> LOADER = ServiceLoader.load(SlotChainBuilder.class);

/**
* The load and pick process is not thread-safe, but it's okay since the method should be only invoked
* via {@code lookProcessChain} in {@link com.alibaba.csp.sentinel.CtSph} under lock.
@@ -42,30 +40,19 @@ public final class SlotChainProvider {
return slotChainBuilder.build();
}

resolveSlotChainBuilder();
// Resolve the slot chain builder SPI.
slotChainBuilder = SpiLoader.loadFirstInstanceOrDefault(SlotChainBuilder.class, DefaultSlotChainBuilder.class);

if (slotChainBuilder == null) {
// Should not go through here.
RecordLog.warn("[SlotChainProvider] Wrong state when resolving slot chain builder, using default");
slotChainBuilder = new DefaultSlotChainBuilder();
} else {
RecordLog.info("[SlotChainProvider] Global slot chain builder resolved: "
+ slotChainBuilder.getClass().getCanonicalName());
}
return slotChainBuilder.build();
}

private static void resolveSlotChainBuilder() {
for (SlotChainBuilder builder : LOADER) {
if (builder.getClass() != DefaultSlotChainBuilder.class) {
slotChainBuilder = builder;
break;
}
}
if (slotChainBuilder == null){
// No custom builder, using default.
slotChainBuilder = new DefaultSlotChainBuilder();
}

RecordLog.info("[SlotChainProvider] Global slot chain builder resolved: "
+ slotChainBuilder.getClass().getCanonicalName());
}

private SlotChainProvider() {}
}

+ 3
- 1
sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandHandlerProvider.java Целия файл

@@ -21,6 +21,7 @@ import java.util.Map;
import java.util.ServiceLoader;

import com.alibaba.csp.sentinel.command.annotation.CommandMapping;
import com.alibaba.csp.sentinel.spi.ServiceLoaderUtil;
import com.alibaba.csp.sentinel.util.StringUtil;

/**
@@ -30,7 +31,8 @@ import com.alibaba.csp.sentinel.util.StringUtil;
*/
public class CommandHandlerProvider implements Iterable<CommandHandler> {

private final ServiceLoader<CommandHandler> serviceLoader = ServiceLoader.load(CommandHandler.class);
private final ServiceLoader<CommandHandler> serviceLoader = ServiceLoaderUtil.getServiceLoader(
CommandHandler.class);

/**
* Get all command handlers annotated with {@link CommandMapping} with command name.


Loading…
Отказ
Запис