Revision 1e4ec948
Added by Andreas Kohlbecker almost 3 years ago
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
fix #9025 allow for creating a new schema in empty dbs via the remote login dialog