Revision 47606 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/JDBCServerExplorerBase.java
JDBCServerExplorerBase.java | ||
---|---|---|
23 | 23 |
*/ |
24 | 24 |
package org.gvsig.fmap.dal.store.jdbc2.spi; |
25 | 25 |
|
26 |
import org.gvsig.tools.resourcesstorage.CompoundResourcesStorage; |
|
27 | 26 |
import java.io.File; |
28 | 27 |
import java.util.ArrayList; |
29 | 28 |
import java.util.Arrays; |
... | ... | |
62 | 61 |
import org.gvsig.fmap.dal.exception.InitializeException; |
63 | 62 |
import org.gvsig.fmap.dal.exception.OpenException; |
64 | 63 |
import org.gvsig.fmap.dal.exception.RemoveException; |
64 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
|
65 | 65 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
66 | 66 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
67 | 67 |
import org.gvsig.fmap.dal.feature.Feature; |
68 | 68 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
69 | 69 |
import org.gvsig.fmap.dal.feature.FeatureType; |
70 | 70 |
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters; |
71 |
import org.gvsig.fmap.dal.feature.spi.CompoundResourcesStorageWithSupportTransactions; |
|
72 |
import org.gvsig.fmap.dal.feature.spi.LocalTransaction; |
|
71 | 73 |
import org.gvsig.fmap.dal.resource.spi.ResourceProvider; |
72 | 74 |
import org.gvsig.fmap.dal.serverexplorer.db.spi.AbstractDBServerExplorer; |
73 | 75 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters; |
... | ... | |
348 | 350 |
@Override |
349 | 351 |
public DataStore open(DataStoreParameters params) throws DataException { |
350 | 352 |
checkIsMine(params); |
351 |
DataStore store = super.open(params); |
|
352 |
return store; |
|
353 |
try { |
|
354 |
DataStore store = getManager().openStore(this.getTransaction(), params.getProviderName(), params); |
|
355 |
return store; |
|
356 |
} catch (ValidateDataParametersException e) { |
|
357 |
throw new InitializeException(e); |
|
358 |
} |
|
353 | 359 |
} |
354 | 360 |
|
355 | 361 |
@Override |
356 | 362 |
public DataStore open(String tableName) throws DataException { |
357 | 363 |
JDBCStoreParameters params = this.get(tableName); |
358 |
DataStore store = super.open(params); |
|
359 |
return store; |
|
364 |
try { |
|
365 |
DataStore store = getManager().openStore(this.getTransaction(), params.getProviderName(), params); |
|
366 |
return store; |
|
367 |
} catch (ValidateDataParametersException e) { |
|
368 |
throw new InitializeException(e); |
|
369 |
} |
|
360 | 370 |
} |
361 | 371 |
|
362 | 372 |
@Override |
... | ... | |
366 | 376 |
|
367 | 377 |
@Override |
368 | 378 |
public List list(int mode, int tablesOrViews) throws DataException { |
369 |
boolean informationTables = BooleanUtils.isTrue( |
|
370 |
this.getParameters().getShowInformationDBTables() |
|
371 |
); |
|
379 |
LocalTransaction trans = new LocalTransaction(null, this.getTransaction()); |
|
380 |
try { |
|
381 |
trans.begin(); |
|
382 |
trans.add(this); |
|
383 |
boolean informationTables = BooleanUtils.isTrue( |
|
384 |
this.getParameters().getShowInformationDBTables() |
|
385 |
); |
|
372 | 386 |
|
373 |
JDBCServerExplorerParameters serverParams = this.getParameters(); |
|
387 |
JDBCServerExplorerParameters serverParams = this.getParameters();
|
|
374 | 388 |
|
375 |
String key = buildKeyForCachedTables(mode, serverParams, informationTables, tablesOrViews); |
|
376 |
CachedTablesValue tablesValue = CACHED_TABLES.get(key); |
|
377 |
List<JDBCStoreParameters> tables = null; |
|
378 |
if (tablesValue != null) { |
|
389 |
String key = buildKeyForCachedTables(mode, serverParams, informationTables, tablesOrViews); |
|
390 |
CachedTablesValue tablesValue = CACHED_TABLES.get(key); |
|
391 |
List<JDBCStoreParameters> tables = null; |
|
392 |
if (tablesValue != null) { |
|
393 |
tables = tablesValue.get(this.helper); |
|
394 |
} |
|
395 |
if (tables != null) { |
|
396 |
return tables; |
|
397 |
} |
|
398 |
tablesValue = new CachedTablesValue(this.helper, mode, serverParams, informationTables, 60000, tablesOrViews); //60" |
|
399 |
CACHED_TABLES.put(key, tablesValue); |
|
379 | 400 |
tables = tablesValue.get(this.helper); |
380 |
} |
|
381 |
if (tables != null) { |
|
401 |
trans.commit(); |
|
382 | 402 |
return tables; |
403 |
} catch (Exception ex) { |
|
404 |
trans.abortQuietly(); |
|
405 |
throw ex; |
|
406 |
} finally { |
|
407 |
trans.closeQuietly(); |
|
383 | 408 |
} |
384 |
tablesValue = new CachedTablesValue(this.helper, mode, serverParams, informationTables, 60000, tablesOrViews); //60" |
|
385 |
CACHED_TABLES.put(key, tablesValue); |
|
386 |
tables = tablesValue.get(this.helper); |
|
387 |
return tables; |
|
388 | 409 |
} |
389 | 410 |
|
390 | 411 |
public String buildKeyForCachedTables(int mode, JDBCServerExplorerParameters params, boolean informationTables, int tablesOrViews) { |
... | ... | |
403 | 424 |
|
404 | 425 |
@Override |
405 | 426 |
public void remove(DataStoreParameters theParams) throws RemoveException { |
406 |
JDBCStoreParameters params = (JDBCStoreParameters) theParams; |
|
407 |
DropTableOperation removeTable = this.getOperations().createDropTable( |
|
408 |
this.getOperations().createTableReference(params) |
|
409 |
); |
|
410 |
if ((Boolean) removeTable.perform()) { |
|
411 |
this.dropCachedTables(); |
|
427 |
LocalTransaction trans = new LocalTransaction(null, this.getTransaction()); |
|
428 |
try { |
|
429 |
trans.begin(); |
|
430 |
trans.add(this); |
|
431 |
JDBCStoreParameters params = (JDBCStoreParameters) theParams; |
|
432 |
DropTableOperation removeTable = this.getOperations().createDropTable( |
|
433 |
this.getOperations().createTableReference(params) |
|
434 |
); |
|
435 |
if ((Boolean) removeTable.perform()) { |
|
436 |
this.dropCachedTables(); |
|
437 |
} |
|
438 |
trans.commit(); |
|
439 |
|
|
440 |
} catch (RemoveException ex) { |
|
441 |
trans.abortQuietly(); |
|
442 |
throw ex; |
|
443 |
} catch (Exception ex) { |
|
444 |
trans.abortQuietly(); |
|
445 |
throw new RemoveException("Can't remove "+Objects.toString(theParams), ex); |
|
446 |
} finally { |
|
447 |
trans.closeQuietly(); |
|
412 | 448 |
} |
449 |
|
|
413 | 450 |
} |
414 | 451 |
|
415 | 452 |
@Override |
... | ... | |
561 | 598 |
public boolean add(String providerName, NewDataStoreParameters theParams, boolean overwrite) |
562 | 599 |
throws DataException { |
563 | 600 |
|
564 |
List<Pair<String, Privilege>> userAndPrivileges = new ArrayList<>(); |
|
565 |
JDBCNewStoreParameters params = (JDBCNewStoreParameters) theParams; |
|
566 |
if (!StringUtils.isEmpty(params.getAllRole())) { |
|
567 |
userAndPrivileges.add( |
|
568 |
new ImmutablePair<>(params.getAllRole(), Privilege.ALL) |
|
601 |
LocalTransaction trans = new LocalTransaction(null, this.getTransaction()); |
|
602 |
try { |
|
603 |
trans.begin(); |
|
604 |
trans.add(this); |
|
605 |
List<Pair<String, Privilege>> userAndPrivileges = new ArrayList<>(); |
|
606 |
JDBCNewStoreParameters params = (JDBCNewStoreParameters) theParams; |
|
607 |
if (!StringUtils.isEmpty(params.getAllRole())) { |
|
608 |
userAndPrivileges.add( |
|
609 |
new ImmutablePair<>(params.getAllRole(), Privilege.ALL) |
|
610 |
); |
|
611 |
} |
|
612 |
if (!StringUtils.isEmpty(params.getDeleteRole())) { |
|
613 |
userAndPrivileges.add( |
|
614 |
new ImmutablePair<>(params.getDeleteRole(), Privilege.DELETE) |
|
615 |
); |
|
616 |
} |
|
617 |
if (!StringUtils.isEmpty(params.getInsertRole())) { |
|
618 |
userAndPrivileges.add( |
|
619 |
new ImmutablePair<>(params.getInsertRole(), Privilege.INSERT) |
|
620 |
); |
|
621 |
} |
|
622 |
if (!StringUtils.isEmpty(params.getReferenceRole())) { |
|
623 |
userAndPrivileges.add( |
|
624 |
new ImmutablePair<>(params.getReferenceRole(), Privilege.REFERENCE) |
|
625 |
); |
|
626 |
} |
|
627 |
if (!StringUtils.isEmpty(params.getSelectRole())) { |
|
628 |
userAndPrivileges.add( |
|
629 |
new ImmutablePair<>(params.getSelectRole(), Privilege.SELECT) |
|
630 |
); |
|
631 |
} |
|
632 |
if (!StringUtils.isEmpty(params.getTriggerRole())) { |
|
633 |
userAndPrivileges.add( |
|
634 |
new ImmutablePair<>(params.getTriggerRole(), Privilege.TRIGGER) |
|
635 |
); |
|
636 |
} |
|
637 |
if (!StringUtils.isEmpty(params.getTruncateRole())) { |
|
638 |
userAndPrivileges.add( |
|
639 |
new ImmutablePair<>(params.getTruncateRole(), Privilege.TRUNCATE) |
|
640 |
); |
|
641 |
} |
|
642 |
if (!StringUtils.isEmpty(params.getUpdateRole())) { |
|
643 |
userAndPrivileges.add( |
|
644 |
new ImmutablePair<>(params.getUpdateRole(), Privilege.UPDATE) |
|
645 |
); |
|
646 |
} |
|
647 |
List<String> additionalSQLs = new ArrayList<>(); |
|
648 |
if (!StringUtils.isEmpty(params.getPostCreatingStatement())) { |
|
649 |
additionalSQLs.add(params.getPostCreatingStatement()); |
|
650 |
} |
|
651 |
CreateTableOperation createTable = this.getOperations().createTable( |
|
652 |
this.getOperations().createTableReference(params), |
|
653 |
params.getDefaultFeatureType(), |
|
654 |
userAndPrivileges, |
|
655 |
additionalSQLs |
|
569 | 656 |
); |
570 |
} |
|
571 |
if (!StringUtils.isEmpty(params.getDeleteRole())) { |
|
572 |
userAndPrivileges.add( |
|
573 |
new ImmutablePair<>(params.getDeleteRole(), Privilege.DELETE) |
|
574 |
); |
|
575 |
} |
|
576 |
if (!StringUtils.isEmpty(params.getInsertRole())) { |
|
577 |
userAndPrivileges.add( |
|
578 |
new ImmutablePair<>(params.getInsertRole(), Privilege.INSERT) |
|
579 |
); |
|
580 |
} |
|
581 |
if (!StringUtils.isEmpty(params.getReferenceRole())) { |
|
582 |
userAndPrivileges.add( |
|
583 |
new ImmutablePair<>(params.getReferenceRole(), Privilege.REFERENCE) |
|
584 |
); |
|
585 |
} |
|
586 |
if (!StringUtils.isEmpty(params.getSelectRole())) { |
|
587 |
userAndPrivileges.add( |
|
588 |
new ImmutablePair<>(params.getSelectRole(), Privilege.SELECT) |
|
589 |
); |
|
590 |
} |
|
591 |
if (!StringUtils.isEmpty(params.getTriggerRole())) { |
|
592 |
userAndPrivileges.add( |
|
593 |
new ImmutablePair<>(params.getTriggerRole(), Privilege.TRIGGER) |
|
594 |
); |
|
595 |
} |
|
596 |
if (!StringUtils.isEmpty(params.getTruncateRole())) { |
|
597 |
userAndPrivileges.add( |
|
598 |
new ImmutablePair<>(params.getTruncateRole(), Privilege.TRUNCATE) |
|
599 |
); |
|
600 |
} |
|
601 |
if (!StringUtils.isEmpty(params.getUpdateRole())) { |
|
602 |
userAndPrivileges.add( |
|
603 |
new ImmutablePair<>(params.getUpdateRole(), Privilege.UPDATE) |
|
604 |
); |
|
605 |
} |
|
606 |
List<String> additionalSQLs = new ArrayList<>(); |
|
607 |
if (!StringUtils.isEmpty(params.getPostCreatingStatement())) { |
|
608 |
additionalSQLs.add(params.getPostCreatingStatement()); |
|
609 |
} |
|
610 |
CreateTableOperation createTable = this.getOperations().createTable( |
|
611 |
this.getOperations().createTableReference(params), |
|
612 |
params.getDefaultFeatureType(), |
|
613 |
userAndPrivileges, |
|
614 |
additionalSQLs |
|
615 |
); |
|
616 | 657 |
|
617 |
boolean isOk = (boolean) createTable.perform(); |
|
618 |
if (!isOk) { |
|
619 |
return false; |
|
620 |
} |
|
658 |
boolean isOk = (boolean) createTable.perform(); |
|
659 |
if (!isOk) { |
|
660 |
trans.commit(); |
|
661 |
return false; |
|
662 |
} |
|
621 | 663 |
|
622 |
// We collect the featureType of the operation because |
|
623 |
// the provider has been able to make changes to it |
|
624 |
params.setDefaultFeatureType(createTable.getType()); |
|
664 |
// We collect the featureType of the operation because
|
|
665 |
// the provider has been able to make changes to it
|
|
666 |
params.setDefaultFeatureType(createTable.getType());
|
|
625 | 667 |
|
626 |
if (theParams instanceof NewFeatureStoreParameters) { |
|
627 |
DataManager dataManager = DALLocator.getDataManager(); |
|
628 |
ResourcesStorage resources = this.getResourcesStorage(theParams); |
|
629 |
dataManager.writeDALResource(resources, ((NewFeatureStoreParameters) theParams).getDefaultFeatureType()); |
|
668 |
if (theParams instanceof NewFeatureStoreParameters) { |
|
669 |
DataManager dataManager = DALLocator.getDataManager(); |
|
670 |
ResourcesStorage resources = this.getResourcesStorage(theParams); |
|
671 |
dataManager.writeDALResource(resources, ((NewFeatureStoreParameters) theParams).getDefaultFeatureType()); |
|
672 |
} |
|
673 |
this.dropCachedTables(); |
|
674 |
trans.commit(); |
|
675 |
return true; |
|
676 |
} catch (Exception ex) { |
|
677 |
trans.abortQuietly(); |
|
678 |
throw ex; |
|
679 |
} finally { |
|
680 |
trans.closeQuietly(); |
|
630 | 681 |
} |
631 |
this.dropCachedTables(); |
|
632 |
return true; |
|
682 |
|
|
633 | 683 |
} |
634 | 684 |
|
635 | 685 |
@Override |
... | ... | |
671 | 721 |
|
672 | 722 |
@Override |
673 | 723 |
public Object execute(String sql) { |
674 |
ExecuteOperation execute = this.getOperations().createExecute(sql); |
|
675 |
return execute.perform(); |
|
724 |
LocalTransaction trans = new LocalTransaction(this.getManager(), getTransaction()); |
|
725 |
try { |
|
726 |
trans.begin(); |
|
727 |
trans.add(this); |
|
728 |
ExecuteOperation execute = this.getOperations().createExecute(sql); |
|
729 |
Object res = execute.perform(); |
|
730 |
trans.commit(); |
|
731 |
return res; |
|
732 |
} catch (RuntimeException ex) { |
|
733 |
trans.abortQuietly(); |
|
734 |
throw ex; |
|
735 |
} catch (Exception ex) { |
|
736 |
trans.abortQuietly(); |
|
737 |
throw new RuntimeException("Can't execute sql '"+sql+"'", ex); |
|
738 |
} finally { |
|
739 |
trans.closeQuietly(); |
|
740 |
} |
|
676 | 741 |
} |
677 | 742 |
|
678 | 743 |
@Override |
... | ... | |
763 | 828 |
} |
764 | 829 |
} |
765 | 830 |
} |
766 |
return new CompoundResourcesStorage(defaultResourcesStorage, customResourcesStorage); |
|
831 |
return new CompoundResourcesStorageWithSupportTransactions(defaultResourcesStorage, customResourcesStorage);
|
|
767 | 832 |
} catch (Throwable ex) { |
768 | 833 |
LOG.warn("Can't retrieve reources storage for table '" + storeName + "' in '" + this.getParameters().getUrl() + " (" + resourcesTablename + ").", ex); |
769 | 834 |
} |
... | ... | |
801 | 866 |
if (customResourcesStorage == null) { |
802 | 867 |
return defaultResourcesStorage; |
803 | 868 |
} |
804 |
return new CompoundResourcesStorage(defaultResourcesStorage, customResourcesStorage); |
|
869 |
return new CompoundResourcesStorageWithSupportTransactions(defaultResourcesStorage, customResourcesStorage);
|
|
805 | 870 |
} catch (DataException ex) { |
806 | 871 |
return null; |
807 | 872 |
} |
... | ... | |
993 | 1058 |
// } |
994 | 1059 |
private static String getConfigValue(JDBCStoreParameters params, String name) { |
995 | 1060 |
JDBCServerExplorerBase explorer = null; |
1061 |
DataManager dataManager = DALLocator.getDataManager(); |
|
1062 |
LocalTransaction trans = new LocalTransaction(dataManager, null); |
|
996 | 1063 |
try { |
997 |
DataManager dataManager = DALLocator.getDataManager();
|
|
1064 |
trans.begin();
|
|
998 | 1065 |
params.setTable(TABLE_CONFIGURATION_NAME); |
999 | 1066 |
JDBCServerExplorerParameters explorerParams = (JDBCServerExplorerParameters) dataManager.createServerExplorerParameters(params.getProviderName()); |
1000 | 1067 |
ToolsLocator.getDynObjectManager().copy(params, explorerParams); |
1001 | 1068 |
|
1002 | 1069 |
explorer = (JDBCServerExplorerBase) dataManager.openServerExplorer(explorerParams.getProviderName(), explorerParams); |
1003 |
|
|
1070 |
trans.add(explorer); |
|
1004 | 1071 |
ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder(); |
1005 | 1072 |
String filter = builder.eq( |
1006 | 1073 |
builder.column(FIELD_CONFIGURATION_NAME), |
... | ... | |
1014 | 1081 |
FIELD_CONFIGURATION_VALUE |
1015 | 1082 |
); |
1016 | 1083 |
Object value = op.perform(); |
1084 |
trans.commit(); |
|
1017 | 1085 |
return Objects.toString(value, null); |
1018 | 1086 |
} catch (Exception ex) { |
1019 | 1087 |
LOG.debug("Can't read configuration value '" + name + "'", ex); |
1088 |
trans.abortQuietly(); |
|
1020 | 1089 |
return null; |
1021 | 1090 |
} finally { |
1091 |
trans.closeQuietly(); |
|
1022 | 1092 |
DisposeUtils.disposeQuietly(explorer); |
1023 | 1093 |
} |
1024 | 1094 |
} |
... | ... | |
1071 | 1141 |
p.setTable(tableName); |
1072 | 1142 |
return p; |
1073 | 1143 |
} |
1144 |
|
|
1145 |
|
|
1074 | 1146 |
} |
Also available in: Unified diff