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

View differences:

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