From e2443d1219cc16748391475519f1ece27d9b82d0 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 23 Jul 2024 16:57:46 +0800 Subject: [PATCH 01/14] =?UTF-8?q?REPORT-114391=20=E3=80=90=E5=BE=AE?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=80=82=E9=85=8D=E3=80=91=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?&=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E5=99=A8=E8=83=BD?= =?UTF-8?q?=E5=A4=9F=E6=AD=A3=E5=B8=B8=E5=90=AF=E5=8A=A8=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=90=AF=E5=8A=A8=E4=B8=8E=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/env/HttpWorkspaceConnector.java | 4 ++++ .../com/fanruan/boot/init/DesignPreLoadComponent.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java b/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java index 4c4d7c9429..c92d78ad40 100644 --- a/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java +++ b/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java @@ -53,6 +53,10 @@ public class HttpWorkspaceConnector implements WorkspaceConnector { FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo); try { LoginResponseInfoBean bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo)); + // 服务器如果没返回token,肯定是出问题了,直接抛出异常 + if (StringUtils.isEmpty(bean.getAccessToken())) { + throw new RuntimeException("Empty token, try connect again and check server"); + } WorkspaceConnection connection = new WorkspaceConnection( UUID.randomUUID().toString(), connectionInfo.getUserName(), diff --git a/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java b/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java index 744ce4b65c..736aa35096 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java @@ -12,6 +12,7 @@ import com.fanruan.plugin.autonomy.AutonomyClassManagerGroup; import com.fanruan.product.BuildContext; import com.fanruan.product.ProductConstants; import com.fr.base.OptimizeUtil; +import com.fr.concurrent.FineExecutors; import com.fr.config.dao.DaoSelectorFactory; import com.fr.config.dao.PropertiesConstants; import com.fr.decision.service.context.ServiceContext; @@ -74,6 +75,7 @@ import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Locale; import java.util.Set; +import java.util.Timer; import java.util.concurrent.TimeUnit; /** @@ -226,6 +228,12 @@ public class DesignPreLoadComponent { try { beforeAllStart(); //清空临时文件 + FineExecutors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(new Runnable() { + @Override + public void run() { + TmpFileUtils.cleanUpInnerTmpFiles(); + } + }, 10, 10, TimeUnit.MINUTES); Runtime.getRuntime().addShutdownHook(new Thread(TmpFileUtils::cleanUpInnerTmpFiles)); RestartHelper.deleteRecordFilesWhenStart(); CloudCenter.getInstance(); From 124ea3970e696b50c88f23c490aa8e72d310f0a2 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 23 Jul 2024 17:31:56 +0800 Subject: [PATCH 02/14] =?UTF-8?q?REPORT-114391=20=E3=80=90=E5=BE=AE?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=80=82=E9=85=8D=E3=80=91=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?&=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E5=99=A8=E8=83=BD?= =?UTF-8?q?=E5=A4=9F=E6=AD=A3=E5=B8=B8=E5=90=AF=E5=8A=A8=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=96=AD=E5=BC=80=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/RPCConnectHandlerCenter.java | 158 ++++++++++++++++++ .../boot/env/function/DesignComponent.java | 2 + 2 files changed, 160 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/RPCConnectHandlerCenter.java diff --git a/designer-base/src/main/java/com/fr/design/RPCConnectHandlerCenter.java b/designer-base/src/main/java/com/fr/design/RPCConnectHandlerCenter.java new file mode 100644 index 0000000000..3a57d661df --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/RPCConnectHandlerCenter.java @@ -0,0 +1,158 @@ +package com.fr.design; + +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.ui.util.UIUtil; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StableUtils; +import com.fr.third.org.apache.http.client.config.RequestConfig; +import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; +import com.fr.third.org.apache.http.client.methods.HttpGet; +import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; +import com.fr.third.org.apache.http.impl.client.HttpClients; +import com.fr.workspace.WorkContext; +import com.fr.workspace.Workspace; +import com.fr.workspace.WorkspaceEvent; +import com.fr.workspace.base.WorkspaceConstants; +import com.fr.workspace.connect.WorkspaceConnectionInfo; +import com.fr.workspace.engine.channel.WorkspaceChannelFactory; +import com.fr.workspace.engine.exception.WorkspaceConnectionException; + +import javax.swing.*; + +/** + * RPC连接处理中心 + * + * @author Roger + * @since 11.0 + * Created on 2023/12/13 + */ +public class RPCConnectHandlerCenter { + + private static volatile boolean alerting = false; + private static final int TIMEOUT = 5000; + + private static Listener listener = new Listener() { + @Override + public void on(Event event, Workspace workspace) { + //暂时先不做重连处理,3次RPC连接失败后提示切换工作目录 + showRPCDisconnectDialog(); + } + }; + + /** + * 开启事件监听 + */ + public static void startListener() { + if (!WorkContext.getCurrent().isLocal()) { + EventDispatcher.listen(WorkspaceEvent.LostConnect, listener); + } + } + + /** + * 弹窗提示连接断开 + */ + public static void showRPCDisconnectDialog() { + UIUtil.invokeLaterIfNeeded(RPCConnectHandlerCenter::showDialog); + } + + /** + * RPC连接测试 + * + * @param info 连接信息 + * @return 是否连接成功 + */ + public static boolean checkRPCConnect(WorkspaceConnectionInfo info) { + try { + return WorkspaceChannelFactory.testConnection(info); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e, e.getMessage()); + return false; + } + } + + /** + * http连接检测,从DesignerSocketIO中移过来的,先保留着 + * + * @param info 连接信息 + * @return 是否连接成功 + */ + public static boolean checkHttpConnect(WorkspaceConnectionInfo info) { + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(StableUtils.pathJoin(info.getUrl(), WorkspaceConstants.CONTROLLER_PREFIX, WorkspaceConstants.VT)); + RequestConfig requestConfig = RequestConfig + .custom() + .setConnectTimeout(TIMEOUT) + .setConnectionRequestTimeout(TIMEOUT) + .build(); + httpGet.setConfig(requestConfig); + try { + CloseableHttpResponse response = httpclient.execute(httpGet); + if (isErrorStatus(response.getStatusLine().getStatusCode())) { + //这边nginx做负载,服务器被kill掉,返回的是502,不会抛错,导致checkRPCConnect通过 + //针对500-600的错误码加个判断,其他类型的状态码暂不考虑,如果有遇到再处理,不然怕影响范围大 + throw new WorkspaceConnectionException("Response " + response.getStatusLine().toString()); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e, e.getMessage()); + return false; + } + return true; + } + + /** + * 提示连接已经断开,如果已经在提示中了就直接返回 + */ + private static void showDialog() { + if (alerting) { + return; + } + synchronized (RPCConnectHandlerCenter.class) { + if (alerting) { + return; + } + alerting = true; + try { + FineJOptionPane.showMessageDialog( + DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Design_Basic_Remote_Disconnected"), + UIManager.getString("OptionPane.messageDialogTitle"), + JOptionPane.ERROR_MESSAGE, + UIManager.getIcon("OptionPane.errorIcon")); + EnvChangeEntrance.getInstance().chooseEnv(); + } finally { + alerting = false; + } + } + } + + /** + * 错误状态码 + * 5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。代码 说明 + * 500 (服务器内部错误) 服务器遇到错误,无法完成请求。 + * 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 + * 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 + * 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 + * 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。 + * 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。 + * + * @param status 错误状态码 + * @return 是否是错误状态码 + */ + private static boolean isErrorStatus(int status) { + return status >= 500 && status <= 600; + } + + /** + * 停止事件监听 + */ + public static void stopListener() { + if (!WorkContext.getCurrent().isLocal()) { + EventDispatcher.stopListen(listener); + } + } +} diff --git a/designer-realize/src/main/java/com/fanruan/boot/env/function/DesignComponent.java b/designer-realize/src/main/java/com/fanruan/boot/env/function/DesignComponent.java index d55b4a4fbd..31983dfe88 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/env/function/DesignComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/env/function/DesignComponent.java @@ -23,6 +23,7 @@ import com.fr.decision.webservice.v10.plugin.helper.category.impl.PluginResource import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.RPCConnectHandlerCenter; import com.fr.design.actions.NewFormAction; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.insert.cell.BiasCellAction; @@ -218,6 +219,7 @@ public class DesignComponent { DesignerWorkspaceLoader.init(); storePassport(); AlphaFineHelper.switchConfig4Locale(); + RPCConnectHandlerCenter.startListener(); RecoverManager.register(new RecoverForDesigner()); } From 8bdbb3f32943d8d035422beb6c3fdf01df7e7fd1 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 24 Jul 2024 13:58:22 +0800 Subject: [PATCH 03/14] =?UTF-8?q?REPORT-114391=20=E3=80=90=E5=BE=AE?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=80=82=E9=85=8D=E3=80=91=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?&=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E5=99=A8=E8=83=BD?= =?UTF-8?q?=E5=A4=9F=E6=AD=A3=E5=B8=B8=E5=90=AF=E5=8A=A8=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=9B=BE=E8=A1=A8=E9=85=8D=E7=BD=AE+=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=8E=AF=E5=A2=83=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/env/HttpWorkspaceConnector.java | 2 +- .../java/com/fr/design/module/ChartPreStyleListPane.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java b/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java index c92d78ad40..572e2f583c 100644 --- a/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java +++ b/designer-base/src/main/java/com/fr/design/env/HttpWorkspaceConnector.java @@ -63,11 +63,11 @@ public class HttpWorkspaceConnector implements WorkspaceConnector { HttpConstants.AUTHORIZATION_PREFIX + bean.getAccessToken(), InetAddress.getLocalHost().getHostAddress()); client.updateConnection(connection); + client.startHeartBeat(); } catch (Exception e) { client.closePool(); throw e; } - client.startHeartBeat(); CompatibleRegister.registerCompatibleEnv(); RepositoryManager.getInstance().clearLastPool(); return client; diff --git a/designer-chart/src/main/java/com/fr/design/module/ChartPreStyleListPane.java b/designer-chart/src/main/java/com/fr/design/module/ChartPreStyleListPane.java index 06b3eb5028..aa7f02fbac 100644 --- a/designer-chart/src/main/java/com/fr/design/module/ChartPreStyleListPane.java +++ b/designer-chart/src/main/java/com/fr/design/module/ChartPreStyleListPane.java @@ -118,7 +118,10 @@ public class ChartPreStyleListPane extends JListControlPane { while (keys.hasNext()) { Object key = keys.next(); ChartColorMatching value = (ChartColorMatching) config.getPreStyle(key); - + // 新配置框架不再使用mirror后 原先mirror的地方需要手动清理下namespace + if(!StringUtils.isEmpty(value.getNameSpace())) { + value.reset(); + } list.add(new NameObject(Utils.objectToString(key), value)); } From c3c38e10c928abb834b7982072066658cf3007aa Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 24 Jul 2024 14:32:40 +0800 Subject: [PATCH 04/14] =?UTF-8?q?REPORT-114391=20=E3=80=90=E5=BE=AE?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=80=82=E9=85=8D=E3=80=91=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?&=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E5=99=A8=E8=83=BD?= =?UTF-8?q?=E5=A4=9F=E6=AD=A3=E5=B8=B8=E5=90=AF=E5=8A=A8=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/RPCConnectHandlerCenter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/RPCConnectHandlerCenter.java b/designer-base/src/main/java/com/fr/design/RPCConnectHandlerCenter.java index 3a57d661df..eb08789d0d 100644 --- a/designer-base/src/main/java/com/fr/design/RPCConnectHandlerCenter.java +++ b/designer-base/src/main/java/com/fr/design/RPCConnectHandlerCenter.java @@ -22,7 +22,8 @@ import com.fr.workspace.connect.WorkspaceConnectionInfo; import com.fr.workspace.engine.channel.WorkspaceChannelFactory; import com.fr.workspace.engine.exception.WorkspaceConnectionException; -import javax.swing.*; +import javax.swing.JOptionPane; +import javax.swing.UIManager; /** * RPC连接处理中心 From 7fddad6d14552ff39b12194efdbf7086c208f1b5 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 24 Jul 2024 16:39:51 +0800 Subject: [PATCH 05/14] =?UTF-8?q?REPORT-114391=20=E3=80=90=E5=BE=AE?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=80=82=E9=85=8D=E3=80=91=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?&=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E5=99=A8=E8=83=BD?= =?UTF-8?q?=E5=A4=9F=E6=AD=A3=E5=B8=B8=E5=90=AF=E5=8A=A8=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=BA=8F=E5=88=97=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/share/collect/ComponentSender.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java index 8941cfba80..56011b6349 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java @@ -17,8 +17,10 @@ public class ComponentSender { private static final String CLOUD_REUSE_URL = "https://cloud.fanruan.com/api/monitor/record_of_reusePlugin/single"; public static boolean send() { - String content = ComponentCollector.getInstance().generateTotalInfo(); - return sendInfo(CLOUD_REUSE_URL, content); + /// frm可能不用了,先关掉信息收集,后面处理 + //String content = ComponentCollector.getInstance().generateTotalInfo(); + //return sendInfo(CLOUD_REUSE_URL, content); + return true; } private static boolean sendInfo(String url, String content) { From df58ea9ae29ec08d7b7ecea53152ca751162ea00 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 25 Jul 2024 10:43:06 +0800 Subject: [PATCH 06/14] =?UTF-8?q?REPORT-127453=20frm=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/startup/ui/StartupPageModel.java | 12 ++++++++++-- .../boot/env/function/app/DesignAppComponent.java | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/startup/ui/StartupPageModel.java b/designer-base/src/main/java/com/fr/startup/ui/StartupPageModel.java index a461ee33b5..62b20d50d0 100644 --- a/designer-base/src/main/java/com/fr/startup/ui/StartupPageModel.java +++ b/designer-base/src/main/java/com/fr/startup/ui/StartupPageModel.java @@ -1,5 +1,6 @@ package com.fr.startup.ui; +import com.fr.base.extension.FileExtension; import com.fr.design.DesignerEnvManager; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; @@ -19,7 +20,8 @@ import java.util.stream.Collectors; * created by Harrison on 2022/07/06 **/ public class StartupPageModel { - + private static final String FRM = "frm"; + private static final String FORM = "form"; private StartupWorkspaceBean selectWorkspaceInfo; private List workspaceInfos = new ArrayList<>(); @@ -57,7 +59,13 @@ public class StartupPageModel { for (StartupWorkspaceBean info : infos) { String name = info.getName(); List recentFiles = envManager.getRecentOpenedFilePathList4Env(name); - recentFileMap.put(name, recentFiles); + List checkFiles = new ArrayList<>(); + for (String s : recentFiles) { + if (!s.endsWith(FRM) && !s.endsWith(FORM)) { + checkFiles.add(s); + } + } + recentFileMap.put(name, checkFiles); } return new StartupPageModel(infos, recentFileMap); } diff --git a/designer-realize/src/main/java/com/fanruan/boot/env/function/app/DesignAppComponent.java b/designer-realize/src/main/java/com/fanruan/boot/env/function/app/DesignAppComponent.java index e2f59dba9c..55ceb2de9d 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/env/function/app/DesignAppComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/env/function/app/DesignAppComponent.java @@ -56,6 +56,6 @@ public class DesignAppComponent { */ @Supplemental public void prepare() { - Carina.getApplicationContext().group(AppGroup.class).addAll(new CptApp(), new CptxApp(), new FormApp(), new XlsApp(), new XlsxApp()); + Carina.getApplicationContext().group(AppGroup.class).addAll(new CptApp(), new CptxApp(), new XlsApp(), new XlsxApp()); } } From cfaeac34c6158127f9451ff8f326e55621d55f81 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 25 Jul 2024 10:45:53 +0800 Subject: [PATCH 07/14] =?UTF-8?q?REPORT-114392=20FR-FBP=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E9=80=82=E9=85=8D=20?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=8E=AF=E5=A2=83=E7=9B=91=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java | 4 ++-- .../main/java/com/fanruan/boot/env/DesignEnvComponent.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 54cc4cc4d3..99579aae3d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -572,8 +572,8 @@ public abstract class ToolBarMenuDock { if (AlphaFineConfigManager.isALPHALicAvailable()) { shortCuts.add(new AlphaFineAction()); } - - shortCuts.add(new EnvDetectorAction()); + /// fbp本地和远程都暂时不使用环境监测 + //shortCuts.add(new EnvDetectorAction()); //服务平台(仅针对中国大陆) if (GeneralContext.getLocale().equals(Locale.CHINA)) { shortCuts.add(new ServicePlatformAction()); diff --git a/designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvComponent.java b/designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvComponent.java index 700fc12258..9e482c00ca 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvComponent.java @@ -402,7 +402,8 @@ public class DesignEnvComponent { } private void startEnvPrepare() { - EnvDetectorCenter.getInstance().init(); + /// 环境检测、资源升级都暂不支持 + //EnvDetectorCenter.getInstance().init(); if (WorkContext.getCurrent().isLocal()) { // 如果是切回本地,要初始化成本地仓库 // 如果是切回远程,会在用户创建的时候就同步初始化远程仓库 From ff0cee0c639178688ab0c8e69b3d14fe21f4e7e9 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 25 Jul 2024 12:33:02 +0800 Subject: [PATCH 08/14] =?UTF-8?q?REPORT-114392=20FR-FBP=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E9=80=82=E9=85=8D=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E8=BF=9E=E6=8E=A5=E4=BF=9D?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datapane/connect/ConnectionListPane.java | 105 ++++++++++++++++-- 1 file changed, 96 insertions(+), 9 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java index 94debc6c5b..72f948648a 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java @@ -3,11 +3,25 @@ package com.fr.design.data.datapane.connect; import com.fanruan.config.impl.data.ConnectionConfigProviderFactory; import com.fanruan.config.impl.data.ConnectionConfigWriterFactory; import com.fr.config.remote.RemoteConfigEvent; +import com.fr.data.auth.AuthenticationType; +import com.fr.data.auth.kerberos.KerberosAuthentication; +import com.fr.data.auth.kerberos.KerberosUtils; import com.fr.data.impl.Connection; import com.fr.data.impl.JDBCDatabaseConnection; import com.fr.data.impl.JNDIDatabaseConnection; +import com.fr.data.pool.DBCPConnectionPoolAttr; +import com.fr.data.security.ssh.BaseSsh; +import com.fr.data.security.ssh.SshType; +import com.fr.data.security.ssh.impl.KeyVerifySsh; +import com.fr.data.security.ssl.BaseSsl; +import com.fr.data.security.ssl.SslType; +import com.fr.data.security.ssl.impl.NormalSsl; +import com.fr.decision.privilege.TransmissionTool; import com.fr.decision.webservice.bean.datasource.ConnectionInfoBean; +import com.fr.decision.webservice.bean.datasource.JDBCConnectionBean; +import com.fr.decision.webservice.utils.DecisionServiceConstants; import com.fr.decision.webservice.v10.datasource.connection.processor.impl.ConnectionProcessorFactory; +import com.fr.decision.webservice.v10.datasource.connection.processor.impl.JDBCConnectionProcessor; import com.fr.design.ExtraDesignClassManager; import com.fr.design.data.MapCompareUtils; import com.fr.design.dialog.BasicDialog; @@ -24,10 +38,12 @@ import com.fr.license.database.DBTypes; import com.fr.license.database.DataBaseTypePointManager; import com.fr.license.exception.DataBaseNotSupportedException; import com.fr.log.FineLoggerFactory; +import com.fr.security.encryption.transmission.TransmissionEncryptors; import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; import com.fr.stable.StringUtils; import com.fr.stable.core.PropertyChangeAdapter; +import com.fr.third.fasterxml.jackson.databind.ObjectMapper; import com.fr.workspace.WorkContext; import com.fr.workspace.server.database.DataBaseTypeOperator; import com.fr.workspace.server.entity.connection.BatchConnectionModifyBean; @@ -58,6 +74,7 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh private final HashMap renameMap = new HashMap<>(); private final Map populatedConnectionsSnapshot = new LinkedHashMap<>(); private static List supportedDatabaseTypes = new ArrayList<>(); + private static ObjectMapper objectMapper = new ObjectMapper(); public ConnectionListPane() { renameMap.clear(); @@ -220,6 +237,7 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh List removedConnNames = new ArrayList<>(); List addConnections = new ArrayList<>(); List updateConnection = new ArrayList<>(); + List validConnection = new ArrayList<>(); MapCompareUtils.contrastMapEntries(populatedConnectionsSnapshot, updatedMap, (entryEventKind, s, connection) -> { try { switch (entryEventKind) { @@ -227,10 +245,12 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh removedConnNames.add(s); break; case ADDED: - addConnections.add(ConnectionProcessorFactory.createConnectionInfoBean(s, connection)); + addConnections.add(createConnectionInfoBean(s, connection)); + validConnection.add(connection); break; case UPDATED: - updateConnection.add(ConnectionProcessorFactory.createConnectionInfoBean(s, connection)); + updateConnection.add(createConnectionInfoBean(s, connection)); + validConnection.add(connection); break; default: break; @@ -266,21 +286,17 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh } }); - List validateBeans = new ArrayList<>(); - validateBeans.addAll(addConnections); - validateBeans.addAll(updateConnection); - this.validateDatabaseType(validateBeans); + this.validateDatabaseType(validConnection); this.alterConnections(addConnections, removedConnNames, updateConnection); } /** * 校验是否支持所有新增和修改数据连接的数据库类型 */ - public void validateDatabaseType(@NotNull List addedOrUpdatedConnections) throws Exception { + public void validateDatabaseType(@NotNull List addedOrUpdatedConnections) throws Exception { Set notSupportedConnections = new HashSet<>(); if (!addedOrUpdatedConnections.isEmpty()) { - for (ConnectionInfoBean bean : addedOrUpdatedConnections) { - Connection connection = ConnectionProcessorFactory.createConnection(bean); + for (Connection connection : addedOrUpdatedConnections) { // 仅校验jdbc连接,其他插件数据连接不进行校验; if (connection instanceof JDBCDatabaseConnection) { DBTypes dataBaseTypePoint = DataBaseTypePointManager.getInstance().getDataBaseTypePoint(connection.getDriver(), connection.feature()); @@ -317,6 +333,19 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh return false; } + private ConnectionInfoBean createConnectionInfoBean(String name, Connection connection) throws Exception { + if (JDBCConnectionProcessor.KEY.acceptConnections().contains(connection.getClass())) { + ConnectionInfoBean bean = new ConnectionInfoBean(); + bean.setConnectionData(objectMapper.writeValueAsString(convertToJDBCConnectionBean(connection, true))); + bean.setConnectionType(JDBCConnectionProcessor.CONNECTION_TYPE); + bean.setConnectionType(JDBCConnectionProcessor.KEY.getConnectionType(connection)); + bean.setConnectionName(name); + bean.setCreator(connection.getCreator()); + return bean; + } else { + return ConnectionProcessorFactory.createConnectionInfoBean(name, connection); + } + } private void alterConnections(List addConnections, List removedConnNames, List updateConnection) { @@ -385,4 +414,62 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh } } } + + /** + * jdbc的特殊处理 + */ + private JDBCConnectionBean convertToJDBCConnectionBean(Connection connection, boolean withPassword) { + JDBCDatabaseConnection jdbcConnection = (JDBCDatabaseConnection) connection; + JDBCConnectionBean jdbcConnectionBean = new JDBCConnectionBean(); + DBCPConnectionPoolAttr poolAttr = new DBCPConnectionPoolAttr(); + try { + poolAttr = (DBCPConnectionPoolAttr) jdbcConnection.getDbcpAttr().clone(); + } catch (CloneNotSupportedException ignore) { + } + poolAttr.setValidationQuery(TransmissionTool.encrypt(poolAttr.getValidationQuery())); + KerberosAuthentication kerberosAuthentication = null; + if (jdbcConnection.getAuthentication().type() == AuthenticationType.KERBEROS) { + //获取数据连接信息的时候,做一下兼容处理(兼容旧的kerberos形式) + KerberosUtils.compatibilityProcess(((KerberosAuthentication) jdbcConnection.getAuthentication())); + kerberosAuthentication = ((KerberosAuthentication) jdbcConnection.getAuthentication()); + } + //因为设计器创建连接时database属性为空,所以这里直接取数据库保存的fetchSize值,默认值为-1 + return jdbcConnectionBean + .newCharsetName(jdbcConnection.getNewCharsetName()) + .originalCharsetName(jdbcConnection.getOriginalCharsetName()) + .database(jdbcConnection.getDatabase()) + .user(jdbcConnection.getUser()) + .driver(jdbcConnection.getDriver()) + // 关键中的关键,由设计器发出的请求如果要携带密码,不能传明文,必须必须必须传加密后的密码 + .password(withPassword ? TransmissionEncryptors.getInstance().encrypt(jdbcConnection.getPassword()) : DecisionServiceConstants.DEFAULT_PASSWORD) + .schema(jdbcConnection.getSchema()) + .url(jdbcConnection.getURL()) + .creator(jdbcConnection.getCreator()) + .source(jdbcConnection.getDriverSource()) + .connectionPoolAttr(poolAttr.create()) + .authType(kerberosAuthentication != null ? "kerberos" : StringUtils.EMPTY) + .principal(kerberosAuthentication != null ? kerberosAuthentication.getPrincipal() : StringUtils.EMPTY) + .keyPath(kerberosAuthentication != null ? kerberosAuthentication.getKeyPath() : StringUtils.EMPTY) + .krb5Path(kerberosAuthentication != null ? KerberosUtils.getKrb5Path(kerberosAuthentication.getKeyPath(), kerberosAuthentication.getPrincipal()) : StringUtils.EMPTY) + .useJaas(jdbcConnection.getAuthentication().type() == AuthenticationType.KERBEROS && ((KerberosAuthentication) jdbcConnection.getAuthentication()).getUseJaas()) + .fetchSize(jdbcConnection.getFetchSize()).identity(connection.getIdentity()) + .sshType(jdbcConnection.getSsh().getSshType().toString()) + .sshIp(((BaseSsh) jdbcConnection.getSsh()).getIp()) + .usingSsh(jdbcConnection.getSsh().isUsingSsh()) + .sshUser(((BaseSsh) jdbcConnection.getSsh()).getUser()) + .sshPort(((BaseSsh) jdbcConnection.getSsh()).getPort()) + .redirectPort(jdbcConnection.getSsh().getRedirectPort()) + .redirectIp((jdbcConnection.getSsh()).getRedirectIp()) + .sshTimeOut(((BaseSsh) jdbcConnection.getSsh()).getTimeOut()) + .sshSecret(withPassword ? ((BaseSsh) jdbcConnection.getSsh()).getSecret() : DecisionServiceConstants.DEFAULT_PASSWORD) + .sshPrivateKeyPath(jdbcConnection.getSsh().getSshType() == SshType.KEY ? ((KeyVerifySsh) jdbcConnection.getSsh()).getPrivateKeyPath() : StringUtils.EMPTY) + .usingSsl((jdbcConnection.getSsl()).isUsingSsl()) + .sslType(jdbcConnection.getSsl().getSslType().toString()) + .sslClientCertificate(((BaseSsl) jdbcConnection.getSsl()).getClientCertificate()) + .sslClientPrivateKey(((BaseSsl) jdbcConnection.getSsl()).getClientPrivateKey()) + .caCertificate(((BaseSsl) jdbcConnection.getSsl()).getCaCertificate()) + .properties(jdbcConnection.getProperties()) + .verifyCa(jdbcConnection.getSsl().getSslType() == SslType.NORMAL && ((NormalSsl) jdbcConnection.getSsl()).isVerifyCa()); + } + } From 229e00c9a716a01304a0216ef520f75a376fc2aa Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 25 Jul 2024 14:23:22 +0800 Subject: [PATCH 09/14] =?UTF-8?q?REPORT-114392=20FR-FBP=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E9=80=82=E9=85=8D=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/data/datapane/ChoosePane.java | 6 +- .../datapane/connect/ConnectionListPane.java | 86 ++---------- .../connect/DatabaseConnectionPane.java | 22 +--- .../connect/LocalConnectionSource.java | 5 + .../preview/ConnectionInfoBeanHelper.java | 124 ++++++++++++++++++ .../datapane/preview/PreviewTablePane.java | 2 +- .../wrapper/MultiResultTableDataWrapper.java | 10 +- .../wrapper/StoreProcedureDataWrapper.java | 8 +- .../fr/design/gui/ilist/TableViewList.java | 3 +- 9 files changed, 162 insertions(+), 104 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/data/datapane/preview/ConnectionInfoBeanHelper.java diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java index 8ab88bbf99..47b1d4d247 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java @@ -14,6 +14,7 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.beans.BasicBeanPane; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.RefreshLabel.Refreshable; +import com.fr.design.data.datapane.preview.ConnectionInfoBeanHelper; import com.fr.design.data.datapane.preview.PreviewLabel; import com.fr.design.data.datapane.preview.PreviewLabel.Previewable; import com.fr.design.data.datapane.preview.PreviewTablePane; @@ -39,6 +40,7 @@ import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.server.connection.DBConnectAuth; +import com.fr.workspace.server.repository.connection.ConnectionRepository; import javax.swing.JList; import javax.swing.JOptionPane; @@ -442,8 +444,10 @@ public class ChoosePane extends BasicBeanPane implements Refresha return TableData.EMPTY_TABLEDATA; } try { - connect = DataOperator.getInstance().testConnection(database); + ConnectionRepository.getInstance().testConnection(ConnectionInfoBeanHelper.createConnectionInfoBean(database)); + connect = true; } catch (Exception ignored) { + connect= false; } if (!connect) { DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java index 72f948648a..974f8b0d7b 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java @@ -24,6 +24,7 @@ import com.fr.decision.webservice.v10.datasource.connection.processor.impl.Conne import com.fr.decision.webservice.v10.datasource.connection.processor.impl.JDBCConnectionProcessor; import com.fr.design.ExtraDesignClassManager; import com.fr.design.data.MapCompareUtils; +import com.fr.design.data.datapane.preview.ConnectionInfoBeanHelper; import com.fr.design.dialog.BasicDialog; import com.fr.design.fun.ConnectionProvider; import com.fr.design.gui.controlpane.JListControlPane; @@ -74,7 +75,6 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh private final HashMap renameMap = new HashMap<>(); private final Map populatedConnectionsSnapshot = new LinkedHashMap<>(); private static List supportedDatabaseTypes = new ArrayList<>(); - private static ObjectMapper objectMapper = new ObjectMapper(); public ConnectionListPane() { renameMap.clear(); @@ -245,11 +245,11 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh removedConnNames.add(s); break; case ADDED: - addConnections.add(createConnectionInfoBean(s, connection)); + addConnections.add(ConnectionInfoBeanHelper.createConnectionInfoBean(s, connection, true)); validConnection.add(connection); break; case UPDATED: - updateConnection.add(createConnectionInfoBean(s, connection)); + updateConnection.add(ConnectionInfoBeanHelper.createConnectionInfoBean(s, connection, true)); validConnection.add(connection); break; default: @@ -285,8 +285,8 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh return connection instanceof JDBCDatabaseConnection || connection instanceof JNDIDatabaseConnection; } }); - - this.validateDatabaseType(validConnection); + /// 先不管 + //this.validateDatabaseType(validConnection); this.alterConnections(addConnections, removedConnNames, updateConnection); } @@ -333,19 +333,6 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh return false; } - private ConnectionInfoBean createConnectionInfoBean(String name, Connection connection) throws Exception { - if (JDBCConnectionProcessor.KEY.acceptConnections().contains(connection.getClass())) { - ConnectionInfoBean bean = new ConnectionInfoBean(); - bean.setConnectionData(objectMapper.writeValueAsString(convertToJDBCConnectionBean(connection, true))); - bean.setConnectionType(JDBCConnectionProcessor.CONNECTION_TYPE); - bean.setConnectionType(JDBCConnectionProcessor.KEY.getConnectionType(connection)); - bean.setConnectionName(name); - bean.setCreator(connection.getCreator()); - return bean; - } else { - return ConnectionProcessorFactory.createConnectionInfoBean(name, connection); - } - } private void alterConnections(List addConnections, List removedConnNames, List updateConnection) { @@ -389,7 +376,11 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh } public static void showDialog(Window parent) { - Map connectionMap = ConnectionConfigProviderFactory.getConfigProvider().getConnections(); + List beans = ConnectionRepository.getInstance().getAll(); + Map connectionMap = new HashMap<>(); + for (ConnectionBean bean : beans) { + connectionMap.put(bean.getName(), bean.getConnection()); + } final ConnectionManagerPane connectionManagerPane = new ConnectionManagerPane() { @Override public void complete() { @@ -415,61 +406,4 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh } } - /** - * jdbc的特殊处理 - */ - private JDBCConnectionBean convertToJDBCConnectionBean(Connection connection, boolean withPassword) { - JDBCDatabaseConnection jdbcConnection = (JDBCDatabaseConnection) connection; - JDBCConnectionBean jdbcConnectionBean = new JDBCConnectionBean(); - DBCPConnectionPoolAttr poolAttr = new DBCPConnectionPoolAttr(); - try { - poolAttr = (DBCPConnectionPoolAttr) jdbcConnection.getDbcpAttr().clone(); - } catch (CloneNotSupportedException ignore) { - } - poolAttr.setValidationQuery(TransmissionTool.encrypt(poolAttr.getValidationQuery())); - KerberosAuthentication kerberosAuthentication = null; - if (jdbcConnection.getAuthentication().type() == AuthenticationType.KERBEROS) { - //获取数据连接信息的时候,做一下兼容处理(兼容旧的kerberos形式) - KerberosUtils.compatibilityProcess(((KerberosAuthentication) jdbcConnection.getAuthentication())); - kerberosAuthentication = ((KerberosAuthentication) jdbcConnection.getAuthentication()); - } - //因为设计器创建连接时database属性为空,所以这里直接取数据库保存的fetchSize值,默认值为-1 - return jdbcConnectionBean - .newCharsetName(jdbcConnection.getNewCharsetName()) - .originalCharsetName(jdbcConnection.getOriginalCharsetName()) - .database(jdbcConnection.getDatabase()) - .user(jdbcConnection.getUser()) - .driver(jdbcConnection.getDriver()) - // 关键中的关键,由设计器发出的请求如果要携带密码,不能传明文,必须必须必须传加密后的密码 - .password(withPassword ? TransmissionEncryptors.getInstance().encrypt(jdbcConnection.getPassword()) : DecisionServiceConstants.DEFAULT_PASSWORD) - .schema(jdbcConnection.getSchema()) - .url(jdbcConnection.getURL()) - .creator(jdbcConnection.getCreator()) - .source(jdbcConnection.getDriverSource()) - .connectionPoolAttr(poolAttr.create()) - .authType(kerberosAuthentication != null ? "kerberos" : StringUtils.EMPTY) - .principal(kerberosAuthentication != null ? kerberosAuthentication.getPrincipal() : StringUtils.EMPTY) - .keyPath(kerberosAuthentication != null ? kerberosAuthentication.getKeyPath() : StringUtils.EMPTY) - .krb5Path(kerberosAuthentication != null ? KerberosUtils.getKrb5Path(kerberosAuthentication.getKeyPath(), kerberosAuthentication.getPrincipal()) : StringUtils.EMPTY) - .useJaas(jdbcConnection.getAuthentication().type() == AuthenticationType.KERBEROS && ((KerberosAuthentication) jdbcConnection.getAuthentication()).getUseJaas()) - .fetchSize(jdbcConnection.getFetchSize()).identity(connection.getIdentity()) - .sshType(jdbcConnection.getSsh().getSshType().toString()) - .sshIp(((BaseSsh) jdbcConnection.getSsh()).getIp()) - .usingSsh(jdbcConnection.getSsh().isUsingSsh()) - .sshUser(((BaseSsh) jdbcConnection.getSsh()).getUser()) - .sshPort(((BaseSsh) jdbcConnection.getSsh()).getPort()) - .redirectPort(jdbcConnection.getSsh().getRedirectPort()) - .redirectIp((jdbcConnection.getSsh()).getRedirectIp()) - .sshTimeOut(((BaseSsh) jdbcConnection.getSsh()).getTimeOut()) - .sshSecret(withPassword ? ((BaseSsh) jdbcConnection.getSsh()).getSecret() : DecisionServiceConstants.DEFAULT_PASSWORD) - .sshPrivateKeyPath(jdbcConnection.getSsh().getSshType() == SshType.KEY ? ((KeyVerifySsh) jdbcConnection.getSsh()).getPrivateKeyPath() : StringUtils.EMPTY) - .usingSsl((jdbcConnection.getSsl()).isUsingSsl()) - .sslType(jdbcConnection.getSsl().getSslType().toString()) - .sslClientCertificate(((BaseSsl) jdbcConnection.getSsl()).getClientCertificate()) - .sslClientPrivateKey(((BaseSsl) jdbcConnection.getSsl()).getClientPrivateKey()) - .caCertificate(((BaseSsl) jdbcConnection.getSsl()).getCaCertificate()) - .properties(jdbcConnection.getProperties()) - .verifyCa(jdbcConnection.getSsl().getSslType() == SslType.NORMAL && ((NormalSsl) jdbcConnection.getSsl()).isVerifyCa()); - } - } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java index 0a00f37041..be7ea004a1 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java @@ -14,6 +14,7 @@ import com.fr.data.solution.entity.DriverPage; import com.fr.data.solution.processor.ClassNotFoundExceptionSolutionProcessor; import com.fr.data.solution.processor.SolutionProcessor; import com.fr.design.beans.BasicBeanPane; +import com.fr.design.data.datapane.preview.ConnectionInfoBeanHelper; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icontainer.UIScrollPane; @@ -29,6 +30,7 @@ import com.fr.stable.ArrayUtils; import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; +import com.fr.workspace.server.repository.connection.ConnectionRepository; import javax.swing.BorderFactory; import javax.swing.BoxLayout; @@ -429,25 +431,7 @@ public abstract class DatabaseConnectionPane 0) { try { - ConnectionRepository.getInstance().testConnection(new ConnectionBean(datasource)); + ConnectionRepository.getInstance().testConnection(ConnectionInfoBeanHelper.createConnectionInfoBean(databaseName, datasource)); status = true; break; } catch (Exception e) { From e17feb7436565577db77e99c28e8a72fd3672f64 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 25 Jul 2024 14:51:43 +0800 Subject: [PATCH 10/14] =?UTF-8?q?REPORT-114392=20FR-FBP=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E9=80=82=E9=85=8D=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/ConfigHelper.java | 5 +- .../boot/init/DesignPreLoadComponent.java | 2 + .../boot/pre/DesignPreStartComponent.java | 49 +++++++++++++++++-- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/ConfigHelper.java b/designer-base/src/main/java/com/fr/design/ConfigHelper.java index 31724d8652..c5fd1668d0 100644 --- a/designer-base/src/main/java/com/fr/design/ConfigHelper.java +++ b/designer-base/src/main/java/com/fr/design/ConfigHelper.java @@ -94,7 +94,10 @@ public class ConfigHelper { return properties; } - private static boolean createFile(File file) throws ResourceIOException { + /** + * 创建配置文件 + */ + public static boolean createFile(File file) throws ResourceIOException { String parent = file.getParent(); if (StringUtils.isNotEmpty(parent)) { createDirectory(parent); diff --git a/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java b/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java index 736aa35096..4fd91d49a4 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java @@ -45,6 +45,7 @@ import com.fr.locale.InterMutableKey; import com.fr.locale.LocaleMarker; import com.fr.locale.LocaleScope; import com.fr.locale.LocaleUtils; +import com.fr.locale.international.InternationalLocaleManager; import com.fr.log.FineLoggerFactory; import com.fr.measure.DBMeterFactory; import com.fr.record.DefaultDBMeter; @@ -146,6 +147,7 @@ public class DesignPreLoadComponent { } FrontProviderImpl.init(InterProviderImpl.getInstance()); + InternationalLocaleManager.getInstance().init(); } diff --git a/designer-realize/src/main/java/com/fanruan/boot/pre/DesignPreStartComponent.java b/designer-realize/src/main/java/com/fanruan/boot/pre/DesignPreStartComponent.java index 21bca14bd0..b3363f6d3d 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/pre/DesignPreStartComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/pre/DesignPreStartComponent.java @@ -1,5 +1,10 @@ package com.fanruan.boot.pre; +import com.fanruan.boot.FSProperties; +import com.fanruan.fs.FileServer; +import com.fanruan.fs.RepositoryFactory; +import com.fanruan.fs.repository.local.LocalFileRepository; +import com.fanruan.product.ProductConstants; import com.fr.design.ConfigHelper; import com.fanruan.boot.key.StartupArgsShell; import com.fanruan.carina.Carina; @@ -31,11 +36,17 @@ import com.fr.event.EventDispatcher; import com.fr.event.Listener; import com.fr.general.CommonIOUtils; import com.fr.general.GeneralUtils; +import com.fr.io.base.ResourcePaths; +import com.fr.io.repository.ResourceRepository; +import com.fr.io.repository.ResourceRepositoryWrapper; +import com.fr.io.utils.ResourceIOUtils; import com.fr.log.FineLoggerFactory; import com.fr.module.engine.event.LifecycleErrorEvent; import com.fr.runtime.FineRuntime; import com.fr.stable.CommonCodeUtils; import com.fr.stable.CommonUtils; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import com.fr.stable.lifecycle.FineLifecycleFatalError; import com.fr.stable.project.ProjectConstants; import com.fr.stable.resource.ResourceLoader; @@ -56,6 +67,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.ByteArrayInputStream; +import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.concurrent.CompletableFuture; @@ -72,6 +84,9 @@ public class DesignPreStartComponent { private static final String SEPARATOR = "/"; private static final String CPT = ".cpt"; private static final String XML = ".xml"; + private static final String PRE_FILE_ROOT = ProductConstants.getEnvHome() + File.separator + "prefile"; + private static final String PRE_FILE = PRE_FILE_ROOT + File.separator + "check"; + /** * 启动 @@ -84,10 +99,38 @@ public class DesignPreStartComponent { startTenant(); // 3.pluginPrepare,注册插件的反向依赖 startPluginPrepare(); - // 4.正式启动 - startPre(); - // 5.mq + // 4.mq startMq(); + // 5.基础fs + startBasicFs(); + // 6.正式启动 + startPre(); + } + + private void startBasicFs() throws Exception { + // 启动的时候无关环境信息的写缓存里 + checkFile(PRE_FILE); + LocalFileRepository.getSingleton().setWorkRoot(PRE_FILE_ROOT); + ResourceRepository realRepo = RepositoryFactory.getRepo(); + FSProperties fsProperties = Carina.properties(FSProperties.class); + FileServer.init( + new ResourceRepositoryWrapper(LocalFileRepository.getSingleton(), StringUtils.EMPTY), + new ResourceRepositoryWrapper(realRepo, StringUtils.EMPTY), + new ResourceRepositoryWrapper(realRepo, StringUtils.EMPTY), + new ResourceRepositoryWrapper(realRepo.generateTenantsSharedRepo(fsProperties.getTenantsSharedNamespace()), StringUtils.EMPTY)); + + ResourceIOUtils.setUnderlying(FileServer.local()); + ResourceIOUtils.setIsolationMode(false); + + ResourcePaths.register(ProjectConstants.ASSETS_NAME, true); + ResourcePaths.register(ProjectConstants.SCHEDULE_NAME, false); + } + + private void checkFile(String path) { + File file = new File(path); + if (!file.exists()) { + ConfigHelper.createFile(file); + } } private void startMq() throws Exception { From 3e7509ebc20bcaed421b607f73ca8639c9eac86b Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 25 Jul 2024 16:26:16 +0800 Subject: [PATCH 11/14] =?UTF-8?q?REPORT-114392=20FR-FBP=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E9=80=82=E9=85=8D=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E8=BF=9E=E6=8E=A5=E9=A2=84?= =?UTF-8?q?=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/preview/ConnectionInfoBeanHelper.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/ConnectionInfoBeanHelper.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/ConnectionInfoBeanHelper.java index 72912cb6a4..571becabf4 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/ConnectionInfoBeanHelper.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/ConnectionInfoBeanHelper.java @@ -5,6 +5,7 @@ import com.fr.data.auth.kerberos.KerberosAuthentication; import com.fr.data.auth.kerberos.KerberosUtils; import com.fr.data.impl.Connection; import com.fr.data.impl.JDBCDatabaseConnection; +import com.fr.data.impl.NameDatabaseConnection; import com.fr.data.pool.DBCPConnectionPoolAttr; import com.fr.data.security.ssh.BaseSsh; import com.fr.data.security.ssh.SshType; @@ -36,6 +37,10 @@ public class ConnectionInfoBeanHelper { * 创建数据连接Bean,可自定义是否携带密码 */ public static ConnectionInfoBean createConnectionInfoBean(String name, Connection connection, boolean withPassword) throws Exception { + if (connection instanceof NameDatabaseConnection) { + name = ((NameDatabaseConnection) connection).getName(); + connection = ((NameDatabaseConnection) connection).createDatabase(); + } if (JDBCConnectionProcessor.KEY.acceptConnections().contains(connection.getClass())) { ConnectionInfoBean bean = new ConnectionInfoBean(); bean.setConnectionData(objectMapper.writeValueAsString(convertToJDBCConnectionBean(connection, withPassword))); From 7868f27a79e13a6b83d9db0dd70090e298f96128 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 25 Jul 2024 16:33:05 +0800 Subject: [PATCH 12/14] =?UTF-8?q?REPORT-114392=20FR-FBP=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E8=AE=BE=E8=AE=A1=E9=80=82=E9=85=8D=20?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=A8=A1=E6=9D=BF=E4=B8=BB=E9=A2=98=E4=B8=AD?= =?UTF-8?q?=E7=9A=84frm=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../theme/TemplateThemeGridPagesPane.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPagesPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPagesPane.java index 36e962c6af..8c995874fd 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPagesPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPagesPane.java @@ -284,28 +284,24 @@ public class TemplateThemeGridPagesPane extends JPanel { tabbedPane = new UITabbedPane(); tabbedPane.setTabBorderColor(new Color(0xE0E0E1)); add(tabbedPane, BorderLayout.CENTER); - - TemplateThemeGridControlPane formThemesManagerPane = TemplateThemeGridControlPane.createFormThemesManagerPane(window); + /// 去除frm + //TemplateThemeGridControlPane formThemesManagerPane = TemplateThemeGridControlPane.createFormThemesManagerPane(window); TemplateThemeGridControlPane reportThemesManagerPane = TemplateThemeGridControlPane.createReportThemesManagerPane(window); - - tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Dialog_Form_Tab"), formThemesManagerPane); + /// 去除frm + //tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Dialog_Form_Tab"), formThemesManagerPane); tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Dialog_Report_Tab"), reportThemesManagerPane); tabbedPane.setSelectedIndex(0); JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); TemplateThemeConfig config = template.getUsingTemplateThemeConfig(); if (config == reportThemesManagerPane.getConfig()) { - tabbedPane.setSelectedIndex(1); + tabbedPane.setSelectedIndex(0); } } @Override public TemplateThemeConfig getConfig() { - if (tabbedPane.getSelectedIndex() == 0) { - return FormThemeConfig.getInstance(); - } else { - return ReportThemeConfig.getInstance(); - } + return ReportThemeConfig.getInstance(); } @Override From f2fef875a4d69155bda4066271c6f12c0431f5c6 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 26 Jul 2024 10:54:40 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8C=85=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fanruan/boot/init/DesignPreLoadComponent.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java b/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java index 4fd91d49a4..84eb86e652 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java @@ -147,7 +147,6 @@ public class DesignPreLoadComponent { } FrontProviderImpl.init(InterProviderImpl.getInstance()); - InternationalLocaleManager.getInstance().init(); } From 8adad7369aa123191d4d88b7fea17892e847e19a Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 26 Jul 2024 10:57:10 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E6=97=A0jira=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8C=85=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fanruan/boot/init/DesignPreLoadComponent.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java b/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java index 84eb86e652..575ed1cace 100644 --- a/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java +++ b/designer-realize/src/main/java/com/fanruan/boot/init/DesignPreLoadComponent.java @@ -15,7 +15,6 @@ import com.fr.base.OptimizeUtil; import com.fr.concurrent.FineExecutors; import com.fr.config.dao.DaoSelectorFactory; import com.fr.config.dao.PropertiesConstants; -import com.fr.decision.service.context.ServiceContext; import com.fr.decision.webservice.v10.encryption.EncryptionConstants; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; @@ -34,7 +33,6 @@ import com.fr.general.CloudCenter; import com.fr.general.FRLogger; import com.fr.general.FrontProviderImpl; import com.fr.general.GeneralContext; -import com.fr.general.I18nActivator; import com.fr.general.I18nResource; import com.fr.general.Inter; import com.fr.general.InterProviderImpl; @@ -45,7 +43,6 @@ import com.fr.locale.InterMutableKey; import com.fr.locale.LocaleMarker; import com.fr.locale.LocaleScope; import com.fr.locale.LocaleUtils; -import com.fr.locale.international.InternationalLocaleManager; import com.fr.log.FineLoggerFactory; import com.fr.measure.DBMeterFactory; import com.fr.record.DefaultDBMeter; @@ -73,10 +70,8 @@ import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; -import java.util.ArrayList; import java.util.Locale; import java.util.Set; -import java.util.Timer; import java.util.concurrent.TimeUnit; /**