001 /**
002 *
003 */
004 package de.jw.cloud42.webapp;
005
006
007 import java.util.List;
008
009 import java.util.logging.Logger;
010
011
012
013 import org.apache.axis2.addressing.EndpointReference;
014 import org.apache.axis2.addressing.EndpointReferenceHelper;
015 import org.hibernate.Query;
016 import org.hibernate.Session;
017 import org.jboss.seam.ScopeType;
018 import org.jboss.seam.annotations.In;
019 import org.jboss.seam.annotations.Name;
020 import org.jboss.seam.annotations.Scope;
021 import org.jboss.seam.annotations.Synchronized;
022 import org.jboss.seam.faces.FacesMessages;
023
024
025 import de.jw.cloud42.core.eventing.storage.DefaultSubscriberStore;
026 import de.jw.cloud42.core.eventing.subscription.SOAPSubscription;
027 import de.jw.cloud42.core.eventing.subscriptionProcessor.GenericSubscriptionProcessor;
028
029 /**
030 * Seam component for handling subscriptions.
031 * Caution: handles only <code>SOAPSubscriptions</code>,
032 * no generic subscriptions like the Web Service application.
033 *
034 * @author fbitzer
035 *
036 */
037 @Name("subscriptionManager")
038 @Scope(ScopeType.SESSION)
039 @Synchronized(timeout=1000000000)
040 public class SubscriptionManager {
041
042
043 /**
044 * Inject faces messages to trigger error and success messages.
045 */
046 @In
047 FacesMessages facesMessages;
048
049 /**
050 * injected Hibernate session
051 */
052 @In
053 Session session;
054
055 /**
056 * The list of subscriptions.
057 */
058 private List<SOAPSubscription> subscriptionList = null;
059
060
061
062 /**
063 * @return the subscriptionList
064 */
065 public List<SOAPSubscription> getSubscriptionList() {
066
067 //load form DB if list not in cache
068 if (this.subscriptionList == null){
069
070 session.beginTransaction();
071 //Note: only real SOAPSubscriptions are loaded!
072 Query q = session.createQuery("SELECT s FROM SOAPSubscription s");
073 session.getTransaction().commit();
074
075 subscriptionList = q.list();
076
077
078 }
079
080
081 return subscriptionList;
082
083 }
084
085
086
087 /**
088 * Reset subscriptionList and force reload next time it is accessed.
089 */
090 public void resetSubscriptionList(){
091
092 this.subscriptionList = null;
093 }
094
095
096 /**
097 * Creates a new SOAPSubscription and stores it in database.
098 *
099 * @param topic
100 * @param endpointAddress
101 */
102 public void subscribe(String topic, String endpointAddress){
103
104
105 SOAPSubscription s = new SOAPSubscription();
106
107 s.setTopic(topic);
108
109 try {
110 s.setId(GenericSubscriptionProcessor.generateId());
111
112 EndpointReference epr = new EndpointReference(endpointAddress);
113
114 s.setToEndpoint(epr);
115
116 } catch (Exception ex){
117 Logger.getAnonymousLogger().severe("Error creating a subsription: " + ex.getMessage());
118 }
119
120
121 DefaultSubscriberStore store = new DefaultSubscriberStore();
122
123 store.store(s);
124
125 this.resetSubscriptionList();
126
127
128 }
129 /**
130 * Remove a subscription identified by its id.
131 *
132 * @param subscriptionId
133 */
134 public void unsubscribe(String subscriptionId){
135 DefaultSubscriberStore store = new DefaultSubscriberStore();
136
137 store.delete(subscriptionId);
138
139 this.resetSubscriptionList();
140
141 }
142
143
144 }