You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/09/21 10:34:50 UTC

[1/2] openmeetings git commit: [OPENMEETINGS-1707] smslib is removed, notifiers are unified

Repository: openmeetings
Updated Branches:
  refs/heads/master cb0294886 -> 28cac665b


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
index 380932e..b573a93 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
@@ -26,15 +26,13 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Date;
 import java.util.List;
 import java.util.TimeZone;
 
+import org.apache.openmeetings.core.notifier.NotifierService;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
-import org.apache.openmeetings.db.dao.label.LabelDao;
-import org.apache.openmeetings.db.dao.room.IInvitationManager;
 import org.apache.openmeetings.db.dao.room.InvitationDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -42,17 +40,16 @@ import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.room.Invitation;
-import org.apache.openmeetings.db.entity.room.Invitation.MessageType;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.TimezoneUtil;
-import org.apache.openmeetings.service.mail.template.subject.AbstractSubjectEmailTemplate;
-import org.apache.openmeetings.service.mail.template.subject.AppointmentReminderTemplate;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Component
 public class AppointmentLogic {
 	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentLogic.class, webAppRootKey);
 
@@ -63,8 +60,6 @@ public class AppointmentLogic {
 	@Autowired
 	private RoomDao roomDao;
 	@Autowired
-	private IInvitationManager invitationManager;
-	@Autowired
 	private TimezoneUtil timezoneUtil;
 	@Autowired
 	private InvitationDao invitationDao;
@@ -72,6 +67,8 @@ public class AppointmentLogic {
 	private UserDao userDao;
 	@Autowired
 	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private NotifierService notifierService;
 
 	// --------------------------------------------------------------------------------------------
 
@@ -85,26 +82,8 @@ public class AppointmentLogic {
 	}
 
 	private void sendReminder(User u, Appointment a, Invitation inv) throws Exception {
-		if (inv == null) {
-			log.error(String.format("Error retrieving Invitation for member %s in Appointment %s"
-					, u.getAddress().getEmail(), a.getTitle()));
-			return;
-		}
-
-		TimeZone tz = timezoneUtil.getTimeZone(u.getTimeZoneId());
-
-		long langId = u.getLanguageId();
-		// Get the required labels one time for all meeting members. The
-		// Language of the email will be the system default language
-
-		String smsSubject = generateSMSSubject(LabelDao.getString("1158", langId), a);
-
-		AbstractSubjectEmailTemplate t = AppointmentReminderTemplate.get(u, a, tz);
-		invitationManager.sendInvitationLink(inv, MessageType.Create, t.getSubject(), t.getEmail(), false);
-
-		invitationManager.sendInvitationReminderSMS(u.getAddress().getPhone(), smsSubject, langId);
+		notifierService.notify(u, a, inv);
 		if (inv.getHash() != null) {
-			inv.setUpdated(new Date());
 			invitationDao.update(inv);
 		}
 	}
@@ -175,11 +154,6 @@ public class AppointmentLogic {
 		}
 	}
 
-	private String generateSMSSubject(String labelid1158, Appointment ment) {
-		String subj = cfgDao.getString("sms.subject", null);
-		return subj == null || subj.length() == 0 ? labelid1158 + " " + ment.getTitle() : subj;
-	}
-
 	public Appointment getAppointment(String appointmentName,
 			String appointmentLocation, String appointmentDescription,
 			Calendar appointmentstart, Calendar appointmentend,

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/iCalUtils.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/iCalUtils.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/iCalUtils.java
index 59133e3..ff3fb4d 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/iCalUtils.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/iCalUtils.java
@@ -72,6 +72,7 @@ import net.fortuna.ical4j.model.property.Version;
  * Class which provides iCalendar Utilities.
  * This class's functions could be made static, as they are not instantiated anyway.
  */
+@org.springframework.stereotype.Component
 public class iCalUtils {
 	private static final Logger log = Red5LoggerFactory.getLogger(iCalUtils.class, webAppRootKey);
 	public static final String PROD_ID = "-//Events Calendar//Apache Openmeetings//EN";

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/EmailManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/EmailManager.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/EmailManager.java
index eaaae1e..cd52067 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/EmailManager.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/EmailManager.java
@@ -34,11 +34,13 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 /**
  * @author swagner
  *
  */
+@Component
 public class EmailManager {
 	private static final Logger log = Red5LoggerFactory.getLogger(EmailManager.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/src/main/java/org/apache/openmeetings/service/notifier/MailNotifier.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/notifier/MailNotifier.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/notifier/MailNotifier.java
new file mode 100644
index 0000000..be2399a
--- /dev/null
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/notifier/MailNotifier.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.service.notifier;
+
+import java.util.TimeZone;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.openmeetings.core.notifier.INotifier;
+import org.apache.openmeetings.core.notifier.NotifierService;
+import org.apache.openmeetings.db.dao.room.IInvitationManager;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.MessageType;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.service.mail.template.subject.AbstractSubjectEmailTemplate;
+import org.apache.openmeetings.service.mail.template.subject.AppointmentReminderTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MailNotifier implements INotifier {
+	@Autowired
+	private NotifierService notifier;
+	@Autowired
+	private IInvitationManager invitationManager;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	@PostConstruct
+	private void register() {
+		notifier.addNotifier(this);
+	}
+
+	@Override
+	public void notify(User u, Appointment a, Invitation inv) throws Exception {
+		TimeZone tz = timezoneUtil.getTimeZone(u.getTimeZoneId());
+		AbstractSubjectEmailTemplate t = AppointmentReminderTemplate.get(u, a, tz);
+		invitationManager.sendInvitationLink(inv, MessageType.Create, t.getSubject(), t.getEmail(), false);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/src/main/java/org/apache/openmeetings/service/notifier/TextNotifier.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/notifier/TextNotifier.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/notifier/TextNotifier.java
new file mode 100644
index 0000000..35f2df0
--- /dev/null
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/notifier/TextNotifier.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.service.notifier;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REMINDER_MESSAGE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.openmeetings.core.notifier.INotifier;
+import org.apache.openmeetings.core.notifier.NotifierService;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TextNotifier implements INotifier {
+	private static final Logger log = Red5LoggerFactory.getLogger(TextNotifier.class, webAppRootKey);
+	@Autowired
+	private NotifierService notifier;
+	@Autowired
+	protected TaskExecutor taskExecutor;
+	@Autowired
+	protected ConfigurationDao cfgDao;
+
+	@PostConstruct
+	private void register() {
+		notifier.addNotifier(this);
+	}
+
+	@Override
+	public void notify(User u, Appointment a, Invitation inv) throws Exception {
+		if (u.getAddress() == null || Strings.isEmpty(u.getAddress().getPhone())) {
+			log.debug("User has no Phone, skip sending notification");
+			return;
+		}
+		final String phone = u.getAddress().getPhone();
+		String msg = cfgDao.getString(CONFIG_REMINDER_MESSAGE, null);
+		if (Strings.isEmpty(msg)) {
+			msg = String.format("%s %s", LabelDao.getString("1158", u.getLanguageId()), a.getTitle());
+		}
+		final String reminderMsg = msg;
+		taskExecutor.execute(() -> {
+			log.debug("Sending Text to: {}, msg is: {}", phone, reminderMsg);
+		});
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
index c99107b..13edce1 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
@@ -30,7 +30,9 @@ import org.apache.openmeetings.util.InitializationContainer;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Component("reminderJob")
 public class ReminderJob extends AbstractJob {
 	private static Logger log = Red5LoggerFactory.getLogger(ReminderJob.class, webAppRootKey);
 	@Autowired

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
index a4bf382..ebc0a5e 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
@@ -30,7 +30,6 @@ import java.util.UUID;
 
 import org.apache.openmeetings.IApplication;
 import org.apache.openmeetings.core.mail.MailHandler;
-import org.apache.openmeetings.core.mail.SMSHandler;
 import org.apache.openmeetings.db.dao.room.IInvitationManager;
 import org.apache.openmeetings.db.dao.room.InvitationDao;
 import org.apache.openmeetings.db.entity.basic.MailMessage;
@@ -55,12 +54,14 @@ import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 /**
  *
  * @author swagner
  *
  */
+@Component
 public class InvitationManager implements IInvitationManager {
 	private static final Logger log = Red5LoggerFactory.getLogger(InvitationManager.class, webAppRootKey);
 
@@ -69,8 +70,6 @@ public class InvitationManager implements IInvitationManager {
 	@Autowired
 	private MailHandler mailHandler;
 	@Autowired
-	private SMSHandler smsHandler;
-	@Autowired
 	private TimezoneUtil timezoneUtil;
 
 	/**
@@ -150,25 +149,6 @@ public class InvitationManager implements IInvitationManager {
 	}
 
 	/**
-	 * This method sends invitation reminder SMS
-	 * @param phone user's phone
-	 * @param subject
-	 * @return
-	 */
-	@Override
-	public boolean sendInvitationReminderSMS(String phone, String subject, long languageId) {
-		if (!Strings.isEmpty(phone)) {
-			log.debug("sendInvitationReminderSMS to " + phone + ": " + subject);
-			try {
-				return smsHandler.sendSMS(phone, subject, languageId);
-			} catch (Exception e) {
-				log.error("sendInvitationReminderSMS", e);
-			}
-		}
-		return false;
-	}
-
-	/**
 	 * @author vasya
 	 *
 	 * @param member

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
index 34d0c6c..4b5b0af 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
@@ -63,12 +63,14 @@ import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.api.scope.IScope;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 /**
  *
  * @author swagner
  *
  */
+@Component
 public class UserManager implements IUserManager {
 	private static final Logger log = Red5LoggerFactory.getLogger(UserManager.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
index b8cc1f6..7fa53a5 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
@@ -85,6 +85,7 @@ public class OpenmeetingsVariables {
 	public static final String CONFIG_KEYCODE_EXCLUSIVE = "exclusive.audio.keycode";
 	public static final String CONFIG_KEYCODE_MUTE = "mute.keycode";
 	public static final String CONFIG_MYROOMS_ENABLED = "personal.rooms.enabled";
+	public static final String CONFIG_REMINDER_MESSAGE = "reminder.message";
 
 	public static final String HEADER_XFRAME_SAMEORIGIN = "SAMEORIGIN";
 	public static final String HEADER_CSP_SELF = "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:;";

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/IcalHandler.java
----------------------------------------------------------------------
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/IcalHandler.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/IcalHandler.java
index 31fb980..0a5592d 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/IcalHandler.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/mail/IcalHandler.java
@@ -111,14 +111,14 @@ public class IcalHandler {
 	// ---------------------------------------------------------------------------------------
 	public String addNewMeeting(Date startDate, Date endDate, String name,
 			List<Map<String, String>> attendees, String description,
-			Map<String, String> organizer, String uid, String javaTzId) throws Exception
+			Map<String, String> organizer, String uid, String javaTzId)
 	{
 
 		TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
 
 		TimeZone timeZone = registry.getTimeZone(javaTzId);
 		if (timeZone == null) {
-			throw new Exception("Unable to get time zone by id provided: " + javaTzId);
+			throw new RuntimeException("Unable to get time zone by id provided: " + javaTzId);
 		}
 
 		DateTime start = new DateTime(startDate);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
index f0d267c..bad459e 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
@@ -40,21 +40,6 @@
 	<context:annotation-config />
 	<context:component-scan base-package="org.apache.openmeetings" />
 
-	<!-- Start of Services exposed to red5 -->
-	<bean id="web.handler" class="org.apache.openmeetings.core.remote.ScopeApplicationAdapter" />
-	<bean id="mobile.service" class="org.apache.openmeetings.core.remote.MobileService" />
-	<!-- End of Services exposed to red5 -->
-
-	<bean id="mainservice" class="org.apache.openmeetings.core.remote.MainService" />
-	<bean id="recordingservice" class="org.apache.openmeetings.core.remote.RecordingService" />
-	<bean id="openmeetings.SessionManager" class="org.apache.openmeetings.core.session.SessionManager"/>
-	<bean id="openmeetings.FileProcessor" class="org.apache.openmeetings.core.data.file.FileProcessor" />
-	<bean id="openmeetings.FlvExplorerConverter" class="org.apache.openmeetings.core.converter.FlvExplorerConverter" />
-	<bean id="openmeetings.RecordingConverterTask" class="org.apache.openmeetings.core.data.record.converter.RecordingConverterTask" />
-	<bean id="openmeetings.InterviewConverterTask" class="org.apache.openmeetings.core.data.record.converter.InterviewConverterTask" />
-	<bean id="openmeetings.InterviewConverter" class="org.apache.openmeetings.core.converter.InterviewConverter" />
-	<bean id="openmeetings.RecordingConverter" class="org.apache.openmeetings.core.converter.RecordingConverter" />
-
 	<!--
 			5000		== 5 sec
 			300000		== 5 min
@@ -91,7 +76,6 @@
 	<bean id="triggerCleanExpiredResetHash" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
 			p:jobDetail-ref="cleanExpiredResetHashJobDetails" p:startDelay="5000" p:repeatInterval="3600000" />
 
-	<bean id="reminderJob" class="org.apache.openmeetings.service.quartz.scheduler.ReminderJob"/>
 	<bean id="meetingReminderJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
 			p:targetObject-ref="reminderJob" p:targetMethod="remindMeetings" p:concurrent="false" />
 	<bean id="triggerMeetingReminder" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
@@ -102,7 +86,6 @@
 			p:jobDetail-ref="expiringRecordingJobDetail" p:startDelay="5000" p:repeatInterval="3600000"/>
 
 	<!-- Mail related jobs -->
-	<bean id="mailHandler" class="org.apache.openmeetings.core.mail.MailHandler" />
 	<bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
 			p:targetObject-ref="mailHandler" p:targetMethod="resetSendingStatus" p:concurrent="false" />
 	<bean id="triggerResetSendingMailStatus" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
@@ -130,7 +113,6 @@
 	<!-- End of Services -->
 
 	<!-- Interface Transactional -->
-	<bean id="roomDao" class="org.apache.openmeetings.db.dao.room.RoomDao"/>
 	<bean id="sipDao" class="org.apache.openmeetings.db.dao.room.SipDao">
 	<!-- Should be uncommented and updated with real values for Asterisk
 		<constructor-arg index="0" value="127.0.0.1"/>
@@ -141,50 +123,8 @@
 		<property name="uid" value="87dddad4-9ca5-475b-860f-2e0825d02b76"/>
 	-->
 	</bean>
-	<bean id="invitationDao" class="org.apache.openmeetings.db.dao.room.InvitationDao" />
-	<bean id="groupDao" class="org.apache.openmeetings.db.dao.user.GroupDao" />
-	<bean id="groupUserDao" class="org.apache.openmeetings.db.dao.user.GroupUserDao" />
-	<bean id="pollDao" class="org.apache.openmeetings.db.dao.room.PollDao" />
-	<bean id="labelDao" class="org.apache.openmeetings.db.dao.label.LabelDao" />
-	<bean id="configurationDao" class="org.apache.openmeetings.db.dao.basic.ConfigurationDao" />
-	<bean id="appointmentDao" class="org.apache.openmeetings.db.dao.calendar.AppointmentDao" />
-	<bean id="sessionDao" class="org.apache.openmeetings.db.dao.server.SessiondataDao" />
-	<bean id="roomModeratorDao" class="org.apache.openmeetings.db.dao.room.RoomModeratorDao" />
-	<bean id="roomGroupDao" class="org.apache.openmeetings.db.dao.room.RoomGroupDao"/>
-	<bean id="conferenceLogDao" class="org.apache.openmeetings.db.dao.log.ConferenceLogDao" />
-	<bean id="fileItemLogDao" class="org.apache.openmeetings.db.dao.file.FileItemLogDao" />
-	<bean id="fileItemDao" class="org.apache.openmeetings.db.dao.file.FileItemDao" />
-	<bean id="recordingDao" class="org.apache.openmeetings.db.dao.record.RecordingDao" />
-	<bean id="recordingMetaDataDao" class="org.apache.openmeetings.db.dao.record.RecordingMetaDataDao" />
-	<bean id="recordingMetaDeltaDao" class="org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao" />
-	<bean id="ldapConfigDao" class="org.apache.openmeetings.db.dao.server.LdapConfigDao" />
-	<bean id="meetingMemberDao" class="org.apache.openmeetings.db.dao.calendar.MeetingMemberDao" />
-	<bean id="privateMessageFolderDao" class="org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao" />
-	<bean id="privateMessageDao" class="org.apache.openmeetings.db.dao.user.PrivateMessageDao" />
-	<bean id="soapLoginDao" class="org.apache.openmeetings.db.dao.server.SOAPLoginDao" />
-	<bean id="userContactDao" class="org.apache.openmeetings.db.dao.user.UserContactDao" />
-	<bean id="userDao" class="org.apache.openmeetings.db.dao.user.UserDao" />
-	<bean id="chatDao" class="org.apache.openmeetings.db.dao.basic.ChatDao" />
-	<bean id="mailMessageDao" class="org.apache.openmeetings.db.dao.basic.MailMessageDao" />
-	<bean id="oauth2Dao" class="org.apache.openmeetings.db.dao.server.OAuth2Dao" />
-	<bean id="omCalendarDao" class="org.apache.openmeetings.db.dao.calendar.OmCalendarDao" />
-
-	<bean id="userManager" class="org.apache.openmeetings.service.user.UserManager" />
-	<bean id="appointmentLogic" class="org.apache.openmeetings.service.calendar.AppointmentLogic" />
-	<bean id="emailManagement" class="org.apache.openmeetings.service.mail.EmailManager" />
-	<bean id="invitationManagement" class="org.apache.openmeetings.service.room.InvitationManager" />
 
-	<!-- No Interface -->
-	<bean id="imageConverter" class="org.apache.openmeetings.core.converter.ImageConverter" />
-	<bean id="documentConverter" class="org.apache.openmeetings.core.converter.DocumentConverter" />
-	<bean id="smsHandler" class="org.apache.openmeetings.core.mail.SMSHandler" />
-	<bean id="importInitvalues" class="org.apache.openmeetings.installation.ImportInitvalues" />
-	<bean id="ldapLoginManagement" class="org.apache.openmeetings.core.ldap.LdapLoginManagement" />
-	<bean id="timezoneUtil" class="org.apache.openmeetings.db.util.TimezoneUtil" />
-	<bean id="backupExport" class="org.apache.openmeetings.backup.BackupExport" />
-	<bean id="backupImport" class="org.apache.openmeetings.backup.BackupImport" />
 	<bean id="appointmentManager" class="org.apache.openmeetings.service.calendar.caldav.AppointmentManager" destroy-method="destroy"/>
-	<bean id="iCalUtils" class="org.apache.openmeetings.service.calendar.caldav.iCalUtils"/>
 
 	<!-- Thread Executor -->
 	<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
index 4475d20..6fcee68 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
@@ -20,10 +20,12 @@
 -->
 <beans xmlns="http://www.springframework.org/schema/beans"
 		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xmlns:context="http://www.springframework.org/schema/context"
 		xmlns:jaxrs="http://cxf.apache.org/jaxrs"
 		xmlns:jaxws="http://cxf.apache.org/jaxws"
 		xsi:schemaLocation="
 			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
+			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
 			http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
 			http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"
 	>
@@ -31,15 +33,8 @@
 	<import resource="classpath:META-INF/cxf/cxf.xml" />
 	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 
-	<bean id="calendarWebService" class="org.apache.openmeetings.webservice.CalendarWebService" />
-	<bean id="errorWebService" class="org.apache.openmeetings.webservice.ErrorWebService" />
-	<bean id="fileWebService" class="org.apache.openmeetings.webservice.FileWebService" />
-	<bean id="groupWebService" class="org.apache.openmeetings.webservice.GroupWebService" />
-	<bean id="infoWebService" class="org.apache.openmeetings.webservice.InfoWebService" />
-	<bean id="recordWebService" class="org.apache.openmeetings.webservice.RecordingWebService" />
-	<bean id="roomWebService" class="org.apache.openmeetings.webservice.RoomWebService" />
-	<bean id="userWebService" class="org.apache.openmeetings.webservice.UserWebService"/>
-	<bean id="netTestWebService" class="org.apache.openmeetings.webservice.NetTestWebService" />
+	<context:annotation-config />
+	<context:component-scan base-package="org.apache.openmeetings.webservice" />
 
 	<!-- (writeXsiType=false) -->
 	<jaxrs:server id="server" address="/">
@@ -49,10 +44,10 @@
 			<ref bean="fileWebService"/>
 			<ref bean="groupWebService"/>
 			<ref bean="infoWebService"/>
+			<ref bean="netTestWebService"/> <!-- JaxRs only -->
 			<ref bean="recordWebService"/>
 			<ref bean="roomWebService"/>
 			<ref bean="userWebService"/>
-			<ref bean="netTestWebService"/> <!-- JaxRs only -->
 		</jaxrs:serviceBeans>
 		<jaxrs:providers>
 			<bean id="appDtoMessageBodyWriter" class="org.apache.openmeetings.webservice.util.AppointmentMessageBodyWriter" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml
index 3c55b02..d20f62c 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml
@@ -23,7 +23,7 @@
 
 	<jmxConfigurator contextName="${current_openmeetings_context_name}" />
 
-	<appender name="FLOG2" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<File>log/${current_openmeetings_context_name}.log</File>
 		<Append>false</Append>
 		<Encoding>UTF-8</Encoding>
@@ -45,7 +45,7 @@
 			<maxHistory>50</maxHistory>
 		</rollingPolicy>
 	</appender>
-	<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
 		<layout class="ch.qos.logback.classic.PatternLayout">
 			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %r %L %c{15} [%.15thread] - %m%n</pattern>
 		</layout>
@@ -59,7 +59,7 @@
 	<logger name="org.apache.mina.filter.ssl.SslFilter" level="ERROR" />
 	<logger name="org.apache.wicket" level="WARN" />
 	<root level="DEBUG">
-		<appender-ref ref="FLOG2" />
-		<appender-ref ref="CONSOLE2" />
+		<appender-ref ref="FILE" />
+		<appender-ref ref="CONSOLE" />
 	</root>
 </configuration>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-web/src/main/webapp/WEB-INF/red5-web.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/red5-web.xml b/openmeetings-web/src/main/webapp/WEB-INF/red5-web.xml
index a3e0aa2..4723baf 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/red5-web.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/red5-web.xml
@@ -29,7 +29,7 @@
 
 	<bean id="web.context" class="org.red5.server.Context" autowire="byType" />
 
-	<bean id="web.scope" class="org.red5.server.scope.WebScope" init-method="register">
+	<bean id="web.scope" class="org.red5.server.scope.WebScope">
 		<property name="server" ref="red5.server" />
 		<property name="parent" ref="global.scope" />
 		<property name="context" ref="web.context" />

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
index 880d01a..f01512d 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/CalendarWebService.java
@@ -54,6 +54,7 @@ import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.webservice.error.ServiceException;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
 
 /**
  * CalendarService contains methods to create, edit delete calendar meetings
@@ -61,6 +62,7 @@ import org.slf4j.Logger;
  * @author sebawagner
  *
  */
+@Service("calendarWebService")
 @WebService(serviceName="org.apache.openmeetings.webservice.CalendarWebService", targetNamespace = TNS)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
 @Produces({MediaType.APPLICATION_JSON})

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java
index 2366082..b58ad4e 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ErrorWebService.java
@@ -39,6 +39,7 @@ import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
 
 /**
  *
@@ -47,6 +48,7 @@ import org.slf4j.Logger;
  * @author solomax
  *
  */
+@Service("errorWebService")
 @WebService(serviceName="org.apache.openmeetings.webservice.ErrorWebService", targetNamespace = TNS)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
 @Produces({MediaType.APPLICATION_JSON})

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
index 1afcef2..9d530f3 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/FileWebService.java
@@ -56,6 +56,7 @@ import org.apache.openmeetings.util.process.ConverterProcessResultList;
 import org.apache.openmeetings.webservice.error.ServiceException;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
 
 /**
  *
@@ -65,6 +66,7 @@ import org.slf4j.Logger;
  * @author sebawagner
  *
  */
+@Service("fileWebService")
 @WebService(serviceName="org.apache.openmeetings.webservice.FileWebService", targetNamespace = TNS)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
 @Produces({MediaType.APPLICATION_JSON})

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/GroupWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/GroupWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/GroupWebService.java
index 6960fc3..3a6dbfb 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/GroupWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/GroupWebService.java
@@ -58,6 +58,7 @@ import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.webservice.error.ServiceException;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
 
 /**
  *
@@ -67,6 +68,7 @@ import org.slf4j.Logger;
  * @author sebawagner
  *
  */
+@Service("groupWebService")
 @WebService(serviceName="org.apache.openmeetings.webservice.GroupWebService", targetNamespace = TNS)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
 @Produces({MediaType.APPLICATION_JSON})

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java
index 24a9816..2298998 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java
@@ -29,14 +29,16 @@ import javax.ws.rs.core.MediaType;
 
 import org.apache.cxf.feature.Features;
 import org.apache.openmeetings.db.dto.basic.Info;
+import org.springframework.stereotype.Service;
 
 /**
- * 
+ *
  * The Service contains methods to get localized errors
- * 
+ *
  * @author solomax
- * 
+ *
  */
+@Service("infoWebService")
 @WebService(serviceName="org.apache.openmeetings.webservice.InfoWebService", targetNamespace = TNS)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
 @Produces({MediaType.APPLICATION_JSON})
@@ -44,7 +46,7 @@ import org.apache.openmeetings.db.dto.basic.Info;
 public class InfoWebService {
 	/**
 	 * Method to get current OpenMeetings version
-	 * 
+	 *
 	 * @return - version
 	 */
 	@WebMethod

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java
index 5c255be..1ec4e8b 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java
@@ -38,67 +38,69 @@ import javax.ws.rs.core.Response.ResponseBuilder;
 import org.apache.cxf.jaxrs.ext.multipart.Multipart;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
 
+@Service("netTestWebService")
 @Path("/networktest")
 public class NetTestWebService {
 	private static final Logger log = Red5LoggerFactory.getLogger(UserWebService.class, webAppRootKey);
-    enum TestType {
-        UNKNOWN,
-        PING,
-        JITTER,
-        DOWNLOAD_SPEED,
-        UPLOAD_SPEED
-    }
+	enum TestType {
+		UNKNOWN,
+		PING,
+		JITTER,
+		DOWNLOAD_SPEED,
+		UPLOAD_SPEED
+	}
 
-    private static final int PING_PACKET_SIZE = 64;
-    private static final int JITTER_PACKET_SIZE = 1024;
-    private static final int DOWNLOAD_PACKET_SIZE = 1024*1024;
+	private static final int PING_PACKET_SIZE = 64;
+	private static final int JITTER_PACKET_SIZE = 1024;
+	private static final int DOWNLOAD_PACKET_SIZE = 1024*1024;
 
-    private final byte[] pingData;
-    private final byte[] jitterData;
-    private final byte[] downloadData;
+	private final byte[] pingData;
+	private final byte[] jitterData;
+	private final byte[] downloadData;
 
 	public NetTestWebService() {
-        pingData = new byte[PING_PACKET_SIZE];
-        jitterData = new byte[JITTER_PACKET_SIZE];
-        downloadData = new byte[DOWNLOAD_PACKET_SIZE];
+		pingData = new byte[PING_PACKET_SIZE];
+		jitterData = new byte[JITTER_PACKET_SIZE];
+		downloadData = new byte[DOWNLOAD_PACKET_SIZE];
 
-        Arrays.fill(pingData, (byte) '0');
-        Arrays.fill(jitterData, (byte) '0');
-        Arrays.fill(downloadData, (byte) '0');
+		Arrays.fill(pingData, (byte) '0');
+		Arrays.fill(jitterData, (byte) '0');
+		Arrays.fill(downloadData, (byte) '0');
 	}
 
 	@GET
 	@Produces(MediaType.APPLICATION_OCTET_STREAM)
 	@Path("/")
 	public Response get(@QueryParam("type") String type) {
-        TestType testType = getTypeByString(type);
-        log.debug("Network test:: get");
-
-        // choose data to send
-        byte[] data = new byte[0];
-        switch (testType) {
-            case PING:
-                data = pingData;
-                break;
-            case JITTER:
-                data = jitterData;
-                break;
-            case DOWNLOAD_SPEED:
-                data = downloadData;
-                break;
+		TestType testType = getTypeByString(type);
+		log.debug("Network test:: get");
+
+		// choose data to send
+		byte[] data = new byte[0];
+		switch (testType) {
+			case PING:
+				data = pingData;
+				break;
+			case JITTER:
+				data = jitterData;
+				break;
+			case DOWNLOAD_SPEED:
+				data = downloadData;
+				break;
 			case UPLOAD_SPEED:
 				break;
 			default:
 				break;
-        }
+		}
 
-        ResponseBuilder response = Response.ok().type(MediaType.APPLICATION_OCTET_STREAM).entity(new ByteArrayInputStream(data));
-        //response.header("Content-Disposition", "attachment; filename=test.png");
-        response.header("Cache-Control", "no-cache");
-        response.header("Content-Length", String.valueOf(data.length));
-        return response.build();
-    }
+		ResponseBuilder response = Response.ok().type(MediaType.APPLICATION_OCTET_STREAM).entity(new ByteArrayInputStream(data));
+		//response.header("Content-Disposition", "attachment; filename=test.png");
+		response.header("Cache-Control", "no-cache");
+		response.header("Content-Length", String.valueOf(data.length));
+		return response.build();
+	}
 
 	@POST
 	@Consumes(MediaType.MULTIPART_FORM_DATA)
@@ -106,20 +108,19 @@ public class NetTestWebService {
 	public void upload(@Multipart(value = "stream", type = MediaType.APPLICATION_OCTET_STREAM) InputStream stream) throws IOException {
 		byte[] b = new byte[1024];
 		while (stream.read(b) >= 0 ) {};
-    }
-
-
-    private static TestType getTypeByString(String typeString) {
-        if ("ping".equals(typeString)) {
-            return TestType.PING;
-        } else if ("jitter".equals(typeString)) {
-            return TestType.JITTER;
-        } else if ("download".equals(typeString)) {
-            return TestType.DOWNLOAD_SPEED;
-        } else if ("upload".equals(typeString)) {
-            return TestType.UPLOAD_SPEED;
-        }
+	}
 
-        return TestType.UNKNOWN;
-    }
+	private static TestType getTypeByString(String typeString) {
+		if ("ping".equals(typeString)) {
+			return TestType.PING;
+		} else if ("jitter".equals(typeString)) {
+			return TestType.JITTER;
+		} else if ("download".equals(typeString)) {
+			return TestType.DOWNLOAD_SPEED;
+		} else if ("upload".equals(typeString)) {
+			return TestType.UPLOAD_SPEED;
+		}
+
+		return TestType.UNKNOWN;
+	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RecordingWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RecordingWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RecordingWebService.java
index f51e473..aea9735 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RecordingWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RecordingWebService.java
@@ -43,6 +43,7 @@ import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.webservice.error.ServiceException;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
 
 /**
  *
@@ -51,6 +52,7 @@ import org.slf4j.Logger;
  * @author solomax
  *
  */
+@Service("recordWebService")
 @WebService(serviceName="org.apache.openmeetings.webservice.RecordingWebService", targetNamespace = TNS)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
 @Produces({MediaType.APPLICATION_JSON})

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
index 397b3be..3b29664 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
@@ -63,6 +63,7 @@ import org.apache.openmeetings.webservice.error.ServiceException;
 import org.apache.wicket.Application;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
 
 /**
  * RoomService contains methods to manipulate rooms and create invitation hash
@@ -70,6 +71,7 @@ import org.slf4j.Logger;
  * @author sebawagner
  *
  */
+@Service("roomWebService")
 @WebService(serviceName="org.apache.openmeetings.webservice.RoomWebService", targetNamespace = TNS)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
 @Produces({MediaType.APPLICATION_JSON})
@@ -452,7 +454,7 @@ public class RoomWebService extends BaseWebService {
 	@WebMethod
 	@POST
 	@Path("/hash")
-	private ServiceResult hash(@WebParam(name="sid") @QueryParam("sid") String sid
+	public ServiceResult hash(@WebParam(name="sid") @QueryParam("sid") String sid
 			, @WebParam(name="invite") @QueryParam("invite") InvitationDTO invite
 			, @WebParam(name="sendmail") @QueryParam("sendmail") boolean sendmail
 			) throws ServiceException

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
----------------------------------------------------------------------
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
index a9ea2b5..bec8307 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
@@ -74,6 +74,7 @@ import org.apache.wicket.validation.Validatable;
 import org.apache.wicket.validation.ValidationError;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
 
 /**
  *
@@ -83,6 +84,7 @@ import org.slf4j.Logger;
  * @author sebawagner
  *
  */
+@Service("userWebService")
 @WebService(serviceName = USER_SERVICE_NAME, targetNamespace = TNS, portName = USER_SERVICE_PORT_NAME)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
 @Produces({MediaType.APPLICATION_JSON})


[2/2] openmeetings git commit: [OPENMEETINGS-1707] smslib is removed, notifiers are unified

Posted by so...@apache.org.
[OPENMEETINGS-1707] smslib is removed, notifiers are unified


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/28cac665
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/28cac665
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/28cac665

Branch: refs/heads/master
Commit: 28cac665b1c7ef2a737067d2b72e495654899f82
Parents: cb02948
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Thu Sep 21 17:34:41 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Thu Sep 21 17:34:41 2017 +0700

----------------------------------------------------------------------
 openmeetings-core/pom.xml                       |   6 -
 .../core/converter/DocumentConverter.java       |   2 +
 .../core/converter/FlvExplorerConverter.java    |   2 +
 .../core/converter/ImageConverter.java          |   2 +
 .../core/converter/InterviewConverter.java      |   2 +
 .../core/converter/RecordingConverter.java      |   4 +-
 .../core/data/file/FileProcessor.java           |   2 +
 .../converter/InterviewConverterTask.java       |   9 +-
 .../converter/RecordingConverterTask.java       |   9 +-
 .../core/ldap/LdapLoginManagement.java          |   2 +
 .../openmeetings/core/mail/MailHandler.java     |  43 ++++---
 .../openmeetings/core/mail/SMSHandler.java      | 117 -------------------
 .../openmeetings/core/notifier/INotifier.java   |  27 +++++
 .../core/notifier/NotifierService.java          |  62 ++++++++++
 .../openmeetings/core/remote/MainService.java   |   2 +
 .../openmeetings/core/remote/MobileService.java |   2 +
 .../core/remote/RecordingService.java           |   2 +
 .../core/remote/ScopeApplicationAdapter.java    |   2 +
 .../core/session/SessionManager.java            |   2 +
 .../openmeetings/db/dao/basic/ChatDao.java      |   2 +
 .../db/dao/basic/ConfigurationDao.java          |   2 +
 .../db/dao/basic/MailMessageDao.java            |   2 +
 .../db/dao/calendar/AppointmentDao.java         |   2 +
 .../db/dao/calendar/MeetingMemberDao.java       |   2 +
 .../db/dao/calendar/OmCalendarDao.java          |   2 +
 .../openmeetings/db/dao/file/FileItemDao.java   |   2 +
 .../db/dao/file/FileItemLogDao.java             |   2 +
 .../db/dao/log/ConferenceLogDao.java            |   6 +-
 .../db/dao/record/RecordingDao.java             |  22 ++--
 .../db/dao/record/RecordingMetaDataDao.java     |   2 +
 .../db/dao/record/RecordingMetaDeltaDao.java    |  26 +++--
 .../db/dao/room/IInvitationManager.java         |   4 +-
 .../openmeetings/db/dao/room/InvitationDao.java |   2 +
 .../openmeetings/db/dao/room/PollDao.java       |  12 +-
 .../openmeetings/db/dao/room/RoomDao.java       |   2 +
 .../openmeetings/db/dao/room/RoomGroupDao.java  |   2 +
 .../db/dao/room/RoomModeratorDao.java           |   2 +
 .../db/dao/server/LdapConfigDao.java            |   2 +
 .../openmeetings/db/dao/server/OAuth2Dao.java   |   8 +-
 .../db/dao/server/SOAPLoginDao.java             |   2 +
 .../db/dao/server/SessiondataDao.java           |   2 +
 .../openmeetings/db/dao/user/GroupDao.java      |   4 +-
 .../openmeetings/db/dao/user/GroupUserDao.java  |   2 +
 .../db/dao/user/PrivateMessageDao.java          |   2 +
 .../db/dao/user/PrivateMessageFolderDao.java    |  34 +++---
 .../db/dao/user/UserContactDao.java             |  38 +++---
 .../openmeetings/db/dao/user/UserDao.java       |   2 +
 .../openmeetings/db/util/TimezoneUtil.java      |   2 +
 .../openmeetings/backup/BackupExport.java       |   2 +
 .../openmeetings/backup/BackupImport.java       |   4 +
 .../installation/ImportInitvalues.java          |   4 +
 .../src/main/resources/logback.xml              |   8 +-
 .../src/site/xdoc/GeneralConfiguration.xml      |  22 +---
 openmeetings-service/pom.xml                    |   4 +
 .../service/calendar/AppointmentLogic.java      |  38 +-----
 .../service/calendar/caldav/iCalUtils.java      |   1 +
 .../openmeetings/service/mail/EmailManager.java |   2 +
 .../service/notifier/MailNotifier.java          |  58 +++++++++
 .../service/notifier/TextNotifier.java          |  71 +++++++++++
 .../service/quartz/scheduler/ReminderJob.java   |   2 +
 .../service/room/InvitationManager.java         |  24 +---
 .../openmeetings/service/user/UserManager.java  |   2 +
 .../util/OpenmeetingsVariables.java             |   1 +
 .../openmeetings/util/mail/IcalHandler.java     |   4 +-
 .../WEB-INF/classes/applicationContext.xml      |  60 ----------
 .../main/webapp/WEB-INF/classes/cxf-servlet.xml |  15 +--
 .../webapp/WEB-INF/classes/logback-config.xml   |   8 +-
 .../src/main/webapp/WEB-INF/red5-web.xml        |   2 +-
 .../webservice/CalendarWebService.java          |   2 +
 .../webservice/ErrorWebService.java             |   2 +
 .../openmeetings/webservice/FileWebService.java |   2 +
 .../webservice/GroupWebService.java             |   2 +
 .../openmeetings/webservice/InfoWebService.java |  10 +-
 .../webservice/NetTestWebService.java           | 113 +++++++++---------
 .../webservice/RecordingWebService.java         |   2 +
 .../openmeetings/webservice/RoomWebService.java |   4 +-
 .../openmeetings/webservice/UserWebService.java |   2 +
 77 files changed, 522 insertions(+), 442 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-core/pom.xml b/openmeetings-core/pom.xml
index 72ba71b..fac5053 100644
--- a/openmeetings-core/pom.xml
+++ b/openmeetings-core/pom.xml
@@ -30,7 +30,6 @@
 	<name>Openmeetings Core</name>
 	<description>Module for OpenMeetings core and red5 related classes and services</description>
 	<properties>
-		<smslib.version>3.5.4</smslib.version>
 		<mail.version>1.6.0</mail.version>
 		<site.basedir>${project.parent.basedir}</site.basedir>
 	</properties>
@@ -73,11 +72,6 @@
 			<version>1.4.10</version>
 		</dependency>
 		<dependency>
-			<groupId>org.smslib</groupId>
-			<artifactId>smslib</artifactId>
-			<version>${smslib.version}</version>
-		</dependency>
-		<dependency>
 			<groupId>org.apache.wicket</groupId>
 			<artifactId>wicket-core</artifactId>
 			<version>${wicket.version}</version>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
index 7e412b5..999440e 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
@@ -38,7 +38,9 @@ import org.artofsolving.jodconverter.office.OfficeManager;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Component
 public class DocumentConverter {
 	private static final Logger log = Red5LoggerFactory.getLogger(DocumentConverter.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
index 90d2df6..c9c0f52 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
@@ -35,7 +35,9 @@ import org.apache.openmeetings.util.process.ConverterProcessResult;
 import org.apache.openmeetings.util.process.ProcessHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Component;
 
+@Component
 public class FlvExplorerConverter extends BaseConverter {
 	private static final Logger log = Red5LoggerFactory.getLogger(FlvExplorerConverter.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
index c452fe4..1765765 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
@@ -55,8 +55,10 @@ import org.apache.tika.parser.image.ImageParser;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 import org.xml.sax.helpers.DefaultHandler;
 
+@Component
 public class ImageConverter extends BaseConverter {
 	private static final Logger log = Red5LoggerFactory.getLogger(ImageConverter.class, webAppRootKey);
 	private static final String PAGE_TMPLT = DOC_PAGE_PREFIX + "-%04d." + EXTENSION_PNG;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
index 3669316..a07d0db 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
@@ -41,7 +41,9 @@ import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Component
 public class InterviewConverter extends BaseConverter implements IRecordingConverter {
 	private static final Logger log = Red5LoggerFactory.getLogger(InterviewConverter.class, webAppRootKey);
 	private static class ReConverterParams {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
index bcf8592..8a9b0c9 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
@@ -41,7 +41,9 @@ import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Component
 public class RecordingConverter extends BaseConverter implements IRecordingConverter {
 	private static final Logger log = Red5LoggerFactory.getLogger(RecordingConverter.class, webAppRootKey);
 
@@ -66,7 +68,7 @@ public class RecordingConverter extends BaseConverter implements IRecordingConve
 			List<ConverterProcessResult> logs = new ArrayList<>();
 			List<File> waveFiles = new ArrayList<>();
 			File streamFolder = getStreamFolder(r);
-			
+
 			RecordingMetaData screenMetaData = metaDataDao.getScreenMetaDataByRecording(r.getId());
 
 			if (screenMetaData == null) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
index c9702d3..70cb04a 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
@@ -40,7 +40,9 @@ import org.apache.openmeetings.util.process.ConverterProcessResultList;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Component
 public class FileProcessor {
 	private static final Logger log = Red5LoggerFactory.getLogger(FileProcessor.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/InterviewConverterTask.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/InterviewConverterTask.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/InterviewConverterTask.java
index 9f4a4f5..8431b1f 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/InterviewConverterTask.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/InterviewConverterTask.java
@@ -25,7 +25,9 @@ import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.task.TaskExecutor;
+import org.springframework.stereotype.Component;
 
+@Component
 public class InterviewConverterTask {
 	private static final Logger log = Red5LoggerFactory.getLogger(InterviewConverterTask.class, webAppRootKey);
 
@@ -38,11 +40,8 @@ public class InterviewConverterTask {
 		try {
 			log.debug("[-1-]" + taskExecutor);
 
-			taskExecutor.execute(new Runnable() {
-				@Override
-				public void run() {
-					interviewConverter.startConversion(recordingId);
-				}
+			taskExecutor.execute(() -> {
+				interviewConverter.startConversion(recordingId);
 			});
 		} catch (Exception err) {
 			log.error("[startConversionThread]", err);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/RecordingConverterTask.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/RecordingConverterTask.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/RecordingConverterTask.java
index 781004e..1d98db5 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/RecordingConverterTask.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/record/converter/RecordingConverterTask.java
@@ -25,7 +25,9 @@ import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.task.TaskExecutor;
+import org.springframework.stereotype.Component;
 
+@Component
 public class RecordingConverterTask {
 	private static final Logger log = Red5LoggerFactory.getLogger(RecordingConverterTask.class, webAppRootKey);
 
@@ -38,11 +40,8 @@ public class RecordingConverterTask {
 		try {
 			log.debug("[-1-]" + taskExecutor);
 
-			taskExecutor.execute(new Runnable() {
-				@Override
-				public void run() {
-					recordingConverter.startConversion(recordingId);
-				}
+			taskExecutor.execute(() -> {
+				recordingConverter.startConversion(recordingId);
 			});
 		} catch (Exception err) {
 			log.error("[startConversionThread]", err);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
index b162d92..2a15343 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
@@ -70,6 +70,7 @@ import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 /**
  * Management of optional LDAP Login
@@ -77,6 +78,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @author o.becherer
  *
  */
+@Component
 public class LdapLoginManagement {
 	private static final Logger log = Red5LoggerFactory.getLogger(LdapLoginManagement.class, webAppRootKey);
 	// LDAP custom attribute mapping keys

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
index 48703cc..d1f6a12 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java
@@ -65,6 +65,7 @@ import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.task.TaskExecutor;
+import org.springframework.stereotype.Component;
 
 /**
  *
@@ -74,6 +75,7 @@ import org.springframework.core.task.TaskExecutor;
  * http://connector.sourceforge.net/doc-files/Properties.html
  *
  */
+@Component("mailHandler")
 public class MailHandler {
 	private static final Logger log = Red5LoggerFactory.getLogger(MailHandler.class, webAppRootKey);
 	private static final int MAIL_SEND_TIMEOUT = 60 * 60 * 1000; // 1 hour
@@ -238,29 +240,26 @@ public class MailHandler {
 				m.setStatus(Status.SENDING);
 				mailMessageDao.update(m, null);
 			}
-			taskExecutor.execute(new Runnable() {
-				@Override
-				public void run() {
-					log.debug("Message sending in progress");
-					log.debug("  To: " + m.getRecipients());
-					log.debug("  Subject: " + m.getSubject());
+			taskExecutor.execute(() -> {
+				log.debug("Message sending in progress");
+				log.debug("  To: " + m.getRecipients());
+				log.debug("  Subject: " + m.getSubject());
 
-					// -- Send the message --
-					try {
-						Transport.send(getMimeMessage(m));
-						m.setLastError("");
-						m.setStatus(Status.DONE);
-					} catch (Exception e) {
-						log.error("Error while sending message", e);
-						m.setErrorCount(m.getErrorCount() + 1);
-						StringWriter sw = new StringWriter();
-						e.printStackTrace(new PrintWriter(sw));
-						m.setLastError(sw.getBuffer().toString());
-						m.setStatus(m.getErrorCount() < MAXIMUM_ERROR_COUNT ? Status.NONE : Status.ERROR);
-					}
-					if (m.getId() != null) {
-						mailMessageDao.update(m, null);
-					}
+				// -- Send the message --
+				try {
+					Transport.send(getMimeMessage(m));
+					m.setLastError("");
+					m.setStatus(Status.DONE);
+				} catch (Exception e) {
+					log.error("Error while sending message", e);
+					m.setErrorCount(m.getErrorCount() + 1);
+					StringWriter sw = new StringWriter();
+					e.printStackTrace(new PrintWriter(sw));
+					m.setLastError(sw.getBuffer().toString());
+					m.setStatus(m.getErrorCount() < MAXIMUM_ERROR_COUNT ? Status.NONE : Status.ERROR);
+				}
+				if (m.getId() != null) {
+					mailMessageDao.update(m, null);
 				}
 			});
 		} else {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
deleted file mode 100644
index 4b46966..0000000
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/SMSHandler.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.core.mail;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.smslib.Message.MessageEncodings;
-import org.smslib.OutboundMessage;
-import org.smslib.Service;
-import org.smslib.http.BulkSmsHTTPGateway;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.task.TaskExecutor;
-
-/**
- *
- * @author iarkh
- *
- */
-
-public class SMSHandler {
-	private static final Logger log = Red5LoggerFactory.getLogger(SMSHandler.class, webAppRootKey);
-
-	@Autowired
-	protected ConfigurationDao cfgDao;
-	@Autowired
-	protected TaskExecutor taskExecutor;
-
-	private BulkSmsHTTPGateway gateway = null;
-
-	private boolean checkBalance() throws Exception {
-		if (gateway == null) {
-			String smsProvider = cfgDao.getString("sms.provider", null);
-			String smsUsername = cfgDao.getString("sms.username", null);
-			String smsUserpass = cfgDao.getString("sms.userpass", null);
-
-			if (smsProvider == null || smsProvider.length() == 0 ||
-					smsUsername == null || smsUsername.length() == 0) {
-				log.error("SMS Provider is not configured properly!");
-				return false;
-			}
-			gateway = new BulkSmsHTTPGateway(smsProvider, smsUsername, smsUserpass);
-			gateway.setOutbound(true);
-			Service.getInstance().addGateway(gateway);
-			Service.getInstance().startService();
-		}
-		return gateway.queryBalance() >= 1;
-	}
-
-	public boolean sendSMS(String phone, String subj, long languageId) {
-		try {
-			taskExecutor.execute(new SMSSenderTask(phone, subj, languageId));
-			return true;
-		} catch (Exception ex) {
-			log.error("sendSMS", ex);
-			return false;
-		}
-	}
-
-	protected class SMSSenderTask implements Runnable {
-		private final String phone;
-		private final String subject;
-		private long languageId;
-
-		public SMSSenderTask(String phone, String subject, long languageId) {
-			this.phone = phone;
-			this.subject = subject;
-			this.languageId = languageId;
-		}
-
-		@Override
-		public void run() {
-			this.send();
-		}
-
-		/**
-		 * Sending an SMS with the given values.
-		 * @return <code>true</code> if sms was sent successfully, <code>false</code> otherwise.
-		 */
-		public boolean send() {
-			try {
-				log.debug("SMS sending to: " + phone + ", subject is: " + subject);
-				if (checkBalance()) {
-					OutboundMessage msg = new OutboundMessage(phone, subject);
-					if (languageId != 1) {
-						msg.setEncoding(MessageEncodings.ENCUCS2);
-					}
-					return Service.getInstance().sendMessage(msg);
-				} else {
-					log.error("Error: insufficient funds on SMS provider account!");
-					return false;
-				}
-			} catch (Exception ex) {
-				log.error("Error sending sms: ", ex);
-				return false;
-			}
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/notifier/INotifier.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/notifier/INotifier.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/notifier/INotifier.java
new file mode 100644
index 0000000..5a5682f
--- /dev/null
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/notifier/INotifier.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.notifier;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.user.User;
+
+public interface INotifier {
+	void notify(User u, Appointment a, Invitation inv) throws Exception;
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/notifier/NotifierService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/notifier/NotifierService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/notifier/NotifierService.java
new file mode 100644
index 0000000..e5ad8d9
--- /dev/null
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/notifier/NotifierService.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.core.notifier;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.user.User;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * @author iarkh
+ *
+ */
+@Service
+public class NotifierService {
+	private static final Logger log = Red5LoggerFactory.getLogger(NotifierService.class, webAppRootKey);
+
+	private List<INotifier> notifiers = new ArrayList<>();
+
+	public void addNotifier(INotifier n) {
+		notifiers.add(n);
+	}
+
+	public void notify(User u, Appointment a, Invitation inv) {
+		if (inv == null) {
+			log.error(String.format("Error retrieving Invitation for member %s in Appointment %s"
+					, u.getAddress().getEmail(), a.getTitle()));
+			return;
+		}
+		for (INotifier n : notifiers) {
+			try {
+				n.notify(u, a, inv);
+			} catch (Exception e) {
+				log.error("Unexpected exception while sending notifications", e);
+			}
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
index 4e8735e..4fc7f17 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
@@ -31,12 +31,14 @@ import org.red5.server.api.service.IPendingServiceCall;
 import org.red5.server.api.service.IPendingServiceCallback;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 /**
  *
  * @author swagner
  *
  */
+@Service
 public class MainService implements IPendingServiceCallback {
 	private static final Logger log = Red5LoggerFactory.getLogger(MainService.class, OpenmeetingsVariables.webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
index 2be64ac..9ad0c2d 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
@@ -68,7 +68,9 @@ import org.red5.server.api.Red5;
 import org.red5.server.api.service.IServiceCapableConnection;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
+@Service("mobile.service")
 public class MobileService {
 	private static final Logger log = Red5LoggerFactory.getLogger(MainService.class, webAppRootKey);
 	@Autowired

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
index 0e117a1..a1239ab 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
@@ -60,9 +60,11 @@ import org.red5.server.api.stream.IStreamListener;
 import org.red5.server.stream.ClientBroadcastStream;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 import com.github.openjson.JSONObject;
 
+@Service
 public class RecordingService implements IPendingServiceCallback {
 	private static final Logger log = Red5LoggerFactory.getLogger(RecordingService.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
index 2c5c127..050b2cd 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
@@ -70,9 +70,11 @@ import org.red5.server.api.service.IServiceCapableConnection;
 import org.red5.server.api.stream.IBroadcastStream;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 import com.github.openjson.JSONObject;
 
+@Service("web.handler")
 public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter implements IPendingServiceCallback {
 	private static final Logger _log = Red5LoggerFactory.getLogger(ScopeApplicationAdapter.class, webAppRootKey);
 	private static final String SID_PARAM = "sid";

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
index 6d83736..f7c5a94 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
@@ -37,6 +37,7 @@ import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.Server;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Component;
 
 /**
  * Handle {@link StreamClient} objects.
@@ -46,6 +47,7 @@ import org.slf4j.Logger;
  * @author sebawagner
  *
  */
+@Component
 public class SessionManager implements ISessionManager {
 	protected static final Logger log = Red5LoggerFactory.getLogger(SessionManager.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
index bf17f0a..cd51d35 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
@@ -25,8 +25,10 @@ import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 
 import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class ChatDao {
 	@PersistenceContext

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
index 45aa805..3d5563d 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -87,6 +87,7 @@ import org.apache.wicket.Application;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.github.openjson.JSONObject;
@@ -102,6 +103,7 @@ import com.github.openjson.JSONObject;
  * @author swagner
  *
  */
+@Repository
 @Transactional
 public class ConfigurationDao implements IDataProviderDao<Configuration> {
 	private static final Logger log = Red5LoggerFactory.getLogger(ConfigurationDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
index 8fa1aa5..cc3a912 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
@@ -29,8 +29,10 @@ import org.apache.openmeetings.db.dao.IDataProviderDao;
 import org.apache.openmeetings.db.entity.basic.MailMessage;
 import org.apache.openmeetings.db.entity.basic.MailMessage.Status;
 import org.apache.wicket.util.string.Strings;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class MailMessageDao  implements IDataProviderDao<MailMessage> {
 	@PersistenceContext

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
index d516b3e..9449ebc 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
@@ -47,8 +47,10 @@ import org.apache.openmeetings.db.util.TimezoneUtil;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class AppointmentDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java
index a6632b7..87a4e01 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java
@@ -31,8 +31,10 @@ import javax.persistence.PersistenceContext;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class MeetingMemberDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(MeetingMemberDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/OmCalendarDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/OmCalendarDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/OmCalendarDao.java
index 1f33688..7e64906 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/OmCalendarDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/calendar/OmCalendarDao.java
@@ -27,8 +27,10 @@ import javax.persistence.TypedQuery;
 
 import org.apache.openmeetings.db.entity.calendar.OmCalendar;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class OmCalendarDao {
 	@PersistenceContext

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
index dd1b9b2..5d2c544 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
@@ -39,12 +39,14 @@ import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author sebastianwagner
  *
  */
+@Repository
 @Transactional
 public class FileItemDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(FileItemDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java
index 652e2a3..40064b3 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java
@@ -31,8 +31,10 @@ import org.apache.openmeetings.db.entity.file.FileItemLog;
 import org.apache.openmeetings.util.process.ConverterProcessResult;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class FileItemLogDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(FileItemLogDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java
index 16ac7d6..ce924db 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java
@@ -29,12 +29,14 @@ import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.log.ConferenceLog.Type;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class ConferenceLogDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(ConferenceLogDao.class, webAppRootKey);
-	
+
 	@PersistenceContext
 	private EntityManager em;
 
@@ -47,7 +49,7 @@ public class ConferenceLogDao {
 		confLog.setScopeName(scopeName);
 		confLog.setRoomId(roomId);
 		confLog.setUserip(userip);
-		
+
 		em.persist(confLog);
 		log.debug("[addConferenceLog]: " + confLog);
 		return confLog;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
index 96b4aee..e4b111e 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
@@ -40,16 +40,18 @@ import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author sebastianwagner
- * 
+ *
  */
+@Repository
 @Transactional
 public class RecordingDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(RecordingDao.class, webAppRootKey);
-	
+
 	@PersistenceContext
 	private EntityManager em;
 	@Autowired
@@ -207,7 +209,7 @@ public class RecordingDao {
 		update(f);
 		return true;
 	}
-	
+
 	public Recording update(Recording f) {
 		try {
 			if (f.getId() == null) {
@@ -236,24 +238,24 @@ public class RecordingDao {
 			.setParameter("converting", Status.CONVERTING)
 			.executeUpdate();
 	}
-	
+
 	public RecordingContainerData getContainerData(long userId) {
 		try {
 			RecordingContainerData containerData = new RecordingContainerData();
-	
+
 			// User Home Recordings
 			List<Recording> homes = getRootByOwner(userId);
 			long homeFileSize = 0;
-	
+
 			for (Recording home : homes) {
 				homeFileSize += getSize(home);
 			}
-	
+
 			containerData.setUserHomeSize(homeFileSize);
-			
+
 			// Public Recordings
 			long publicFileSize = 0;
-			
+
 			//get all groups the user can view
 			for (GroupUser ou : userDao.get(userId).getGroupUsers()) {
 				List<Recording> publicRecordings = getRootByPublic(ou.getGroup().getId());
@@ -270,7 +272,7 @@ public class RecordingDao {
 		}
 		return null;
 	}
-	
+
 	private long getSize(Recording r) {
 		long size = 0;
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDataDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDataDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDataDao.java
index a3f8855..3394597 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDataDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDataDao.java
@@ -33,8 +33,10 @@ import org.apache.openmeetings.db.entity.record.RecordingMetaData.Status;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class RecordingMetaDataDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(RecordingMetaDataDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDeltaDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDeltaDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDeltaDao.java
index 463a61a..fa8ed47 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDeltaDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingMetaDeltaDao.java
@@ -28,39 +28,41 @@ import javax.persistence.PersistenceContext;
 import org.apache.openmeetings.db.entity.record.RecordingMetaDelta;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author sebastianwagner
  *
  */
+@Repository
 @Transactional
 public class RecordingMetaDeltaDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(RecordingMetaDeltaDao.class, webAppRootKey);
 	@PersistenceContext
 	private EntityManager em;
-	
+
 	public List<RecordingMetaDelta> getByMetaId(Long metaDataId) {
 		return em.createNamedQuery("getRecordingMetaDeltaByMetaDataId", RecordingMetaDelta.class).setParameter("metaDataId", metaDataId).getResultList();
 	}
-	
-	
-	
+
+
+
 	public Long add(RecordingMetaDelta metaDelta) {
-		try { 
-			
+		try {
+
 			metaDelta = em.merge(metaDelta);
 			Long metaDeltaId = metaDelta.getId();
-			
+
 			log.debug("metaDeltaId "+metaDeltaId);
-			
+
 			return metaDeltaId;
 		} catch (Exception ex2) {
 			log.error("[add]: ",ex2);
 		}
 		return null;
 	}
-	
+
 	public RecordingMetaDelta update(RecordingMetaDelta metaDelta) {
 		log.debug("[update]: ");
 		if (metaDelta.getMetaDataId() == null) {
@@ -68,8 +70,8 @@ public class RecordingMetaDeltaDao {
 		} else {
 			metaDelta = em.merge(metaDelta);
 		}
-			
+
 		return metaDelta;
-	}	
-	
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/IInvitationManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/IInvitationManager.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/IInvitationManager.java
index 8ceaee4..72684ce 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/IInvitationManager.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/IInvitationManager.java
@@ -43,7 +43,5 @@ public interface IInvitationManager {
 			User createdBy, Long languageId, Date gmtTimeStart, Date gmtTimeEnd
 			, Appointment appointment);
 
-	void sendInvitationLink(Invitation i, MessageType type, String subject, String message, boolean ical) throws Exception ;
-
-	boolean sendInvitationReminderSMS(String phone, String subject, long languageId);
+	void sendInvitationLink(Invitation i, MessageType type, String subject, String message, boolean ical) throws Exception;
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/InvitationDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/InvitationDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/InvitationDao.java
index fd7fea1..7542862 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/InvitationDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/InvitationDao.java
@@ -37,8 +37,10 @@ import org.apache.openmeetings.util.CalendarHelper;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class InvitationDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(InvitationDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java
index d6496ad..fba91fe 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java
@@ -33,8 +33,10 @@ import org.apache.openmeetings.db.entity.room.RoomPoll;
 import org.apache.openmeetings.db.entity.room.RoomPollAnswer;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class PollDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(PollDao.class, webAppRootKey);
@@ -81,7 +83,7 @@ public class PollDao {
 		List<RoomPoll> list = em.createNamedQuery("getPollById", RoomPoll.class).setParameter("id", id).getResultList();
 		return list.isEmpty() ? null : list.get(0);
 	}
-	
+
 	public RoomPoll getByRoom(Long roomId) {
 		try {
 			log.debug(" :: getPoll :: " + roomId);
@@ -95,7 +97,7 @@ public class PollDao {
 		}
 		return null;
 	}
-	
+
 	public List<RoomPoll> get() {
 		try {
 			TypedQuery<RoomPoll> q = em.createNamedQuery("getPollListBackup", RoomPoll.class);
@@ -107,7 +109,7 @@ public class PollDao {
 		}
 		return null;
 	}
-	
+
 	public List<RoomPoll> getArchived(Long roomId) {
 		try {
 			log.debug(" :: getArchived :: " + roomId);
@@ -121,7 +123,7 @@ public class PollDao {
 		}
 		return null;
 	}
-	
+
 	public boolean hasPoll(Long roomId) {
 		try {
 			log.debug(" :: hasPoll :: " + roomId);
@@ -136,7 +138,7 @@ public class PollDao {
 		}
 		return false;
 	}
-	
+
 	public boolean hasVoted(Long roomId, Long userId) {
 		try {
 			log.debug(" :: hasVoted :: " + roomId + ", " + userId);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
index 078df99..77ec762 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
@@ -50,8 +50,10 @@ import org.apache.openmeetings.util.DaoHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class RoomDao implements IGroupAdminDataProviderDao<Room> {
 	private static final Logger log = Red5LoggerFactory.getLogger(RoomDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomGroupDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomGroupDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomGroupDao.java
index 37c113c..155b5e9 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomGroupDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomGroupDao.java
@@ -25,8 +25,10 @@ import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 
 import org.apache.openmeetings.db.entity.room.RoomGroup;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class RoomGroupDao {
 	@PersistenceContext

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomModeratorDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomModeratorDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomModeratorDao.java
index 8e6c53a..7a14d1b 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomModeratorDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomModeratorDao.java
@@ -26,8 +26,10 @@ import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 
 import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class RoomModeratorDao {
 	@PersistenceContext

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java
index 6068e03..7de2092 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java
@@ -37,6 +37,7 @@ import org.apache.openmeetings.util.DaoHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
@@ -46,6 +47,7 @@ import org.springframework.transaction.annotation.Transactional;
  * @author swagner
  *
  */
+@Repository
 @Transactional
 public class LdapConfigDao implements IDataProviderDao<LdapConfig> {
 	private static final Logger log = Red5LoggerFactory.getLogger(LdapConfigDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java
index bc37855..61b035c 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java
@@ -28,25 +28,27 @@ import javax.persistence.TypedQuery;
 import org.apache.openmeetings.db.dao.IDataProviderDao;
 import org.apache.openmeetings.db.entity.server.OAuthServer;
 import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class OAuth2Dao implements IDataProviderDao<OAuthServer> {
 
 	public final static String[] searchFields = {"name"};
 	@PersistenceContext
 	private EntityManager em;
-	
+
 	public List<OAuthServer> getActive() {
 		TypedQuery<OAuthServer> query = em.createNamedQuery("getEnabledOAuthServers", OAuthServer.class);
 		return query.getResultList();
 	}
-	
+
 	@Override
 	public OAuthServer get(long id) {
 		return get(Long.valueOf(id));
 	}
-	
+
 	@Override
 	public OAuthServer get(Long id) {
 		TypedQuery<OAuthServer> query = em.createNamedQuery("getOAuthServerById", OAuthServer.class);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java
index b63eb05..61b3b83 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java
@@ -30,8 +30,10 @@ import javax.persistence.PersistenceContext;
 import org.apache.openmeetings.db.entity.server.SOAPLogin;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class SOAPLoginDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(SOAPLoginDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
index 7f547e2..4eff9dd 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
@@ -33,6 +33,7 @@ import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
@@ -40,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
  * @author swagner This Class handles all session management
  *
  */
+@Repository
 @Transactional
 public class SessiondataDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(SessiondataDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
index d74064e..c7dcdf9 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
@@ -30,8 +30,10 @@ import javax.persistence.TypedQuery;
 import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class GroupDao implements IGroupAdminDataProviderDao<Group> {
 	public final static String[] searchFields = {"name"};
@@ -42,7 +44,7 @@ public class GroupDao implements IGroupAdminDataProviderDao<Group> {
 	public Group get(long id) {
 		return get(Long.valueOf(id));
 	}
-	
+
 	@Override
 	public Group get(Long id) {
 		TypedQuery<Group> query = em.createNamedQuery("getGroupById", Group.class);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
index 036c519..1262804 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
@@ -27,8 +27,10 @@ import javax.persistence.TypedQuery;
 import org.apache.openmeetings.db.dao.IDataProviderDao;
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class GroupUserDao implements IDataProviderDao<GroupUser> {
 	@PersistenceContext

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageDao.java
index cd98143..d62883d 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageDao.java
@@ -38,8 +38,10 @@ import org.apache.openmeetings.db.entity.user.PrivateMessage;
 import org.apache.openmeetings.db.entity.user.User;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class PrivateMessageDao implements IDataProviderDao<PrivateMessage> {
 	private static final Logger log = Red5LoggerFactory.getLogger(PrivateMessageDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java
index d9e2b6d..b8d36bb 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java
@@ -32,58 +32,60 @@ import org.apache.openmeetings.db.dao.IDataProviderDao;
 import org.apache.openmeetings.db.entity.user.PrivateMessageFolder;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class PrivateMessageFolderDao implements IDataProviderDao<PrivateMessageFolder> {
 	private static final Logger log = Red5LoggerFactory.getLogger(PrivateMessageFolderDao.class, webAppRootKey);
 	@PersistenceContext
 	private EntityManager em;
-	
+
 	public Long addPrivateMessageFolder(String folderName, Long userId) {
 		try {
 			PrivateMessageFolder privateMessageFolder = new PrivateMessageFolder();
 			privateMessageFolder.setFolderName(folderName);
 			privateMessageFolder.setUserId(userId);
 			privateMessageFolder.setInserted(new Date());
-			
+
 			privateMessageFolder = em.merge(privateMessageFolder);
 			Long privateMessageFolderId = privateMessageFolder.getId();
-			
-			return privateMessageFolderId;	
+
+			return privateMessageFolderId;
 		} catch (Exception e) {
 			log.error("[addPrivateMessageFolder]",e);
 		}
 		return null;
 	}
-	
+
 	public Long addPrivateMessageFolderObj(PrivateMessageFolder folder) {
 		folder.setInserted(new Date());
-		
+
 		folder = em.merge(folder);
 		Long privateMessageFolderId = folder.getId();
-		
-		return privateMessageFolderId;	
+
+		return privateMessageFolderId;
 	}
-	
+
 	@Override
 	public PrivateMessageFolder get(long id) {
 		return get(Long.valueOf(id));
 	}
-	
+
 	@Override
 	public PrivateMessageFolder get(Long id) {
 		String hql = "select c from PrivateMessageFolder c where c.id = :id ";
 
-		TypedQuery<PrivateMessageFolder> query = em.createQuery(hql, PrivateMessageFolder.class); 
+		TypedQuery<PrivateMessageFolder> query = em.createQuery(hql, PrivateMessageFolder.class);
 		query.setParameter("id", id);
-		
+
 		PrivateMessageFolder folder = null;
 		try {
 			folder = query.getSingleResult();
 		} catch (NoResultException ex) {
 		}
-		
+
 		return folder;
 	}
 
@@ -103,14 +105,14 @@ public class PrivateMessageFolderDao implements IDataProviderDao<PrivateMessageF
 		}
 		return folder;
 	}
-	
+
 	public List<PrivateMessageFolder> getPrivateMessageFolderByUserId(Long userId) {
 		try {
 			String hql = "select c from PrivateMessageFolder c where c.userId = :userId ";
 
-			TypedQuery<PrivateMessageFolder> query = em.createQuery(hql, PrivateMessageFolder.class); 
+			TypedQuery<PrivateMessageFolder> query = em.createQuery(hql, PrivateMessageFolder.class);
 			query.setParameter("userId", userId);
-			
+
 			return query.getResultList();
 		} catch (Exception e) {
 			log.error("[getPrivateMessageFolderByUserId]",e);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserContactDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserContactDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserContactDao.java
index e4755c4..e25ec5f 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserContactDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserContactDao.java
@@ -32,8 +32,10 @@ import org.apache.openmeetings.db.entity.user.UserContact;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
+@Repository
 @Transactional
 public class UserContactDao {
 	private static final Logger log = Red5LoggerFactory.getLogger(UserContactDao.class, webAppRootKey);
@@ -49,23 +51,23 @@ public class UserContactDao {
 			userContact.setOwner(userDao.get(ownerId));
 			userContact.setContact(userDao.get(userId));
 			userContact.setPending(pending);
-			
+
 			userContact = update(userContact);
-			
+
 			return userContact;
 		} catch (Exception e) {
 			log.error("[addUserContact]",e);
 		}
 		return null;
 	}
-	
+
 	/**
 	 * @param id
 	 */
 	public void delete(Long id) {
 		em.createNamedQuery("deleteUserContact").setParameter("id", id).executeUpdate();
 	}
-	
+
 	/**
 	 * @param ownerId
 	 * @return rowcount of update
@@ -73,7 +75,7 @@ public class UserContactDao {
 	public Integer deleteAllUserContacts(Long ownerId) {
 		return em.createNamedQuery("deleteAllUserContacts").setParameter("ownerId",ownerId).executeUpdate();
 	}
-	
+
 	public UserContact get(Long userId, Long ownerId) {
 		List<UserContact> ll = em.createNamedQuery("getContactByUserOwner", UserContact.class)
 				.setParameter("userId", userId)
@@ -82,12 +84,12 @@ public class UserContactDao {
 		log.info("number of contacts:: " + (ll == null ? null : ll.size()));
 		return ll != null && ll.size() == 1 ? ll.get(0) : null;
 	}
-	
+
 	public boolean isContact(Long userId, Long ownerId) {
 		UserContact c = get(userId, ownerId);
 		return c == null ? false : !c.isPending();
 	}
-	
+
 	public List<UserContact> get(long ownerId, int first, int count) {
 		TypedQuery<UserContact> q = em.createNamedQuery("getContactsByUser", UserContact.class);
 		q.setParameter("userId", ownerId);
@@ -95,13 +97,13 @@ public class UserContactDao {
 		q.setMaxResults(count);
 		return q.getResultList();
 	}
-	
+
 	public long count(long ownerId) {
 		TypedQuery<Long> q = em.createNamedQuery("countContactsByUser", Long.class);
 		q.setParameter("userId", ownerId);
 		return q.getSingleResult();
 	}
-	
+
 	public List<UserContact> getContactsByUserAndStatus(Long ownerId, boolean pending) {
 		try {
 			TypedQuery<UserContact> query = em.createNamedQuery("getContactsByUserAndStatus", UserContact.class);
@@ -113,7 +115,7 @@ public class UserContactDao {
 		}
 		return null;
 	}
-	
+
 	public UserContact getUserContactByShareCalendar(Long contactId,
 			Boolean shareCalendar, Long userId) {
 		try {
@@ -134,7 +136,7 @@ public class UserContactDao {
 
 	public List<UserContact> getContactsByShareCalendar(Long contactId, Boolean shareCalendar) {
 		try {
-			TypedQuery<UserContact> query = em.createNamedQuery("getContactsByShareCalendar", UserContact.class); 
+			TypedQuery<UserContact> query = em.createNamedQuery("getContactsByShareCalendar", UserContact.class);
 			query.setParameter("contactId", contactId);
 			query.setParameter("shareCalendar", shareCalendar);
 			return query.getResultList();
@@ -143,10 +145,10 @@ public class UserContactDao {
 		}
 		return null;
 	}
-	
+
 	public List<UserContact> getContactRequestsByUserAndStatus(Long userId, boolean pending) {
 		try {
-			TypedQuery<UserContact> query = em.createNamedQuery("getContactRequestsByUserAndStatus", UserContact.class); 
+			TypedQuery<UserContact> query = em.createNamedQuery("getContactRequestsByUserAndStatus", UserContact.class);
 			query.setParameter("userId", userId);
 			query.setParameter("pending", pending);
 			return query.getResultList();
@@ -155,10 +157,10 @@ public class UserContactDao {
 		}
 		return null;
 	}
-	
+
 	public UserContact get(Long id) {
 		try {
-			TypedQuery<UserContact> query = em.createNamedQuery("getUserContactsById", UserContact.class); 
+			TypedQuery<UserContact> query = em.createNamedQuery("getUserContactsById", UserContact.class);
 			query.setParameter("id", id);
 			UserContact userContacts = null;
 			try {
@@ -171,11 +173,11 @@ public class UserContactDao {
 		}
 		return null;
 	}
-	
+
 	public List<UserContact> get() {
 		return em.createNamedQuery("getUserContacts", UserContact.class).getResultList();
 	}
-	
+
 	public Long updateContactStatus(Long id, boolean pending) {
 		try {
 			UserContact uc = get(id);
@@ -187,7 +189,7 @@ public class UserContactDao {
 		}
 		return null;
 	}
-	
+
 	public UserContact update(UserContact c) {
 		if (c.getId() == null) {
 			c.setInserted(new Date());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
index 7b68712..b2f48f6 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/UserDao.java
@@ -64,6 +64,7 @@ import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
@@ -72,6 +73,7 @@ import org.springframework.transaction.annotation.Transactional;
  * @author swagner, solomax, vasya
  *
  */
+@Repository
 @Transactional
 public class UserDao implements IGroupAdminDataProviderDao<User> {
 	private static final Logger log = Red5LoggerFactory.getLogger(UserDao.class, webAppRootKey);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/TimezoneUtil.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/TimezoneUtil.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/TimezoneUtil.java
index 39c36f8..efa2254 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/TimezoneUtil.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/TimezoneUtil.java
@@ -31,7 +31,9 @@ import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Component
 public class TimezoneUtil {
 	private static final Logger log = Red5LoggerFactory.getLogger(TimezoneUtil.class, webAppRootKey);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
index 7b68d30..db88c5a 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
@@ -79,12 +79,14 @@ import org.simpleframework.xml.stream.NodeBuilder;
 import org.simpleframework.xml.stream.OutputNode;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 /**
  *
  * @author sebastianwagner
  *
  */
+@Component
 public class BackupExport {
 	private static final Logger log = Red5LoggerFactory.getLogger(BackupExport.class, webAppRootKey);
 	private static final String BACKUP_COMMENT =

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index c64fd6d..d0210aa 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -77,6 +77,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_SOX
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_FRONTEND;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_OAUTH;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_SOAP;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REMINDER_MESSAGE;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REPLY_TO_ORGANIZER;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
@@ -183,11 +184,13 @@ import org.simpleframework.xml.stream.NodeBuilder;
 import org.simpleframework.xml.transform.RegistryMatcher;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
+@Component
 public class BackupImport {
 	private static final Logger log = Red5LoggerFactory.getLogger(BackupImport.class, webAppRootKey);
 	private static final String LDAP_EXT_TYPE = "LDAP";
@@ -222,6 +225,7 @@ public class BackupImport {
 		outdatedConfigKeys.put("sendEmailWithVerficationCode", CONFIG_EMAIL_VERIFICATION);
 		outdatedConfigKeys.put("swftools_zoom", CONFIG_DOCUMENT_DPI);
 		outdatedConfigKeys.put("swftools_jpegquality", CONFIG_DOCUMENT_QUALITY);
+		outdatedConfigKeys.put("sms.subject", CONFIG_REMINDER_MESSAGE);
 		configTypes.put(CONFIG_REGISTER_FRONTEND, Configuration.Type.bool);
 		configTypes.put(CONFIG_REGISTER_SOAP, Configuration.Type.bool);
 		configTypes.put(CONFIG_REGISTER_OAUTH, Configuration.Type.bool);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 3ef47ff..de8c570 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -66,6 +66,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_FRONTEND;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_OAUTH;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REGISTER_SOAP;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REMINDER_MESSAGE;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REPLY_TO_ORGANIZER;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
@@ -117,7 +118,9 @@ import org.apache.wicket.util.string.StringValue;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Component
 public class ImportInitvalues {
 	private static final Logger log = Red5LoggerFactory.getLogger(ImportInitvalues.class, webAppRootKey);
 
@@ -308,6 +311,7 @@ public class ImportInitvalues {
 		addCfg(list, CONFIG_HEADER_CSP, HEADER_CSP_SELF, Configuration.Type.string, "Value for 'Content-Security-Policy' header (default: default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval';), have to be modified to enable Google analytics site: https://content-security-policy.com/");
 		addCfg(list, CONFIG_EXT_PROCESS_TTL, "" + EXT_PROCESS_TTL, Configuration.Type.number, String.format("Time to live in minutes for external processes such as conversion via ffmpeg (default %s minutes)", EXT_PROCESS_TTL));
 		addCfg(list, CONFIG_MYROOMS_ENABLED, "" + true, Configuration.Type.bool, "Users are allowed to create personal rooms");
+		addCfg(list, CONFIG_REMINDER_MESSAGE, null, Configuration.Type.string, "Reminder message to notify about upcoming appointment, generated message will be used if not set");
 		return list;
 	}
 	public void loadConfiguration(InstallationConfig cfg) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-screenshare/src/main/resources/logback.xml
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/resources/logback.xml b/openmeetings-screenshare/src/main/resources/logback.xml
index 44bfdf4..ead06e1 100644
--- a/openmeetings-screenshare/src/main/resources/logback.xml
+++ b/openmeetings-screenshare/src/main/resources/logback.xml
@@ -25,7 +25,7 @@
 
 	<jmxConfigurator contextName="${current_openmeetings_context_name}" />
 
-	<appender name="FLOG2" class="ch.qos.logback.core.FileAppender">
+	<appender name="FILE" class="ch.qos.logback.core.FileAppender">
 		<File>screensharing.log</File>
 		<Append>false</Append>
 		<Encoding>UTF-8</Encoding>
@@ -35,7 +35,7 @@
 			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %L %c{10} [%t] - %m%n</pattern>
 		</layout>
 	</appender>
-	<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
 		<layout class="ch.qos.logback.classic.PatternLayout">
 			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %L %c{10} [%t] - %m%n</pattern>
 		</layout>
@@ -43,7 +43,7 @@
 	<logger name="org.apache.openmeetings" level="DEBUG"/>
 	<logger name="org.red5.server.net.rtmp.codec.RTMPProtocolDecoder" level="OFF"/>
 	<root level="INFO">
-		<appender-ref ref="FLOG2" />
-		<appender-ref ref="CONSOLE2" />
+		<appender-ref ref="FILE" />
+		<appender-ref ref="CONSOLE" />
 	</root>
 </configuration>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml b/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml
index 4d9caec..bac69ec 100644
--- a/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml
+++ b/openmeetings-server/src/site/xdoc/GeneralConfiguration.xml
@@ -171,27 +171,9 @@
 					<td> 2.1.x, <b> values are changed in 3.0.0</b> </td>
 				</tr>
 				<tr>
-					<td> sms.provider </td>
+					<td> reminder.message </td>
 					<td>  </td>
-					<td> SMS service provider (bulksms.http.1) </td>
-					<td> 2.1.x </td>
-				</tr>
-				<tr>
-					<td> sms.Username </td>
-					<td>  </td>
-					<td> Login for SMS service provider </td>
-					<td> 2.1.x </td>
-				</tr>
-				<tr>
-					<td> sms.Userpass </td>
-					<td>  </td>
-					<td> Password for SMS service provider </td>
-					<td> 2.1.x </td>
-				</tr>
-				<tr>
-					<td> sms.subject </td>
-					<td>  </td>
-					<td> Subject of SMS reminder message </td>
+					<td> Reminder message to notify about upcoming appointment, generated message will be used if not set </td>
 					<td> 2.1.x </td>
 				</tr>
 				<tr>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/28cac665/openmeetings-service/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-service/pom.xml b/openmeetings-service/pom.xml
index 15bb597..2c47fd6 100644
--- a/openmeetings-service/pom.xml
+++ b/openmeetings-service/pom.xml
@@ -43,6 +43,10 @@
 			<version>${wicket.version}</version>
 		</dependency>
 		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-core</artifactId>
+		</dependency>
+		<dependency>
 			<groupId>com.github.caldav4j</groupId>
 			<artifactId>caldav4j</artifactId>
 			<version>0.9-om</version>