This commit is contained in:
@@ -59,6 +59,7 @@
|
|||||||
-->
|
-->
|
||||||
<!--
|
<!--
|
||||||
MQ管理接口配置
|
MQ管理接口配置
|
||||||
|
不同MQ节点所配置的MQ集群不能重复。
|
||||||
name: 服务的名称,用于监控识别,多个mq节点时只能有一个name为空的节点,mq.name不能重复,命名规则: 字母、数字、下划线
|
name: 服务的名称,用于监控识别,多个mq节点时只能有一个name为空的节点,mq.name不能重复,命名规则: 字母、数字、下划线
|
||||||
value: 实现类名,必须是org.redkale.mq.MessageAgent的子类
|
value: 实现类名,必须是org.redkale.mq.MessageAgent的子类
|
||||||
MQ节点下的子节点配置没有固定格式, 根据MessageAgent实现方的定义来配置
|
MQ节点下的子节点配置没有固定格式, 根据MessageAgent实现方的定义来配置
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.redkale.mq;
|
package org.redkale.mq;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.function.*;
|
import java.util.function.*;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.redkale.boot.*;
|
import org.redkale.boot.*;
|
||||||
@@ -38,11 +39,17 @@ public abstract class MessageAgent {
|
|||||||
protected Map<String, Service> localConsumers;
|
protected Map<String, Service> localConsumers;
|
||||||
|
|
||||||
public void init(AnyValue config) {
|
public void init(AnyValue config) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompletableFuture<Void> start() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompletableFuture<Void> stop() {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroy(AnyValue config) {
|
public void destroy(AnyValue config) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
|
|
||||||
protected Annotation[] annotations;
|
protected Annotation[] annotations;
|
||||||
|
|
||||||
|
// @since 2.1.0
|
||||||
protected Serializable currentUserid;
|
protected Serializable currentUserid;
|
||||||
|
|
||||||
protected Object currentUser;
|
protected Object currentUser;
|
||||||
@@ -305,12 +306,14 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置当前用户ID, 通常在HttpServlet.preExecute方法里设置currentUserid <br>
|
* 设置当前用户ID, 通常在HttpServlet.preExecute方法里设置currentUserid <br>
|
||||||
* 数据类型通常是int、long、String
|
* 数据类型只能是int、long、String、JavaBean
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param userid 用户ID
|
* @param userid 用户ID
|
||||||
*
|
*
|
||||||
* @return HttpRequest
|
* @return HttpRequest
|
||||||
|
*
|
||||||
|
* @since 2.1.0
|
||||||
*/
|
*/
|
||||||
public <T extends Serializable> HttpRequest setCurrentUserid(T userid) {
|
public <T extends Serializable> HttpRequest setCurrentUserid(T userid) {
|
||||||
this.currentUserid = userid;
|
this.currentUserid = userid;
|
||||||
@@ -320,9 +323,11 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
/**
|
/**
|
||||||
* 获取当前用户ID<br>
|
* 获取当前用户ID<br>
|
||||||
*
|
*
|
||||||
* @param <T> 通常是int、long、String类型
|
* @param <T> 数据类型只能是int、long、String、JavaBean
|
||||||
*
|
*
|
||||||
* @return 用户信息
|
* @return 用户ID
|
||||||
|
*
|
||||||
|
* @since 2.1.0
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <T extends Serializable> T currentUserid() {
|
public <T extends Serializable> T currentUserid() {
|
||||||
|
|||||||
@@ -205,6 +205,11 @@ public final class Rest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//仅供Rest动态构建里 currentUserid() 使用
|
||||||
|
public static <T> T orElse(T t, T defValue) {
|
||||||
|
return t == null ? defValue : t;
|
||||||
|
}
|
||||||
|
|
||||||
public static <T extends HttpServlet> T createRestWebSocketServlet(final ClassLoader classLoader, final Class<? extends WebSocket> webSocketType) {
|
public static <T extends HttpServlet> T createRestWebSocketServlet(final ClassLoader classLoader, final Class<? extends WebSocket> webSocketType) {
|
||||||
if (webSocketType == null) throw new RuntimeException("Rest WebSocket Class is null on createRestWebSocketServlet");
|
if (webSocketType == null) throw new RuntimeException("Rest WebSocket Class is null on createRestWebSocketServlet");
|
||||||
if (Modifier.isAbstract(webSocketType.getModifiers())) throw new RuntimeException("Rest WebSocket Class(" + webSocketType + ") cannot abstract on createRestWebSocketServlet");
|
if (Modifier.isAbstract(webSocketType.getModifiers())) throw new RuntimeException("Rest WebSocket Class(" + webSocketType + ") cannot abstract on createRestWebSocketServlet");
|
||||||
@@ -726,6 +731,7 @@ public final class Rest {
|
|||||||
if (!java.lang.reflect.Modifier.isPublic(mod)) throw new RuntimeException(baseServletType + " is not Public Class on createRestServlet");
|
if (!java.lang.reflect.Modifier.isPublic(mod)) throw new RuntimeException(baseServletType + " is not Public Class on createRestServlet");
|
||||||
if (java.lang.reflect.Modifier.isAbstract(mod)) throw new RuntimeException(baseServletType + " cannot a abstract Class on createRestServlet");
|
if (java.lang.reflect.Modifier.isAbstract(mod)) throw new RuntimeException(baseServletType + " cannot a abstract Class on createRestServlet");
|
||||||
|
|
||||||
|
final String restInternalName = Type.getInternalName(Rest.class);
|
||||||
final String serviceDesc = Type.getDescriptor(serviceType);
|
final String serviceDesc = Type.getDescriptor(serviceType);
|
||||||
final String webServletDesc = Type.getDescriptor(WebServlet.class);
|
final String webServletDesc = Type.getDescriptor(WebServlet.class);
|
||||||
final String resDesc = Type.getDescriptor(Resource.class);
|
final String resDesc = Type.getDescriptor(Resource.class);
|
||||||
@@ -1300,27 +1306,26 @@ public final class Rest {
|
|||||||
mv.visitVarInsn(ALOAD, 1);
|
mv.visitVarInsn(ALOAD, 1);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "currentUserid", "()Ljava/io/Serializable;", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, reqInternalName, "currentUserid", "()Ljava/io/Serializable;", false);
|
||||||
if (ptype == int.class) {
|
if (ptype == int.class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
|
||||||
|
mv.visitInsn(ICONST_0);
|
||||||
|
mv.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false);
|
||||||
|
mv.visitMethodInsn(INVOKESTATIC, restInternalName, "orElse", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false);
|
||||||
|
|
||||||
mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false);
|
||||||
mv.visitVarInsn(ISTORE, maxLocals);
|
mv.visitVarInsn(ISTORE, maxLocals);
|
||||||
varInsns.add(new int[]{ILOAD, maxLocals});
|
varInsns.add(new int[]{ILOAD, maxLocals});
|
||||||
} else if (ptype == float.class) {
|
|
||||||
mv.visitTypeInsn(CHECKCAST, "java/lang/Float");
|
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Float", "floatValue", "()F", false);
|
|
||||||
mv.visitVarInsn(FSTORE, maxLocals);
|
|
||||||
varInsns.add(new int[]{FLOAD, maxLocals});
|
|
||||||
} else if (ptype == long.class) {
|
} else if (ptype == long.class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Long");
|
||||||
|
mv.visitInsn(LCONST_0);
|
||||||
|
mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
|
||||||
|
mv.visitMethodInsn(INVOKESTATIC, restInternalName, "orElse", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false);
|
||||||
|
|
||||||
mv.visitTypeInsn(CHECKCAST, "java/lang/Long");
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Long");
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J", false);
|
||||||
mv.visitVarInsn(LSTORE, maxLocals);
|
mv.visitVarInsn(LSTORE, maxLocals);
|
||||||
varInsns.add(new int[]{LLOAD, maxLocals});
|
varInsns.add(new int[]{LLOAD, maxLocals});
|
||||||
maxLocals++;
|
maxLocals++;
|
||||||
} else if (ptype == double.class) {
|
|
||||||
mv.visitTypeInsn(CHECKCAST, "java/lang/Double");
|
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false);
|
|
||||||
mv.visitVarInsn(DSTORE, maxLocals);
|
|
||||||
varInsns.add(new int[]{DLOAD, maxLocals});
|
|
||||||
maxLocals++;
|
|
||||||
} else {
|
} else {
|
||||||
mv.visitTypeInsn(CHECKCAST, Type.getInternalName(ptype));
|
mv.visitTypeInsn(CHECKCAST, Type.getInternalName(ptype));
|
||||||
mv.visitVarInsn(ASTORE, maxLocals);
|
mv.visitVarInsn(ASTORE, maxLocals);
|
||||||
|
|||||||
Reference in New Issue
Block a user