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) {