IEnumerable <Address> ISubscriptionStorage.GetSubscriberAddressesForMessage(IEnumerable <MessageType> messageTypes)
 {
     using (new TransactionScope(TransactionScopeOption.Suppress))
         using (var session = subscriptionStorageSessionProvider.OpenStatelessSession())
             return(session.QueryOver <Subscription>()
                    .Where(s => s.TypeName.IsIn(messageTypes.Select(mt => mt.TypeName).ToList()))
                    .List()
                    .Where(s => messageTypes.Contains(new MessageType(s.TypeName, s.Version)))
                    .Select(s => Address.Parse(s.SubscriberEndpoint))
                    .Distinct());
 }
 /// <summary>
 /// Lists all subscribers for the specified message types
 /// </summary>
 /// <param name="messageTypes"></param>
 /// <returns></returns>
 IEnumerable <string> ISubscriptionStorage.GetSubscribersForMessage(IEnumerable <string> messageTypes)
 {
     using (new TransactionScope(TransactionScopeOption.Suppress))
         using (var session = subscriptionStorageSessionProvider.OpenStatelessSession())
             return(session.CreateCriteria(typeof(Subscription))
                    .Add(Restrictions.In("MessageType", messageTypes.ToArray()))
                    .SetProjection(Projections.Property("SubscriberEndpoint"))
                    .SetResultTransformer(new DistinctRootEntityResultTransformer())
                    .List <string>());
 }
Example #3
0
        IEnumerable <Address> ISubscriptionStorage.GetSubscriberAddressesForMessage(IEnumerable <MessageType> messageTypes)
        {
            using (var transaction = new TransactionScope(TransactionScopeOption.Suppress))
                using (var session = subscriptionStorageSessionProvider.OpenStatelessSession())
                    using (var tx = session.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
                    {
                        var results = session.QueryOver <Subscription>()
                                      .Where(s => s.TypeName.IsIn(messageTypes.Select(mt => mt.TypeName).ToList()))
                                      .List()
                                      .Where(s => messageTypes.Contains(new MessageType(s.TypeName, s.Version)))
                                      .Select(s => Address.Parse(s.SubscriberEndpoint))
                                      .Distinct()
                                      .ToList();

                        tx.Commit();
                        transaction.Complete();

                        return(results);
                    }
        }