forked from fanruan/demo-tabledata-redis
Elijah
5 years ago
8 changed files with 130 additions and 1 deletions
@ -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"); |
||||||
|
} |
||||||
|
} |
@ -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<RedisDatabaseConnection> { |
||||||
|
|
||||||
|
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<RedisDatabaseConnection> 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); |
||||||
|
} |
||||||
|
} |
Binary file not shown.
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue