Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/28/10 14:52:56 (13 years ago)
Author:
cneumuel
Message:
  • moved db-context into datalayer
  • businesslayer only defines the transaction-scope
  • removed contextfactory
  • implemented convert-methods
  • made naming in db and domainobjects more consistent
  • changed wcf-service to be http-only (for now)

(#1233)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDao.cs

    r4629 r4649  
    88  using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
    99  using HeuristicLab.Services.Hive.Common.DataTransfer;
     10  using HeuristicLab.Services.Hive.DataAccess.Properties;
    1011
    1112  public class HiveDao : IHiveDao {
    12     private IContextFactory<HiveDataContext> contextFactory;
    13     private DataAccess.HiveDataContext db { get { return contextFactory.CurrentContext; } }
    14 
    15     public HiveDao(IContextFactory<HiveDataContext> contextFactory) {
    16       this.contextFactory = contextFactory;
     13    public HiveDataContext CreateContext() {
     14      return new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
     15    }
     16
     17    public HiveDao() {
    1718    }
    1819
    1920    #region Job Methods
    2021    public DT.Job GetJob(Guid id) {
    21       return Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id));
     22      using (var db = CreateContext()) {
     23        return Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id));
     24      }
    2225    }
    2326
    2427    public IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate) {
    25       return db.Jobs.Where(predicate).Select(x => Convert.ToDto(x));
     28      using (var db = CreateContext()) {
     29        return db.Jobs.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
     30      }
    2631    }
    2732
    2833    public Guid AddJob(DT.Job dto) {
    29       var entity = Convert.ToEntity(dto);
    30       db.Jobs.InsertOnSubmit(entity);
    31       db.SubmitChanges();
    32       return entity.JobId;
     34      using (var db = CreateContext()) {
     35        var entity = Convert.ToEntity(dto);
     36        db.Jobs.InsertOnSubmit(entity);
     37        db.SubmitChanges();
     38        return entity.JobId;
     39      }
    3340    }
    3441
    3542    public void UpdateJob(DT.Job dto) {
    36       var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id);
    37       if (entity == null) db.Jobs.InsertOnSubmit(Convert.ToEntity(dto));
    38       else Convert.ToEntity(dto, entity);
    39       db.SubmitChanges();
     43      using (var db = CreateContext()) {
     44        var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id);
     45        if (entity == null) db.Jobs.InsertOnSubmit(Convert.ToEntity(dto));
     46        else Convert.ToEntity(dto, entity);
     47        db.SubmitChanges();
     48      }
    4049    }
    4150
    4251    public void DeleteJob(Guid id) {
    43       var entity = db.Jobs.FirstOrDefault(x => x.JobId == id);
    44       if (entity != null) db.Jobs.DeleteOnSubmit(entity);
    45       db.SubmitChanges();
     52      using (var db = CreateContext()) {
     53        var entity = db.Jobs.FirstOrDefault(x => x.JobId == id);
     54        if (entity != null) db.Jobs.DeleteOnSubmit(entity);
     55        db.SubmitChanges();
     56      }
    4657    }
    4758
    4859    public IEnumerable<DT.Job> GetAvailableParentJobs(Guid slaveId) {
    49       // todo: slaveId is unused!
    50       var query = from ar in db.AssignedResources
    51                   where ar.Job.JobState == JobState.WaitForChildJobs &&
    52                     (from child in db.Jobs
    53                      where child.ParentJobId == ar.Job.JobId
    54                      select child.JobState == JobState.Finished).All(x => x) &&
    55                     (from child in db.Jobs // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet)
    56                      where child.ParentJobId == ar.Job.JobId
    57                      select child).Count() > 0
    58                   orderby ar.Job.Priority descending
    59                   select Convert.ToDto(ar.Job);
    60       return query;
     60      using (var db = CreateContext()) {
     61        // todo: slaveId is unused!
     62        var query = from ar in db.AssignedResources
     63                    where ar.Job.JobState == JobState.WaitingForChildJobs &&
     64                      (from child in db.Jobs
     65                       where child.ParentJobId == ar.Job.JobId
     66                       select child.JobState == JobState.Finished).All(x => x) &&
     67                      (from child in db.Jobs // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet)
     68                       where child.ParentJobId == ar.Job.JobId
     69                       select child).Count() > 0
     70                    orderby ar.Job.Priority descending
     71                    select Convert.ToDto(ar.Job);
     72        return query;
     73      }
    6174    }
    6275
    6376    public IEnumerable<DT.Job> GetAvailableJobs(DT.Slave slave) {
    64       var query = from j in db.Jobs
    65                   where j.JobState == JobState.Waiting && j.CoresNeeded <= slave.FreeCores && j.MemoryNeeded <= slave.FreeMemory
    66                   orderby j.Priority descending
    67                   select Convert.ToDto(j);
    68       return query.Union(GetAvailableParentJobs(slave.Id)).OrderByDescending(x => x.Priority).ToArray();
     77      using (var db = CreateContext()) {
     78        var query = from j in db.Jobs
     79                    where j.JobState == JobState.Waiting && j.CoresNeeded <= slave.FreeCores && j.MemoryNeeded <= slave.FreeMemory
     80                    orderby j.Priority descending
     81                    select Convert.ToDto(j);
     82        return query.Union(GetAvailableParentJobs(slave.Id)).OrderByDescending(x => x.Priority).ToArray();
     83      }
    6984    }
    7085    #endregion
     
    7388
    7489    public DT.JobData GetJobData(Guid id) {
    75       return Convert.ToDto(db.JobDatas.SingleOrDefault(x => x.JobId == id));
     90      using (var db = CreateContext()) {
     91        return Convert.ToDto(db.JobDatas.SingleOrDefault(x => x.JobId == id));
     92      }
    7693    }
    7794
    7895    public IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate) {
    79       return db.JobDatas.Where(predicate).Select(x => Convert.ToDto(x));
     96      using (var db = CreateContext()) {
     97        return db.JobDatas.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
     98      }
    8099    }
    81100
    82101    public Guid AddJobData(DT.JobData dto) {
    83       var entity = Convert.ToEntity(dto);
    84       db.JobDatas.InsertOnSubmit(entity);
    85       db.SubmitChanges();
    86       return entity.JobId;
     102      using (var db = CreateContext()) {
     103        var entity = Convert.ToEntity(dto);
     104        db.JobDatas.InsertOnSubmit(entity);
     105        db.SubmitChanges();
     106        return entity.JobId;
     107      }
    87108    }
    88109
    89110    public void UpdateJobData(DT.JobData dto) {
    90       var entity = db.JobDatas.FirstOrDefault(x => x.JobId == dto.Id);
    91       if (entity == null) db.JobDatas.InsertOnSubmit(Convert.ToEntity(dto));
    92       else Convert.ToEntity(dto, entity);
    93       db.SubmitChanges();
     111      using (var db = CreateContext()) {
     112        var entity = db.JobDatas.FirstOrDefault(x => x.JobId == dto.JobId);
     113        if (entity == null) db.JobDatas.InsertOnSubmit(Convert.ToEntity(dto));
     114        else Convert.ToEntity(dto, entity);
     115        db.SubmitChanges();
     116      }
    94117    }
    95118
    96119    public void DeleteJobData(Guid id) {
    97       var entity = db.JobDatas.FirstOrDefault(x => x.JobId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it
    98       if (entity != null) db.JobDatas.DeleteOnSubmit(entity);
    99       db.SubmitChanges();
     120      using (var db = CreateContext()) {
     121        var entity = db.JobDatas.FirstOrDefault(x => x.JobId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it
     122        if (entity != null) db.JobDatas.DeleteOnSubmit(entity);
     123        db.SubmitChanges();
     124      }
    100125    }
    101126    #endregion
     
    103128    #region HiveExperiment Methods
    104129    public DT.HiveExperiment GetHiveExperiment(Guid id) {
    105       return Convert.ToDto(db.HiveExperiments.SingleOrDefault(x => x.HiveExperimentId == id));
     130      using (var db = CreateContext()) {
     131        return Convert.ToDto(db.HiveExperiments.SingleOrDefault(x => x.HiveExperimentId == id));
     132      }
    106133    }
    107134
    108135    public IEnumerable<DT.HiveExperiment> GetHiveExperiments(Expression<Func<HiveExperiment, bool>> predicate) {
    109       return db.HiveExperiments.Where(predicate).Select(x => Convert.ToDto(x));
     136      using (var db = CreateContext()) {
     137        return db.HiveExperiments.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
     138      }
    110139    }
    111140
    112141    public Guid AddHiveExperiment(DT.HiveExperiment dto) {
    113       var entity = Convert.ToEntity(dto);
    114       db.HiveExperiments.InsertOnSubmit(entity);
    115       db.SubmitChanges();
    116       return entity.HiveExperimentId;
     142      using (var db = CreateContext()) {
     143        var entity = Convert.ToEntity(dto);
     144        db.HiveExperiments.InsertOnSubmit(entity);
     145        db.SubmitChanges();
     146        return entity.HiveExperimentId;
     147      }
    117148    }
    118149
    119150    public void UpdateHiveExperiment(DT.HiveExperiment dto) {
    120       var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == dto.Id);
    121       if (entity == null) db.HiveExperiments.InsertOnSubmit(Convert.ToEntity(dto));
    122       else Convert.ToEntity(dto, entity);
    123       db.SubmitChanges();
     151      using (var db = CreateContext()) {
     152        var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == dto.Id);
     153        if (entity == null) db.HiveExperiments.InsertOnSubmit(Convert.ToEntity(dto));
     154        else Convert.ToEntity(dto, entity);
     155        db.SubmitChanges();
     156      }
    124157    }
    125158
    126159    public void DeleteHiveExperiment(Guid id) {
    127       var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == id);
    128       if (entity != null) db.HiveExperiments.DeleteOnSubmit(entity);
    129       db.SubmitChanges();
    130     }
    131     #endregion
    132 
     160      using (var db = CreateContext()) {
     161        var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == id);
     162        if (entity != null) db.HiveExperiments.DeleteOnSubmit(entity);
     163        db.SubmitChanges();
     164      }
     165    }
     166    #endregion
    133167
    134168    #region Slave Methods
    135169    public DT.Slave GetSlave(Guid id) {
    136       return Convert.ToDto(db.Resources.OfType<Slave>().SingleOrDefault(x => x.ResourceId == id));
     170      using (var db = CreateContext()) {
     171        return Convert.ToDto(db.Resources.OfType<Slave>().SingleOrDefault(x => x.ResourceId == id));
     172      }
    137173    }
    138174
    139175    public IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate) {
    140       return db.Resources.OfType<Slave>().Where(predicate).Select(x => Convert.ToDto(x));
     176      using (var db = CreateContext()) {
     177        return db.Resources.OfType<Slave>().Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
     178      }
    141179    }
    142180
    143181    public Guid AddSlave(DT.Slave dto) {
    144       var entity = Convert.ToEntity(dto);
    145       db.Resources.InsertOnSubmit(entity);
    146       db.SubmitChanges();
    147       return entity.ResourceId;
     182      using (var db = CreateContext()) {
     183        var entity = Convert.ToEntity(dto);
     184        db.Resources.InsertOnSubmit(entity);
     185        db.SubmitChanges();
     186        return entity.ResourceId;
     187      }
    148188    }
    149189
    150190    public void UpdateSlave(DT.Slave dto) {
    151       var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == dto.Id);
    152       if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
    153       else Convert.ToEntity(dto, entity);
    154       db.SubmitChanges();
     191      using (var db = CreateContext()) {
     192        var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == dto.Id);
     193        if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
     194        else Convert.ToEntity(dto, entity);
     195        db.SubmitChanges();
     196      }
    155197    }
    156198
    157199    public void DeleteSlave(Guid id) {
    158       var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == id);
    159       if (entity != null) db.Resources.DeleteOnSubmit(entity);
    160       db.SubmitChanges();
     200      using (var db = CreateContext()) {
     201        var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == id);
     202        if (entity != null) db.Resources.DeleteOnSubmit(entity);
     203        db.SubmitChanges();
     204      }
    161205    }
    162206    #endregion
     
    164208    #region SlaveGroup Methods
    165209    public DT.SlaveGroup GetSlaveGroup(Guid id) {
    166       return Convert.ToDto(db.Resources.OfType<SlaveGroup>().SingleOrDefault(x => x.ResourceId == id));
     210      using (var db = CreateContext()) {
     211        return Convert.ToDto(db.Resources.OfType<SlaveGroup>().SingleOrDefault(x => x.ResourceId == id));
     212      }
    167213    }
    168214
    169215    public IEnumerable<DT.SlaveGroup> GetSlaveGroups(Expression<Func<SlaveGroup, bool>> predicate) {
    170       return db.Resources.OfType<SlaveGroup>().Where(predicate).Select(x => Convert.ToDto(x));
     216      using (var db = CreateContext()) {
     217        return db.Resources.OfType<SlaveGroup>().Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
     218      }
    171219    }
    172220
    173221    public Guid AddSlaveGroup(DT.SlaveGroup dto) {
    174       var entity = Convert.ToEntity(dto);
    175       db.Resources.InsertOnSubmit(entity);
    176       db.SubmitChanges();
    177       return entity.ResourceId;
     222      using (var db = CreateContext()) {
     223        var entity = Convert.ToEntity(dto);
     224        db.Resources.InsertOnSubmit(entity);
     225        db.SubmitChanges();
     226        return entity.ResourceId;
     227      }
    178228    }
    179229
    180230    public void UpdateSlaveGroup(DT.SlaveGroup dto) {
    181       var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == dto.Id);
    182       if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
    183       else Convert.ToEntity(dto, entity);
    184       db.SubmitChanges();
     231      using (var db = CreateContext()) {
     232        var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == dto.Id);
     233        if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
     234        else Convert.ToEntity(dto, entity);
     235        db.SubmitChanges();
     236      }
    185237    }
    186238
    187239    public void DeleteSlaveGroup(Guid id) {
    188       var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == id);
    189       if (entity != null) db.Resources.DeleteOnSubmit(entity);
    190       db.SubmitChanges();
     240      using (var db = CreateContext()) {
     241        var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == id);
     242        if (entity != null) db.Resources.DeleteOnSubmit(entity);
     243        db.SubmitChanges();
     244      }
    191245    }
    192246    #endregion
     
    194248    #region Resource Methods
    195249    public DT.Resource GetResource(Guid id) {
    196       return Convert.ToDto(db.Resources.SingleOrDefault(x => x.ResourceId == id));
     250      using (var db = CreateContext()) {
     251        return Convert.ToDto(db.Resources.SingleOrDefault(x => x.ResourceId == id));
     252      }
    197253    }
    198254
    199255    public IEnumerable<DT.Resource> GetResources(Expression<Func<Resource, bool>> predicate) {
    200       return db.Resources.Where(predicate).Select(x => Convert.ToDto(x));
     256      using (var db = CreateContext()) {
     257        return db.Resources.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
     258      }
    201259    }
    202260
    203261    public Guid AddResource(DT.Resource dto) {
    204       var entity = Convert.ToEntity(dto);
    205       db.Resources.InsertOnSubmit(entity);
    206       db.SubmitChanges();
    207       return entity.ResourceId;
     262      using (var db = CreateContext()) {
     263        var entity = Convert.ToEntity(dto);
     264        db.Resources.InsertOnSubmit(entity);
     265        db.SubmitChanges();
     266        return entity.ResourceId;
     267      }
    208268    }
    209269
    210270    public void UpdateResource(DT.Resource dto) {
    211       var entity = db.Resources.FirstOrDefault(x => x.ResourceId == dto.Id);
    212       if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
    213       else Convert.ToEntity(dto, entity);
    214       db.SubmitChanges();
     271      using (var db = CreateContext()) {
     272        var entity = db.Resources.FirstOrDefault(x => x.ResourceId == dto.Id);
     273        if (entity == null) db.Resources.InsertOnSubmit(Convert.ToEntity(dto));
     274        else Convert.ToEntity(dto, entity);
     275        db.SubmitChanges();
     276      }
    215277    }
    216278
    217279    public void DeleteResource(Guid id) {
    218       var entity = db.Resources.FirstOrDefault(x => x.ResourceId == id);
    219       if (entity != null) db.Resources.DeleteOnSubmit(entity);
    220       db.SubmitChanges();
     280      using (var db = CreateContext()) {
     281        var entity = db.Resources.FirstOrDefault(x => x.ResourceId == id);
     282        if (entity != null) db.Resources.DeleteOnSubmit(entity);
     283        db.SubmitChanges();
     284      }
    221285    }
    222286    #endregion
     
    224288    #region Authorization Methods
    225289    public bool IsUserAuthorizedForJobs(Guid userId, params Guid[] jobIds) {
    226       var userIds = from job in db.Jobs // this needs to be fast!
    227                     where jobIds.Contains(job.JobId)
    228                     select job.UserId;
    229       return userIds.All(x => x == userId);
    230     }
    231     #endregion
    232 
    233 
     290      using (var db = CreateContext()) {
     291        var userIds = from job in db.Jobs // this needs to be fast!
     292                      where jobIds.Contains(job.JobId)
     293                      select job.UserId;
     294        return userIds.All(x => x == userId);
     295      }
     296    }
     297    #endregion
    234298  }
    235299}
Note: See TracChangeset for help on using the changeset viewer.