Project

General

Profile

« Previous | Next » 

Revision 1e4ec948

Added by Andreas Kohlbecker almost 3 years ago

fix #9025 allow for creating a new schema in empty dbs via the remote login dialog

View differences:

eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/RemotingLoginDialog.java
784 784
                    monitor.subTask(String.format(Messages.RemotingLoginDialog_GENERATING_CONFIG_FILE, selectedCdmInstance.getName()));
785 785
                    managedServerConfigFile = CDMServerUtils.writeManagedServerConfig(config, mgdServerConfigFileName);
786 786
                    monitor.worked(1);
787
                    boolean forceSchemaCreate = CdmStore.getManagedServer() != null
788
                            && CdmStore.getManagedServer().getDataSourceName().equals(selectedCdmInstance.getName())
789
                            && CdmStore.getManagedServer().isForceSchemaCreate();
787 790
                    CdmStore.setManagedServer(new CDMServer(selectedCdmInstance.getName(), managedServerConfigFile));
791
                    CdmStore.getManagedServer().setForceSchemaCreate(forceSchemaCreate);
788 792
                    monitor.subTask(Messages.RemotingLoginDialog_STARTING_MGD_SERVER);
789 793
                    CdmStore.getManagedServer().start(false, RemotingLoginDialog.this);
790 794
                    int serverUnits = 0;
......
818 822
                            true);
819 823
                } catch (CDMEmbeddedServerException cse) {
820 824
                    MessagingUtils.errorDialog(Messages.RemotingLoginDialog_ERROR_STARTING_SERVER,
821
                            this,
822
                            cse.getMessage(),
823
                            TaxeditorStorePlugin.PLUGIN_ID,
824
                            cse,
825
                            true);
825
                                this,
826
                                cse.getMessage(),
827
                                TaxeditorStorePlugin.PLUGIN_ID,
828
                                cse,
829
                                true);
826 830
                } finally {
827 831
                    monitor.done();
828 832
                }
833
                // NOTE: Errors thrown during server startup are passed to the handleError() implementation
834
                // TODO: is the above catch clause for CDMEmbeddedServerException still valuable?
835

  
829 836
                return Status.OK_STATUS;
830 837
            }
831 838
        };
......
838 845
        job.schedule();
839 846
    }
840 847

  
848

  
849
    @Override
850
    public void handleError(final Throwable t) {
851

  
852
        if(CdmStore.getManagedServer().isFailed() && CdmStore.getManagedServer().isPotentiallyMissingSchema()) {
853
            CdmStore.getManagedServer().setForceSchemaCreate(true);
854
            // we are in a separate thread here, thus update the screen via
855
            Display.getDefault().asyncExec(new Runnable() {
856
                @Override
857
                public void run() {
858
                    btnConnect.setEnabled(true);
859
                    btnConnect.setText("Create Schema");
860
                    btnConnect.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
861
                }
862
             });
863
        } else {
864
            Display.getDefault().syncExec(new Runnable() {
865
                @Override
866
                public void run() {
867
                    serverJob.cancel();
868

  
869
                    String title = Messages.RemotingLoginDialog_SERVER_LAUNCH_ERROR;
870
                    String  message = t.getMessage();
871

  
872

  
873
                    MessagingUtils.errorDialog(title,
874
                            this,
875
                            message,
876
                            TaxeditorStorePlugin.PLUGIN_ID,
877
                            t,
878
                            true);
879
                }
880
            });
881
        }
882
    }
883

  
841 884
    private void stopManagedServer() {
842 885
        try {
843 886
            CdmStore.getManagedServer().stop();
......
930 973

  
931 974
    }
932 975

  
933

  
934 976
    public boolean isRememberMe() {
935 977
        return btnRememberMe.getSelection();
936 978
    }
......
1152 1194
        txtServerCDMVersion.setText(""); //$NON-NLS-1$
1153 1195
    }
1154 1196

  
1155
    /**
1156
     * {@inheritDoc}
1157
     */
1158
    @Override
1159
    public void handleError(final Throwable t) {
1160

  
1161
        Display.getDefault().syncExec(new Runnable() {
1162
            @Override
1163
            public void run() {
1164
                serverJob.cancel();
1165

  
1166
                String title = Messages.RemotingLoginDialog_SERVER_LAUNCH_ERROR;
1167
                String  message = t.getMessage();
1168

  
1169

  
1170
                MessagingUtils.errorDialog(title,
1171
                        this,
1172
                        message,
1173
                        TaxeditorStorePlugin.PLUGIN_ID,
1174
                        t,
1175
                        true);
1176
            }
1177
        });
1178
    }
1179

  
1180 1197

  
1181 1198
}
eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/CDMServer.java
61 61
    private File warFile;
62 62
    private Server server;
63 63

  
64
    private boolean potentiallyMissingSchema;
65
    private boolean forceSchemaCreate = false;
66

  
64 67

  
65 68
    public CDMServer(String dataSourceName, File dataSourcesFile) throws CDMEmbeddedServerException {
66 69
        if(StringUtil.isBlank(dataSourceName)) {
......
90 93
            throw new CDMEmbeddedServerException(ioe);
91 94
        }
92 95

  
96
        //TODO instead of strings, use the constants defined in eu.etaxonomy.cdm.opt.config.DataSourceConfigurer
93 97
        System.setProperty("spring.profiles.active", "remoting");
94 98
        System.setProperty("cdm.beanDefinitionFile", dataSourcesFile.getAbsolutePath());
95 99
        System.setProperty("cdm.datasource", dataSourceName);
......
177 181

  
178 182
        Thread serverThread = new Thread() {
179 183

  
184

  
180 185
            @Override
181 186
            public void run() {
182 187
                try {
188
                    if(isForceSchemaCreate()) {
189
                        System.setProperty("cdm.forceSchemaCreate", "true");
190
                        potentiallyMissingSchema = false; // reset flag
191
                        setForceSchemaCreate(false); // reset flag
192
                    }
183 193
                    server.start();
184 194
                    server.join();
185 195
                } catch (Throwable t) {
......
189 199
                        Thread.sleep(1000);
190 200
                    } catch (InterruptedException e) {
191 201
                    }
202
                    Throwable cause = t;
203
                    while(cause != null) {
204

  
205
                        // pure string comparison to avoid dependencies to hibernate or cdmlib-persistance in the taxeditor
206
                        if(cause.getClass().getSimpleName().equals("SchemaExtractionException") || cause.getClass().getSimpleName().equals("CdmDatabaseException") ) {
207
                            potentiallyMissingSchema = true;
208
                            logger.debug(cause.getClass().getName() + " detected which indicates missing or corrupt schema");
209
                            cause = null;
210
                        } else {
211
                            cause = cause.getCause();
212
                        }
213
                    }
192 214
                    cdmServerError.handleError(new RuntimeException("Error during CDM server startup", t));
215
                } finally {
216
                    //System.getProperties().remove("cdm.forceSchemaCreate");
193 217
                }
194 218
            }
195 219
        };
......
247 271
        }
248 272
    }
249 273

  
274
    public boolean isForceSchemaCreate() {
275
        return forceSchemaCreate;
276
    }
277

  
278
    public void setForceSchemaCreate(boolean forceSchemaCreate) {
279
        this.forceSchemaCreate = forceSchemaCreate;
280
    }
281

  
282
    public boolean isPotentiallyMissingSchema() {
283
        return potentiallyMissingSchema;
284
    }
285

  
250 286

  
251 287
}

Also available in: Unified diff