diff --git a/plugin.xml b/plugin.xml
index abca42d..1b4a84e 100755
--- a/plugin.xml
+++ b/plugin.xml
@@ -3,12 +3,13 @@
com.fr.solution.plugin.db.redis.v10
yes
- 6.2
+ 6.3
10.0
2018-11-29
richie
[2019-08-26]给console增加一个engine()函数,判断使用的脚本引擎名字。
[2019-08-26]不支持V8引擎的机器上使用JDK内置的脚本引擎(仅支持ES5语法)。
[2019-03-21]现在可以通过跳板服务连接redis。
@@ -33,6 +34,9 @@
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/fr/plugin/db/redis/RedisConnectionComponent.java b/src/main/java/com/fr/plugin/db/redis/RedisConnectionComponent.java
new file mode 100644
index 0000000..fff856b
--- /dev/null
+++ b/src/main/java/com/fr/plugin/db/redis/RedisConnectionComponent.java
@@ -0,0 +1,13 @@
+package com.fr.plugin.db.redis;
+
+import com.fr.web.struct.Component;
+import com.fr.web.struct.browser.RequestClient;
+import com.fr.web.struct.category.ScriptPath;
+
+public class RedisConnectionComponent extends Component {
+ public static final RedisConnectionComponent KEY = new RedisConnectionComponent();
+ @Override
+ public ScriptPath script(RequestClient req) {
+ return ScriptPath.build("com/fr/plugin/db/redis/web/redis.js");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/fr/plugin/db/redis/RedisUniversalConnectionImpl.java b/src/main/java/com/fr/plugin/db/redis/RedisUniversalConnectionImpl.java
new file mode 100644
index 0000000..18dea85
--- /dev/null
+++ b/src/main/java/com/fr/plugin/db/redis/RedisUniversalConnectionImpl.java
@@ -0,0 +1,105 @@
+package com.fr.plugin.db.redis;
+
+import com.fr.decision.fun.impl.AbstractUniversalConnectionProvider;
+import com.fr.decision.webservice.utils.DecisionServiceConstants;
+import com.fr.decision.webservice.utils.WebServiceUtils;
+import com.fr.json.JSONObject;
+import com.fr.plugin.db.redis.core.RedisDatabaseConnection;
+import com.fr.plugin.db.redis.core.pool.RedisConnectionPoolConfig;
+import com.fr.plugin.db.redis.core.pool.RedisConnectionProxyConfig;
+import com.fr.stable.AssistUtils;
+import com.fr.transaction.Configurations;
+import com.fr.transaction.WorkerAdaptor;
+import com.fr.web.struct.Atom;
+
+
+public class RedisUniversalConnectionImpl extends AbstractUniversalConnectionProvider {
+
+ private static final String BASIC_INFO = "basicConfig";
+ private static final String POOL_INFO = "poolConfig";
+ private static final String PROXY_INFO = "proxyConfig";
+
+
+ @Override
+ public String nameForConnection() {
+ return "Redis";
+ }
+
+ @Override
+ public String iconPathForConnection() {
+ return "/com/fr/plugin/db/redis/images/redis.png";
+ }
+
+ @Override
+ public Class classForConnection() {
+ return RedisDatabaseConnection.class;
+ }
+
+ @Override
+ public Atom client() {
+ return RedisConnectionComponent.KEY;
+ }
+
+ @Override
+ public JSONObject serialize(RedisDatabaseConnection connection) {
+ JSONObject jsonObject = new JSONObject();
+ try {
+ jsonObject.put(BASIC_INFO, JSONObject.mapFrom(connection.clone()));
+ //将ConnectionPoolConfig和RedisConnectionProxyConfig也一次塞给前台展示
+ jsonObject.put(POOL_INFO, JSONObject.mapFrom(RedisConnectionPoolConfig.getInstance().clone()));
+ JSONObject proxy = JSONObject.mapFrom(RedisConnectionProxyConfig.getInstance().clone());
+ proxy.put("password", DecisionServiceConstants.DEFAULT_PASSWORD);
+ jsonObject.put(PROXY_INFO, proxy);
+ } catch (CloneNotSupportedException ignore) {
+ }
+ return jsonObject;
+ }
+
+ @Override
+ public RedisDatabaseConnection deserialize(RedisDatabaseConnection oldConnection, JSONObject pluginData) {
+ JSONObject redisDatabaseConnection = getRedisDataConnection(pluginData);
+ if (oldConnection != null && DecisionServiceConstants.DEFAULT_PASSWORD.equals(redisDatabaseConnection.getString("password"))) {
+ redisDatabaseConnection.put("password", oldConnection.getPassword());
+ } else {
+ redisDatabaseConnection.put("password", WebServiceUtils.getBase64DecodeStr(redisDatabaseConnection.getString("password")));
+ }
+ return redisDatabaseConnection.mapTo(RedisDatabaseConnection.class);
+ }
+
+ private JSONObject getRedisDataConnection(JSONObject object) {
+
+ final JSONObject pool = object.getJSONObject(POOL_INFO);
+ if (pool != null) {
+ final RedisConnectionPoolConfig poolConfig = pool.mapTo(RedisConnectionPoolConfig.class);
+ Configurations.update(new WorkerAdaptor(RedisConnectionPoolConfig.class) {
+ @Override
+ public void run() {
+ RedisConnectionPoolConfig.getInstance().setBlockWhenExhausted(poolConfig.getBlockWhenExhausted());
+ RedisConnectionPoolConfig.getInstance().setLifo(poolConfig.getLifo());
+ RedisConnectionPoolConfig.getInstance().setMaxIdle(poolConfig.getMaxIdle());
+ RedisConnectionPoolConfig.getInstance().setMaxTotal(poolConfig.getMaxTotal());
+ RedisConnectionPoolConfig.getInstance().setMaxWait(poolConfig.getMaxWait());
+ RedisConnectionPoolConfig.getInstance().setTimeout(poolConfig.getTimeout());
+ }
+ });
+ }
+ final JSONObject proxy = object.getJSONObject(PROXY_INFO);
+ if (proxy != null) {
+ final RedisConnectionProxyConfig proxyConfig = proxy.mapTo(RedisConnectionProxyConfig.class);
+ Configurations.update(new WorkerAdaptor(RedisConnectionProxyConfig.class) {
+ @Override
+ public void run() {
+ RedisConnectionProxyConfig.getInstance().setHost(proxyConfig.getHost());
+ RedisConnectionProxyConfig.getInstance().setOpen(proxyConfig.isOpen());
+ if (!AssistUtils.equals(proxyConfig.getPassword(), DecisionServiceConstants.DEFAULT_PASSWORD)) {
+ RedisConnectionProxyConfig.getInstance().setPassword(WebServiceUtils.getBase64DecodeStr(proxyConfig.getPassword()));
+ }
+ RedisConnectionProxyConfig.getInstance().setPort(proxyConfig.getPort());
+ RedisConnectionProxyConfig.getInstance().setPrivateKeyPath(proxyConfig.getPrivateKeyPath());
+ RedisConnectionProxyConfig.getInstance().setUsername(proxyConfig.getUsername());
+ }
+ });
+ }
+ return object.getJSONObject(BASIC_INFO);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/fr/plugin/db/redis/core/RedisDatabaseConnection.java b/src/main/java/com/fr/plugin/db/redis/core/RedisDatabaseConnection.java
index 5b229c5..f8c7e41 100755
--- a/src/main/java/com/fr/plugin/db/redis/core/RedisDatabaseConnection.java
+++ b/src/main/java/com/fr/plugin/db/redis/core/RedisDatabaseConnection.java
@@ -12,10 +12,12 @@ import com.fr.data.impl.Connection;
import com.fr.plugin.db.redis.core.emb.Redis;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader;
+import com.fr.third.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;
import java.util.Set;
+@JsonIgnoreProperties({"id", "data", "classInfo", "nameSpace", "driver"})
public class RedisDatabaseConnection extends AbstractDatabaseConnection {
private static final int DEFAULT_REDIS_PORT = 6379;
diff --git a/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionPoolConfig.java b/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionPoolConfig.java
index 36d4f74..9edd9eb 100644
--- a/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionPoolConfig.java
+++ b/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionPoolConfig.java
@@ -3,6 +3,7 @@ package com.fr.plugin.db.redis.core.pool;
import com.fanruan.api.conf.BaseConfiguration;
import com.fanruan.api.conf.HolderKit;
import com.fr.config.holder.Conf;
+import com.fr.third.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
@@ -10,6 +11,7 @@ import com.fr.config.holder.Conf;
* @version 10.0
* Created by richie on 2019-03-21
*/
+@JsonIgnoreProperties("nameSpace")
public class RedisConnectionPoolConfig extends BaseConfiguration {
private static volatile RedisConnectionPoolConfig instance = null;
diff --git a/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionProxyConfig.java b/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionProxyConfig.java
index 5eb5509..d4f6e6a 100644
--- a/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionProxyConfig.java
+++ b/src/main/java/com/fr/plugin/db/redis/core/pool/RedisConnectionProxyConfig.java
@@ -5,12 +5,14 @@ import com.fanruan.api.conf.HolderKit;
import com.fanruan.api.security.SecurityKit;
import com.fanruan.api.util.StringKit;
import com.fr.config.holder.Conf;
+import com.fr.third.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @author richie
* @version 10.0
* Created by richie on 2019-03-21
*/
+@JsonIgnoreProperties("nameSpace")
public class RedisConnectionProxyConfig extends BaseConfiguration {
private static volatile RedisConnectionProxyConfig instance = null;
diff --git a/src/main/resources/com/fr/plugin/db/redis/web/demo-tabledate-redis-web.zip b/src/main/resources/com/fr/plugin/db/redis/web/demo-tabledate-redis-web.zip
new file mode 100644
index 0000000..8049dd9
Binary files /dev/null and b/src/main/resources/com/fr/plugin/db/redis/web/demo-tabledate-redis-web.zip differ
diff --git a/src/main/resources/com/fr/plugin/db/redis/web/redis.js b/src/main/resources/com/fr/plugin/db/redis/web/redis.js
new file mode 100644
index 0000000..a273367
--- /dev/null
+++ b/src/main/resources/com/fr/plugin/db/redis/web/redis.js
@@ -0,0 +1 @@
+/*! time: 2019-9-4 13:44:09 */!function(e){var t={};function o(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=t,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){e.exports=o(1)},function(e,t,o){"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:{};return function(o){return function(n){function r(){return i(this,r),c(this,p(r).apply(this,arguments))}return l(r,o),u(r,[{key:"_store",value:function(){var o=t.props?t.props.apply(this):void 0;return BI.Models.getModel(e.xtype,o)}}]),r}()}}(Te)((Ie=Be=function(e){function t(){var e,o,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var i=arguments.length,a=new Array(i),u=0;u