Skip to content

Commit 72ae3d3

Browse files
author
Daniel Bustamante Ospina
committed
Add type inference support for queries
Fixes: gh-5
1 parent 98bfc15 commit 72ae3d3

File tree

3 files changed

+12
-24
lines changed

3 files changed

+12
-24
lines changed

async/async-commons-starter/src/main/java/org/reactivecommons/async/impl/config/MessageListenersConfig.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.reactivecommons.async.api.handlers.QueryHandler;
77
import org.reactivecommons.async.api.handlers.registered.RegisteredCommandHandler;
88
import org.reactivecommons.async.api.handlers.registered.RegisteredEventListener;
9+
import org.reactivecommons.async.api.handlers.registered.RegisteredQueryHandler;
910
import org.reactivecommons.async.impl.HandlerResolver;
1011
import org.reactivecommons.async.impl.communications.ReactiveMessageListener;
1112
import org.reactivecommons.async.impl.communications.ReactiveMessageSender;
@@ -63,10 +64,10 @@ public ApplicationCommandListener applicationCommandListener(ReactiveMessageList
6364
public HandlerResolver resolver(ApplicationContext context, DefaultQueryHandler defaultHandler, Environment env, DefaultCommandHandler defaultCommandHandler) {
6465
final Map<String, HandlerRegistry> registries = context.getBeansOfType(HandlerRegistry.class);
6566

66-
final ConcurrentHashMap<String, QueryHandler<?, ?>> handlers = registries
67+
final ConcurrentHashMap<String, RegisteredQueryHandler> handlers = registries
6768
.values().stream()
6869
.flatMap(r -> r.getHandlers().stream())
69-
.collect(ConcurrentHashMap::new, (map, handler) -> map.put(handler.getPath(), handler.getHandler()),
70+
.collect(ConcurrentHashMap::new, (map, handler) -> map.put(handler.getPath(), handler),
7071
ConcurrentHashMap::putAll);
7172

7273
final Map<String, RegisteredEventListener> eventListeners = registries
@@ -82,21 +83,6 @@ public HandlerResolver resolver(ApplicationContext context, DefaultQueryHandler
8283
ConcurrentHashMap::putAll);
8384

8485
return new HandlerResolver(handlers, eventListeners, commandHandlers) {
85-
@Override
86-
@SuppressWarnings("unchecked")
87-
public QueryHandler<?, ?> getQueryHandler(String path) {
88-
final QueryHandler<?, ?> handler = super.getQueryHandler(path);
89-
if (handler == null) {
90-
try {
91-
final String handlerName = env.getProperty(path);
92-
return context.getBean(handlerName, QueryHandler.class);
93-
} catch (Exception e) {
94-
return defaultHandler;
95-
}
96-
}
97-
return handler;
98-
}
99-
10086
@Override
10187
@SuppressWarnings("unchecked")
10288
public <T> RegisteredCommandHandler<T> getCommandHandler(String path) {

async/async-commons/src/main/java/org/reactivecommons/async/impl/HandlerResolver.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@
44
import org.reactivecommons.async.api.handlers.QueryHandler;
55
import org.reactivecommons.async.api.handlers.registered.RegisteredCommandHandler;
66
import org.reactivecommons.async.api.handlers.registered.RegisteredEventListener;
7+
import org.reactivecommons.async.api.handlers.registered.RegisteredQueryHandler;
78

89
import java.util.Collection;
910
import java.util.Map;
1011

1112
@RequiredArgsConstructor
1213
public class HandlerResolver {
1314

14-
private final Map<String, QueryHandler<?, ?>> queryHandlers;
15+
private final Map<String, RegisteredQueryHandler> queryHandlers;
1516
private final Map<String, RegisteredEventListener> eventListeners;
1617
private final Map<String, RegisteredCommandHandler> commandHandlers;
1718

1819

1920
@SuppressWarnings("unchecked")
20-
public <T, R> QueryHandler<T, R> getQueryHandler(String path) {
21-
return (QueryHandler<T, R>) queryHandlers.get(path);
21+
public <T, R> RegisteredQueryHandler<T, R> getQueryHandler(String path) {
22+
return (RegisteredQueryHandler<T, R>) queryHandlers.get(path);
2223
}
2324

2425
@SuppressWarnings("unchecked")

async/async-commons/src/main/java/org/reactivecommons/async/impl/listeners/ApplicationQueryListener.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.rabbitmq.client.AMQP;
44
import lombok.extern.java.Log;
55
import org.reactivecommons.async.api.handlers.QueryHandler;
6+
import org.reactivecommons.async.api.handlers.registered.RegisteredQueryHandler;
67
import org.reactivecommons.async.impl.HandlerResolver;
78
import org.reactivecommons.async.impl.Headers;
89
import org.reactivecommons.async.impl.QueryExecutor;
@@ -26,6 +27,7 @@
2627
import static org.reactivecommons.async.impl.Headers.*;
2728

2829
@Log
30+
//TODO: Organizar inferencia de tipos de la misma forma que en comandos y eventos
2931
public class ApplicationQueryListener extends GenericMessageListener {
3032

3133

@@ -48,11 +50,10 @@ public ApplicationQueryListener(ReactiveMessageListener listener, String queueNa
4850

4951
@Override
5052
protected Function<Message, Mono<Object>> rawMessageHandler(String executorPath) {
51-
final QueryHandler<Object, Object> handler1 = handlerResolver.getQueryHandler(executorPath);
52-
ParameterizedType genericSuperclass = (ParameterizedType) handler1.getClass().getGenericInterfaces()[0];
53-
final Class<?> handlerClass = (Class<?>) genericSuperclass.getActualTypeArguments()[1];
53+
final RegisteredQueryHandler<Object, Object> handler1 = handlerResolver.getQueryHandler(executorPath);
54+
final Class<?> handlerClass = (Class<?>) handler1.getQueryClass();
5455
Function<Message, Object> messageConverter = msj -> converter.readAsyncQuery(msj, handlerClass).getQueryData();
55-
final QueryExecutor<Object, Object> executor = new QueryExecutor<>(handler1, messageConverter);
56+
final QueryExecutor executor = new QueryExecutor(handler1.getHandler(), messageConverter);
5657
return executor::execute;
5758
}
5859

0 commit comments

Comments
 (0)