diff --git a/allocation-manager/Notification-Manager/Notification-Authenticator/src/main/java/org/apache/airavata/allocation/manager/notification/authenticator/NotificationDetails.java b/allocation-manager/Notification-Manager/Notification-Authenticator/src/main/java/org/apache/airavata/allocation/manager/notification/authenticator/NotificationDetails.java
index c61eb76..12496c5 100644
--- a/allocation-manager/Notification-Manager/Notification-Authenticator/src/main/java/org/apache/airavata/allocation/manager/notification/authenticator/NotificationDetails.java
+++ b/allocation-manager/Notification-Manager/Notification-Authenticator/src/main/java/org/apache/airavata/allocation/manager/notification/authenticator/NotificationDetails.java
@@ -9,26 +9,33 @@
 
 public class NotificationDetails {
 
-	public NotificationInformation getRequestDetails(String projectID) {
-		NotificationInformation result = new NotificationInformation() ;
-		
-		 try {
-			 AllocationManagerServerHandler obj  = new AllocationManagerServerHandler();
-			 //String status =  obj.getAllocationRequestStatus(projectID);
-			 
-			 	List<String>senderList = new ArrayList<String>() ;
-		
-				senderList.add(obj.getAllocationRequestUserName(projectID));
+	public NotificationInformation getRequestDetails(String projectID, String notificationType) {
+
+		NotificationInformation result = new NotificationInformation();
+
+		try {
+			AllocationManagerServerHandler obj = new AllocationManagerServerHandler();
+			List<String> senderList = new ArrayList<String>();
+
+			if (notificationType.equals("NEW_REQUEST") || notificationType.equals("DELETE_REQUEST")) {
+				senderList.add(obj.getAllocationRequestUserEmail(projectID));
 				senderList.add(obj.getAllocationManagerAdminEmail("ADMIN"));
-				
-			//result.setStatus(status);
+
+			} else if (notificationType.equals("ASSIGN_REQUEST")) {
+				senderList = obj.getEmailIdsOfReviewersForRequest(projectID);
+			} else if (notificationType.equals("APPROVE_REQUEST")) {
+				senderList.add(obj.getAllocationRequestUserEmail(projectID));
+			} else if (notificationType.equals("DENY_REQUEST")) {
+				senderList.add(obj.getAllocationRequestUserEmail(projectID));
+			}
+
 			result.setSenderList(senderList);
 
 		} catch (Exception e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
-		
+
 		return result;
 	}
 }
diff --git a/allocation-manager/Notification-Manager/Notification-Receiver/src/main/java/org/apache/airavata/allocation/manager/notification/receiver/NotificationReceiver.java b/allocation-manager/Notification-Manager/Notification-Receiver/src/main/java/org/apache/airavata/allocation/manager/notification/receiver/NotificationReceiver.java
index b07637f..e706639 100644
--- a/allocation-manager/Notification-Manager/Notification-Receiver/src/main/java/org/apache/airavata/allocation/manager/notification/receiver/NotificationReceiver.java
+++ b/allocation-manager/Notification-Manager/Notification-Receiver/src/main/java/org/apache/airavata/allocation/manager/notification/receiver/NotificationReceiver.java
@@ -17,27 +17,26 @@
 	public static void StartsimpleServer() {
 		try {
 
-			// Create a connection factory
 			ConnectionFactory factory = new ConnectionFactory();
-			// Set the host to the location of the RabbitMQ server
 			factory.setHost("localHost");
-			// Open a new connection
 			Connection connection = factory.newConnection();
-
 			Channel channel = connection.createChannel();
-
 			channel.queueDeclare("notify", false, false, false, null);
 			// Comfort logging
 			System.out.println("Waiting for notification");
-
 			Consumer consumer = new DefaultConsumer(channel) {
 				@Override
 				public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
 						byte[] body) throws IOException {
-					String requestID = new String(body, "UTF-8");
+					String request = new String(body, "UTF-8");
 
-					NotificationInformation information = (new NotificationDetails()).getRequestDetails(requestID);
-					(new MailNotification()).sendMail(requestID, information.getStatus(), information.getSenderList());
+					String notificationDetails[] = request.split(",");
+					String projectId = notificationDetails[0];
+					String notificationType = notificationDetails[1];
+
+					NotificationInformation information = (new NotificationDetails()).getRequestDetails(projectId,
+							notificationType);
+					(new MailNotification()).sendMail(projectId, notificationType, information.getSenderList(),projectId);
 
 				}
 			};
diff --git a/allocation-manager/Notification-Manager/Notification-Receiver/src/main/java/org/apache/airavata/allocation/manager/notification/receiver/NotificationSender.java b/allocation-manager/Notification-Manager/Notification-Receiver/src/main/java/org/apache/airavata/allocation/manager/notification/receiver/NotificationSender.java
index 93bf473..d7c272c 100644
--- a/allocation-manager/Notification-Manager/Notification-Receiver/src/main/java/org/apache/airavata/allocation/manager/notification/receiver/NotificationSender.java
+++ b/allocation-manager/Notification-Manager/Notification-Receiver/src/main/java/org/apache/airavata/allocation/manager/notification/receiver/NotificationSender.java
@@ -11,18 +11,14 @@
 
 		try {
 
-			// Create a connection factory
 			ConnectionFactory factory = new ConnectionFactory();
-			// Set the host to the location of the RabbitMQ server
 			factory.setHost("localhost");
-			// Open a new connection
 			Connection connection = factory.newConnection();
-			// Channel is the abstraction for interacting with a queue
 			Channel channel = connection.createChannel();
-			// Create the Queue if it does not exist
 			channel.queueDeclare(QUEUE_NAME, false, false, false, null);
-			// assuming this is the request id send
-			String project_ID = "1001";
+
+			// this is the project id and notification type that is sent 
+			String project_ID = "1234,DENY_REQUEST";
 
 			channel.basicPublish("", QUEUE_NAME, null, project_ID.getBytes());
 
diff --git a/allocation-manager/Notification-Manager/Notification-Receiver/src/main/resources/messages.properties b/allocation-manager/Notification-Manager/Notification-Receiver/src/main/resources/messages.properties
index b490727..0749ff3 100644
--- a/allocation-manager/Notification-Manager/Notification-Receiver/src/main/resources/messages.properties
+++ b/allocation-manager/Notification-Manager/Notification-Receiver/src/main/resources/messages.properties
@@ -1,8 +1,11 @@
-SUBJECT_APPROVED=Request status
-MESSAGE_APPROVED=The request is approved
-SUBJECT_REJECTED=Request status
-MESSAGE_REJECTED=The request is rejected
+SUBJECT_APPROVED=Request is approved.
+MESSAGE_APPROVED=Your allocation request is approved
+SUBJECT_REJECTED=Request is rejected
+MESSAGE_REJECTED=Your allocation request is rejected
 SUBJECT_IN_PROCESS=Request status
 MESSAGE_IN_PROCESS=The new request has been submitted and request is being processed.
-SUBJECT_NEW_REQUEST=Request status
-MESSAGE_NEW_REQUEST=New request is submit
+SUBJECT_NEW_REQUEST=New request
+MESSAGE_NEW_REQUEST=A new request is submitted
+SUBJECT_ASSIGN_REQUEST=New request has been assigned for review
+MESSAGE_ASSIGN_REQUEST=You have been to assigned to review a request
+
diff --git a/allocation-manager/Notification-Manager/Notification-Sender/src/main/java/org/apache/airavata/allocation/manager/notification/sender/EmailNotificationMessage.java b/allocation-manager/Notification-Manager/Notification-Sender/src/main/java/org/apache/airavata/allocation/manager/notification/sender/EmailNotificationMessage.java
index 06a1083..650e0cc 100644
--- a/allocation-manager/Notification-Manager/Notification-Sender/src/main/java/org/apache/airavata/allocation/manager/notification/sender/EmailNotificationMessage.java
+++ b/allocation-manager/Notification-Manager/Notification-Sender/src/main/java/org/apache/airavata/allocation/manager/notification/sender/EmailNotificationMessage.java
@@ -7,7 +7,7 @@
 import org.apache.airavata.allocation.manager.notification.models.NotificationMessage;
 
 public class EmailNotificationMessage {
-	public NotificationMessage getEmailMessage(String status) {
+	public NotificationMessage getEmailMessage(String status, String projectID) {
 		NotificationMessage result = new NotificationMessage();
 		Properties prop = new Properties();
 		InputStream input = null;
@@ -17,21 +17,29 @@
 			prop.load(input2);
 
 			switch (status) {
-			case "APRROVED":
-				result.setMessage(prop.getProperty("SUBJECT_APPROVED"));
-				result.setSubject(prop.getProperty("MESSAGE_APPROVED"));
+			case "APPROVE_REQUEST":
+				result.setMessage(prop.getProperty("SUBJECT_APPROVED")+" "+projectID);
+				result.setSubject(prop.getProperty("MESSAGE_APPROVED")+" "+projectID);
 				break;
-			case "REJECTED":
-				result.setMessage(prop.getProperty("SUBJECT_REJECTED"));
-				result.setSubject(prop.getProperty("MESSAGE_REJECTED"));
+			case "DENY_REQUEST":
+				result.setMessage(prop.getProperty("SUBJECT_REJECTED")+" "+projectID);
+				result.setSubject(prop.getProperty("MESSAGE_REJECTED")+" "+projectID);
 				break;
 			case "IN_PROGRESS":
-				result.setMessage(prop.getProperty("SUBJECT_IN_PROCESS"));
-				result.setSubject(prop.getProperty("MESSAGE_IN_PROCESS"));
+				result.setMessage(prop.getProperty("SUBJECT_IN_PROCESS")+" "+projectID);
+				result.setSubject(prop.getProperty("MESSAGE_IN_PROCESS")+" "+projectID);
 				break;
 			case "NEW_REQUEST":
-				result.setMessage(prop.getProperty("SUBJECT_NEW_REQUEST"));
-				result.setSubject(prop.getProperty("MESSAGE_NEW_REQUEST"));
+				result.setMessage(prop.getProperty("SUBJECT_NEW_REQUEST")+" "+projectID);
+				result.setSubject(prop.getProperty("MESSAGE_NEW_REQUEST")+" "+projectID);
+				break;
+			case "ASSIGN_REQUEST":
+				result.setMessage(prop.getProperty("SUBJECT_ASSIGN_REQUEST")+" "+projectID);
+				result.setSubject(prop.getProperty("MESSAGE_ASSIGN_REQUEST")+" "+projectID);
+				break;
+			case "DELETE_REQUEST":
+				result.setMessage(prop.getProperty("SUBJECT_DELETE_REQUEST")+" "+projectID);
+				result.setSubject(prop.getProperty("MESSAGE_DELETE_REQUEST")+" "+projectID);
 				break;
 			}
 
diff --git a/allocation-manager/Notification-Manager/Notification-Sender/src/main/java/org/apache/airavata/allocation/manager/notification/sender/MailNotification.java b/allocation-manager/Notification-Manager/Notification-Sender/src/main/java/org/apache/airavata/allocation/manager/notification/sender/MailNotification.java
index f0102fb..10539b0 100644
--- a/allocation-manager/Notification-Manager/Notification-Sender/src/main/java/org/apache/airavata/allocation/manager/notification/sender/MailNotification.java
+++ b/allocation-manager/Notification-Manager/Notification-Sender/src/main/java/org/apache/airavata/allocation/manager/notification/sender/MailNotification.java
@@ -11,7 +11,7 @@
 public class MailNotification {
 
 
-	public void sendMail(String requestId, String status, List<String> senderList) {
+	public void sendMail(String requestId, String status, List<String> senderList, String projectId) {
 
 		EmailNotificationMessage message = new EmailNotificationMessage();
 		EmailNotificationConfiguration emailConfiguration = new EmailNotificationConfiguration();
@@ -19,8 +19,8 @@
 		String username = emailConfiguration.getCredentials().getUserName();
 		String password = emailConfiguration.getCredentials().getPassword();
 		
-		String subject = message.getEmailMessage(status).getSubject();
-		String body = message.getEmailMessage(status).getMessage();
+		String subject = message.getEmailMessage(status ,projectId).getSubject();
+		String body = message.getEmailMessage(status, projectId).getMessage();
 		
 		mail( username,  password,  subject,  body,  senderList);
 
@@ -48,5 +48,6 @@
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
+		System.out.println("Mail sent");
 	}
 }
diff --git a/allocation-manager/Notification-Manager/logs/airavata.log.2017-12-02 b/allocation-manager/Notification-Manager/logs/airavata.log.2017-12-02
new file mode 100644
index 0000000..add960f
--- /dev/null
+++ b/allocation-manager/Notification-Manager/logs/airavata.log.2017-12-02
@@ -0,0 +1,1075 @@
+2017-12-02 16:32:07,894 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 16:32:09,334 [pool-1-thread-4] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-02 16:32:09,337 [pool-1-thread-4] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:39)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:16)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 16:38:04,185 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 17:37:16,558 [pool-1-thread-5] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-02 17:37:16,560 [pool-1-thread-5] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:39)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:16)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 17:39:30,454 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 17:39:43,716 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 17:50:49,125 [pool-1-thread-6] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-02 17:50:49,127 [pool-1-thread-6] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:39)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:16)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 17:56:48,880 [main] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 17:56:49,932 [main] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-02 17:56:49,934 [main] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:39)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.main(NotificationDetails.java:15)
+2017-12-02 18:18:48,188 [pool-1-thread-7] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-02 18:18:48,191 [pool-1-thread-7] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:39)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:16)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 18:37:41,789 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,799 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,790 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,793 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,853 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,861 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,879 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,884 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,933 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,833 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,969 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:37:41,979 [AMQP Connection 127.0.0.1:5672] WARN  c.r.c.i.ForgivingExceptionHandler  - An unexpected connection driver error occured (Exception message: Connection reset)
+2017-12-02 18:41:49,320 [pool-1-thread-11] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@68179149 (amq.ctag-RdbvM8GttyUvZP0j5sjDAA) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.mail(MailNotification.java:41)
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.sendMail(MailNotification.java:25)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:40)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:00:02,200 [pool-1-thread-11] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:06:22,622 [pool-1-thread-14] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-02 19:06:22,628 [pool-1-thread-14] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:39)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:16)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:08:04,387 [pool-1-thread-11] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:08:10,436 [pool-1-thread-11] ERROR o.a.a.a.m.s.AllocationManagerServerHandler  - Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.)
+org.apache.openjpa.persistence.PersistenceException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
+	at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
+	at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
+	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
+	at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
+	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:968)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:959)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
+	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.getEntityManager(JPAUtils.java:101)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.execute(AbstractRepository.java:153)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.get(AbstractRepository.java:88)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.getAllocationRequestStatus(AllocationManagerServerHandler.java:127)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:17)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
+	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
+	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
+	at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110)
+	at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
+	... 26 common frames omitted
+Caused by: java.sql.SQLException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
+	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
+	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
+	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
+	... 31 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
+	... 47 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Another instance of Derby may have already booted the database /Users/nikithachettiar/Documents/IU_Fall17/ScienceGateway/Airavata/Forked_SandBox/airavata-sandbox/allocation-manager/Notification-Manager/Notification-Receiver/sharing_catalog.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore$6.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.RawStore.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown Source)
+	... 44 common frames omitted
+2017-12-02 19:08:10,454 [pool-1-thread-11] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@713deb04 (amq.ctag-_ZgerZc_4Q9t1Dy84JEVLg) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:13:33,465 [pool-1-thread-11] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:13:39,227 [pool-1-thread-11] ERROR o.a.a.a.m.s.AllocationManagerServerHandler  - Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+org.apache.openjpa.persistence.PersistenceException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
+	at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
+	at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
+	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
+	at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
+	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:968)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:959)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
+	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.getEntityManager(JPAUtils.java:101)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.execute(AbstractRepository.java:153)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.get(AbstractRepository.java:88)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.getAllocationRequestStatus(AllocationManagerServerHandler.java:127)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:17)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
+	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
+	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
+	at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110)
+	at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
+	... 26 common frames omitted
+Caused by: java.sql.SQLException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
+	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
+	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
+	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
+	... 31 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
+	... 47 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Another instance of Derby may have already booted the database /Users/nikithachettiar/Documents/IU_Fall17/ScienceGateway/Airavata/Forked_SandBox/airavata-sandbox/allocation-manager/Notification-Manager/Notification-Receiver/sharing_catalog.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore$6.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.RawStore.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown Source)
+	... 44 common frames omitted
+2017-12-02 19:20:05,963 [pool-1-thread-11] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:21:13,658 [pool-1-thread-11] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:21:19,479 [pool-1-thread-11] ERROR o.a.a.a.m.s.AllocationManagerServerHandler  - Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+org.apache.openjpa.persistence.PersistenceException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
+	at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
+	at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
+	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
+	at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
+	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:968)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:959)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
+	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.getEntityManager(JPAUtils.java:101)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.execute(AbstractRepository.java:153)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.get(AbstractRepository.java:88)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.getAllocationRequestStatus(AllocationManagerServerHandler.java:127)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:17)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
+	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
+	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
+	at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110)
+	at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
+	... 26 common frames omitted
+Caused by: java.sql.SQLException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
+	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
+	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
+	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
+	... 31 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
+	... 47 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Another instance of Derby may have already booted the database /Users/nikithachettiar/Documents/IU_Fall17/ScienceGateway/Airavata/Forked_SandBox/airavata-sandbox/allocation-manager/Notification-Manager/Notification-Receiver/sharing_catalog.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore$6.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.RawStore.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown Source)
+	... 44 common frames omitted
+2017-12-02 19:22:18,167 [pool-1-thread-11] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:22:23,978 [pool-1-thread-11] ERROR o.a.a.a.m.s.AllocationManagerServerHandler  - Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+org.apache.openjpa.persistence.PersistenceException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
+	at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
+	at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
+	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
+	at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
+	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:968)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:959)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
+	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.getEntityManager(JPAUtils.java:101)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.execute(AbstractRepository.java:153)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.get(AbstractRepository.java:88)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.getAllocationRequestStatus(AllocationManagerServerHandler.java:127)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:17)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
+	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
+	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
+	at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110)
+	at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
+	... 26 common frames omitted
+Caused by: java.sql.SQLException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
+	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
+	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
+	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
+	... 31 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
+	... 47 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Another instance of Derby may have already booted the database /Users/nikithachettiar/Documents/IU_Fall17/ScienceGateway/Airavata/Forked_SandBox/airavata-sandbox/allocation-manager/Notification-Manager/Notification-Receiver/sharing_catalog.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore$6.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.RawStore.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown Source)
+	... 44 common frames omitted
+2017-12-02 19:26:37,068 [pool-1-thread-11] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:26:42,905 [pool-1-thread-11] ERROR o.a.a.a.m.s.AllocationManagerServerHandler  - Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+org.apache.openjpa.persistence.PersistenceException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
+	at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
+	at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
+	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
+	at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
+	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:968)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:959)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
+	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.getEntityManager(JPAUtils.java:101)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.execute(AbstractRepository.java:153)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.get(AbstractRepository.java:88)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.getAllocationRequestStatus(AllocationManagerServerHandler.java:127)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:17)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
+	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
+	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
+	at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110)
+	at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
+	... 26 common frames omitted
+Caused by: java.sql.SQLException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
+	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
+	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
+	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
+	... 31 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
+	... 47 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Another instance of Derby may have already booted the database /Users/nikithachettiar/Documents/IU_Fall17/ScienceGateway/Airavata/Forked_SandBox/airavata-sandbox/allocation-manager/Notification-Manager/Notification-Receiver/sharing_catalog.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore$6.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.RawStore.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown Source)
+	... 44 common frames omitted
+2017-12-02 19:31:21,368 [pool-1-thread-11] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:31:27,445 [pool-1-thread-11] ERROR o.a.a.a.m.s.AllocationManagerServerHandler  - Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.)
+org.apache.openjpa.persistence.PersistenceException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
+	at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
+	at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
+	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
+	at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
+	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:968)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:959)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
+	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.getEntityManager(JPAUtils.java:101)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.execute(AbstractRepository.java:153)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.get(AbstractRepository.java:88)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.getAllocationRequestUserName(AllocationManagerServerHandler.java:150)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:21)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
+	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
+	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
+	at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110)
+	at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
+	... 26 common frames omitted
+Caused by: java.sql.SQLException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
+	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
+	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
+	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
+	... 31 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@18b4aac2, see the next exception for details.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
+	... 47 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Another instance of Derby may have already booted the database /Users/nikithachettiar/Documents/IU_Fall17/ScienceGateway/Airavata/Forked_SandBox/airavata-sandbox/allocation-manager/Notification-Manager/Notification-Receiver/sharing_catalog.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore$6.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.RawStore.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown Source)
+	... 44 common frames omitted
+2017-12-02 19:32:22,414 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:32:28,206 [pool-1-thread-4] ERROR o.a.a.a.m.s.AllocationManagerServerHandler  - Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+org.apache.openjpa.persistence.PersistenceException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:102)
+	at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
+	at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)
+	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:443)
+	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104)
+	at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
+	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:968)
+	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:959)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:638)
+	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
+	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
+	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.getEntityManager(JPAUtils.java:101)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.execute(AbstractRepository.java:153)
+	at org.apache.airavata.allocation.manager.db.repositories.AbstractRepository.get(AbstractRepository.java:88)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.getAllocationRequestUserName(AllocationManagerServerHandler.java:150)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:21)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
+	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
+	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
+	at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110)
+	at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
+	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:91)
+	... 26 common frames omitted
+Caused by: java.sql.SQLException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
+	at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
+	at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
+	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
+	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
+	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
+	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
+	... 31 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Failed to start database 'sharing_catalog' with class loader sun.misc.Launcher$AppClassLoader@2a139a55, see the next exception for details.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
+	... 47 common frames omitted
+Caused by: org.apache.derby.iapi.error.StandardException: Another instance of Derby may have already booted the database /Users/nikithachettiar/Documents/IU_Fall17/ScienceGateway/Airavata/Forked_SandBox/airavata-sandbox/allocation-manager/Notification-Manager/Notification-Receiver/sharing_catalog.
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)
+	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore$6.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.raw.RawStore.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
+	at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)
+	at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source)
+	at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source)
+	at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown Source)
+	... 44 common frames omitted
+2017-12-02 19:36:06,723 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@7840cd98 (amq.ctag-ESWQYgo_b4BjnnuBt20CuA) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.mail(MailNotification.java:41)
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.sendMail(MailNotification.java:25)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:38:31,246 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@18557f7f (amq.ctag-G0ngG-foG5insMxWVfGDgQ) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.mail(MailNotification.java:41)
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.sendMail(MailNotification.java:25)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:42:03,644 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@1f8fafe7 (amq.ctag-gGCPIqATum4uUFMYeJOhwQ) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:42:48,748 [pool-1-thread-15] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-02 19:42:48,751 [pool-1-thread-15] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:39)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:16)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:45:05,221 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@5566f43 (amq.ctag-xYWfqL4XTQhw1dO7POlOWA) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:49:33,051 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:49:33,383 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@13eeadff (amq.ctag-SFkkQcVi5ucmsWJAZAHHkA) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:50:12,121 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:50:12,622 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@2e668de8 (amq.ctag-99tNjInYlcYOACT1K7UdaQ) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:51:04,393 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:51:04,738 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@2c24f1e6 (amq.ctag-T035AsYvLbixIfy7st-LzQ) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:51:50,295 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:51:50,809 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@2c24f1e6 (amq.ctag-6tlkZ_OCC1ylyGy6m3HQMA) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:56:17,795 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:56:18,122 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@51493afd (amq.ctag-MoPLG4Qh7NS-RCSmvfTMKA) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:42)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:57:41,096 [pool-1-thread-4] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-02 19:57:41,584 [pool-1-thread-4] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-02 19:57:41,586 [pool-1-thread-4] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:39)
+	at org.apache.airavata.allocation.manager.notification.authenticator.NotificationDetails.getRequestDetails(NotificationDetails.java:16)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:38)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:57:41,587 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@7e6b4dd0 (amq.ctag-9H4GboyZtpMLVI-Hc9oUOw) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 19:59:11,653 [pool-1-thread-3] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@390d445 (amq.ctag-dJZt_7M23aL0KM0T7ecXaQ) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:39)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 20:01:14,726 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@221a1938 (amq.ctag-1FeZZl1102H0WVYE5BuCpg) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:43)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 20:01:55,461 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@6ac8bfbf (amq.ctag-dPwv0OuXKpEXdyzq3eadiA) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:43)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 20:04:56,592 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@6f76e141 (amq.ctag-f1-j-8OpoRGfbdkCWoiPYA) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:43)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 20:05:59,307 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@18fb5759 (amq.ctag-twaaUgTJReaWyy3_HutSEg) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.mail(MailNotification.java:42)
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.sendMail(MailNotification.java:25)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:44)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 20:11:24,853 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@5a811a04 (amq.ctag-GCk4GYIpWM5aTpybETjm4Q) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.NullPointerException: null
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.mail(MailNotification.java:42)
+	at org.apache.airavata.allocation.manager.notification.sender.MailNotification.sendMail(MailNotification.java:25)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:44)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
+2017-12-02 20:14:28,858 [pool-1-thread-4] ERROR c.r.c.i.ForgivingExceptionHandler  - Consumer org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1@51b33fa2 (amq.ctag-NVp8niAOXpOc8P79-ELdhg) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
+java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
+	at java.util.ArrayList.rangeCheck(ArrayList.java:653)
+	at java.util.ArrayList.get(ArrayList.java:429)
+	at org.apache.airavata.allocation.manager.notification.receiver.NotificationReceiver$1.handleDelivery(NotificationReceiver.java:43)
+	at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
+	at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100)
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+	at java.lang.Thread.run(Thread.java:748)
diff --git a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/db/repositories/UserDetailRepository.java b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/db/repositories/UserDetailRepository.java
index f25fe18..3fff3f1 100755
--- a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/db/repositories/UserDetailRepository.java
+++ b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/db/repositories/UserDetailRepository.java
@@ -19,13 +19,11 @@
 	}
 
 	public UserDetail getAdminDetails() throws Exception {
-		String userType = "ADMIN";
-		String queryString = "SELECT * FROM " + UserDetailEntity.class.getSimpleName() + "WHERE"
-				+ DBConstants.UserDetailTable.USERTYPE + "=" + userType;
 		Map<String, Object> queryParameters = new HashMap<>();
-		queryParameters.put(DBConstants.UserDetailTable.USERTYPE, userType);
-
-		return (UserDetail) select(queryString, queryParameters, 0, -1);
+		String query = "SELECT DISTINCT p from " + UserDetailEntity.class.getSimpleName() + " as p";
+		query += " WHERE ";
+		query += "p." + DBConstants.UserDetailTable.USERTYPE + " ='" + DBConstants.UserType.ADMIN + "'";
+		return select(query, queryParameters, 0, -1).get(0);
 	}
 
 	public List<UserDetail> getAllReviewers() throws Exception {
diff --git a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/server/AllocationManagerServerHandler.java b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/server/AllocationManagerServerHandler.java
index 39f5de7..7ed414e 100755
--- a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/server/AllocationManagerServerHandler.java
+++ b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/server/AllocationManagerServerHandler.java
@@ -37,312 +37,364 @@
 
 public class AllocationManagerServerHandler implements AllocationRegistryService.Iface {
 
-    private final static Logger logger = LoggerFactory.getLogger(AllocationManagerServerHandler.class);
+	private final static Logger logger = LoggerFactory.getLogger(AllocationManagerServerHandler.class);
 
-    public static String OWNER_PERMISSION_NAME = "OWNER";
+	public static String OWNER_PERMISSION_NAME = "OWNER";
 
-    public AllocationManagerServerHandler() throws AllocationManagerException, ApplicationSettingsException, TException, Exception {
-        JPAUtils.initializeDB();
-    }
+	public AllocationManagerServerHandler()
+			throws AllocationManagerException, ApplicationSettingsException, TException, Exception {
+		JPAUtils.initializeDB();
+	}
 
 	@Override
 	public boolean createUser(UserDetail userDetail) throws TException {
 		// TODO Auto-generated method stub
-        try {
-            UserDetail create = (new UserDetailRepository()).create(userDetail);
-            return true;
-        } catch (Exception ex) {
-            logger.error(ex.getMessage(), ex);
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
+		try {
+			UserDetail create = (new UserDetailRepository()).create(userDetail);
+			return true;
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
 	}
-	
-    //Implementing createAllocationRequest method 
-    @Override
-    public String createAllocationRequest(UserAllocationDetail reqDetails) throws AllocationManagerException, TException {
-        try {
-            if ((new UserAllocationDetailRepository()).isExists(reqDetails.getProjectId())) {
-                throw new TException("There exist project with the id");
-            }
-            reqDetails.setStatus(DBConstants.RequestStatus.PENDING);
-            UserAllocationDetail create = (new UserAllocationDetailRepository()).create(reqDetails);
-            return reqDetails.getProjectId();
-        } catch (Exception ex) {
-            logger.error(ex.getMessage(), ex);
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+
+	// Implementing createAllocationRequest method
+	@Override
+	public String createAllocationRequest(UserAllocationDetail reqDetails)
+			throws AllocationManagerException, TException {
+		try {
+			if ((new UserAllocationDetailRepository()).isExists(reqDetails.getProjectId())) {
+				throw new TException("There exist project with the id");
+			}
+			reqDetails.setStatus(DBConstants.RequestStatus.PENDING);
+			UserAllocationDetail create = (new UserAllocationDetailRepository()).create(reqDetails);
+			String projectId =reqDetails.getProjectId();
+			(new NotificationManager()).notificationSender(projectId, "NEW_REQUEST");
+			return projectId;
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
 
 	@Override
 	public boolean deleteAllocationRequest(String projectId) throws TException {
-		 try {
-	            (new UserAllocationDetailRepository()).delete(projectId);
-	            return true;
-	        } catch (Exception ex) {
-	            logger.error(ex.getMessage(), ex);
-	            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-	        }
+		try {
+			(new UserAllocationDetailRepository()).delete(projectId);
+			(new NotificationManager()).notificationSender(projectId, "NEW_REQUEST");
+			return true;
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
 	}
-	
-    @Override
-    public boolean updateAllocationRequest(UserAllocationDetail reqDetails) throws TException {
-        try {
-            if ((new UserAllocationDetailRepository()).update(reqDetails).getProjectId() != null) {
-                return true;
-            }
-        } catch (Exception ex) {
-            logger.error(ex.getMessage(), ex);
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-        return false;
-    }
+
+	@Override
+	public boolean updateAllocationRequest(UserAllocationDetail reqDetails) throws TException {
+		try {
+			if ((new UserAllocationDetailRepository()).update(reqDetails).getProjectId() != null) {
+				return true;
+			}
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+		return false;
+	}
 
 	@Override
 	public UserAllocationDetail getAllocationRequest(String projectId) throws TException {
-		 try {
-	            return (new UserAllocationDetailRepository().get(projectId));
-	        } catch (Exception ex) {
-	            logger.error(ex.getMessage(), ex);
-	            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-	        }
+		try {
+			return (new UserAllocationDetailRepository().get(projectId));
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
 	}
 
-	
-    @Override
-    public boolean isAdmin(String userName) throws AllocationManagerException, TException {
-        try {
-            UserDetail objUser = getUserDetails(userName);
-            if (objUser == null) {
-                throw new IllegalArgumentException();
-            }
-            return objUser.userType.equals(DBConstants.UserType.ADMIN);
-        } catch (Exception ex) {
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+	@Override
+	public boolean isAdmin(String userName) throws AllocationManagerException, TException {
+		try {
+			UserDetail objUser = getUserDetails(userName);
+			if (objUser == null) {
+				throw new IllegalArgumentException();
+			}
+			return objUser.userType.equals(DBConstants.UserType.ADMIN);
+		} catch (Exception ex) {
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
 
-    @Override
-    public boolean isReviewer(String userName) throws AllocationManagerException, TException {
-        try {
-            UserDetail objUser = getUserDetails(userName);
-            if (objUser == null) {
-                throw new IllegalArgumentException();
-            }
-            return objUser.userType.equals(DBConstants.UserType.REVIEWER);
-        } catch (Exception ex) {
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+	@Override
+	public boolean isReviewer(String userName) throws AllocationManagerException, TException {
+		try {
+			UserDetail objUser = getUserDetails(userName);
+			if (objUser == null) {
+				throw new IllegalArgumentException();
+			}
+			return objUser.userType.equals(DBConstants.UserType.REVIEWER);
+		} catch (Exception ex) {
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
 
-    @Override
-    public List<UserAllocationDetail> getAllRequestsForReviewers(String userName) throws AllocationManagerException, TException {
-        List<UserAllocationDetail> userAllocationDetailList = new ArrayList<UserAllocationDetail>();
-        try {
-            if (!isReviewer(userName)) {
-                throw new AllocationManagerException().setMessage("Invalid reviewer id!");
-            }
-            List<ProjectReviewer> projReviewerList = (new ProjectReviewerRepository()).getProjectForReviewer(userName);
-            List<String> projectIds = new ArrayList<String>();
-            for (ProjectReviewer objProj : projReviewerList) {
-            	projectIds.add(objProj.getProjectId());
-            }
-            return new UserAllocationDetailRepository().get(projectIds);
-        } catch (Exception ex) {
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+	@Override
+	public List<UserAllocationDetail> getAllRequestsForReviewers(String userName)
+			throws AllocationManagerException, TException {
+		List<UserAllocationDetail> userAllocationDetailList = new ArrayList<UserAllocationDetail>();
+		try {
+			if (!isReviewer(userName)) {
+				throw new AllocationManagerException().setMessage("Invalid reviewer id!");
+			}
+			List<ProjectReviewer> projReviewerList = (new ProjectReviewerRepository()).getProjectForReviewer(userName);
+			List<String> projectIds = new ArrayList<String>();
+			for (ProjectReviewer objProj : projReviewerList) {
+				projectIds.add(objProj.getProjectId());
+			}
+			return new UserAllocationDetailRepository().get(projectIds);
+		} catch (Exception ex) {
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
 
-    @Override
-    public UserDetail getUserDetails(String userName) throws AllocationManagerException, TException {
-        try {
-            return (new UserDetailRepository()).get(userName);
-        } catch (Exception ex) {
-            logger.error(ex.getMessage(), ex);
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+	@Override
+	public UserDetail getUserDetails(String userName) throws AllocationManagerException, TException {
+		try {
+			return (new UserDetailRepository()).get(userName);
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
 
-    @Override
-    public List<UserAllocationDetail> getAllRequestsForAdmin(String userName) throws TException {
-        List<UserAllocationDetail> userAllocationDetailList = new ArrayList<UserAllocationDetail>();
-        try {
-            if (!isAdmin(userName)) {
-                throw new AllocationManagerException().setMessage("Invalid admin id!");
-            }
-            userAllocationDetailList = new UserAllocationDetailRepository().getAllUserRequests();
-        } catch (Exception ex) {
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-        return userAllocationDetailList;
-    }
+	@Override
+	public List<UserAllocationDetail> getAllRequestsForAdmin(String userName) throws TException {
+		List<UserAllocationDetail> userAllocationDetailList = new ArrayList<UserAllocationDetail>();
+		try {
+			if (!isAdmin(userName)) {
+				throw new AllocationManagerException().setMessage("Invalid admin id!");
+			}
+			userAllocationDetailList = new UserAllocationDetailRepository().getAllUserRequests();
+		} catch (Exception ex) {
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+		return userAllocationDetailList;
+	}
 
-    @Override
-    public boolean assignReviewers(String projectId, String reviewerId, String adminId) throws TException {
-        try {
-            if (!isAdmin(adminId)) {
-                throw new AllocationManagerException().setMessage("Invalid admin id!");
-            }
-            if (!isReviewer(reviewerId)) {
-                throw new AllocationManagerException().setMessage("Invalid reviewer id!");
-            }
-            
-            ProjectReviewer projectReviewer = new ProjectReviewer();
-            projectReviewer.setProjectId(projectId);
-            projectReviewer.setReviewer(reviewerId);
+	@Override
+	public boolean assignReviewers(String projectId, String reviewerId, String adminId) throws TException {
+		try {
+			if (!isAdmin(adminId)) {
+				throw new AllocationManagerException().setMessage("Invalid admin id!");
+			}
+			if (!isReviewer(reviewerId)) {
+				throw new AllocationManagerException().setMessage("Invalid reviewer id!");
+			}
 
-            ProjectReviewer projectReviewerObj = new ProjectReviewerRepository().create(projectReviewer);
-            if (projectReviewerObj.getProjectId() != null) {
-                //Update the status to under review.
-                 //Construct the primary key
-            	UserAllocationDetail userAllocationDetail = new UserAllocationDetailRepository().get(projectId).setStatus(DBConstants.RequestStatus.UNDER_REVIEW);
-                //Updates the request
-                new UserAllocationDetailRepository().update(userAllocationDetail);
-            }
-        } catch (Exception ex) {
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-        return true;
-    }
+			ProjectReviewer projectReviewer = new ProjectReviewer();
+			projectReviewer.setProjectId(projectId);
+			projectReviewer.setReviewer(reviewerId);
 
-    @Override
-    public List<ReviewerAllocationDetail> getAllReviewsForARequest(String projectId) throws TException {
-        List<ReviewerAllocationDetail> reviewerAllocationDetailList = new ArrayList<ReviewerAllocationDetail>();
-        try {
-        	reviewerAllocationDetailList = new ReviewerAllocationDetailRepository().getAllReviewsForARequest(projectId);
-        } catch (Exception ex) {
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-        return reviewerAllocationDetailList;
-    }
+			ProjectReviewer projectReviewerObj = new ProjectReviewerRepository().create(projectReviewer);
+			if (projectReviewerObj.getProjectId() != null) {
+				// Update the status to under review.
+				// Construct the primary key
+				UserAllocationDetail userAllocationDetail = new UserAllocationDetailRepository().get(projectId)
+						.setStatus(DBConstants.RequestStatus.UNDER_REVIEW);
+				// Updates the request
+				new UserAllocationDetailRepository().update(userAllocationDetail);
+			}
+			(new NotificationManager()).notificationSender(projectId, "ASSIGN_REQUEST");
+		} catch (Exception ex) {
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+		return true;
+	}
 
-    @Override
-    public List<UserDetail> getAllReviewers() throws TException {
-        try {
-            return new UserDetailRepository().getAllReviewers();
-        } catch (Exception ex) {
-            java.util.logging.Logger.getLogger(AllocationManagerServerHandler.class.getName()).log(Level.SEVERE, null, ex);
-        }
-        return null;
-    }
+	@Override
+	public List<ReviewerAllocationDetail> getAllReviewsForARequest(String projectId) throws TException {
+		List<ReviewerAllocationDetail> reviewerAllocationDetailList = new ArrayList<ReviewerAllocationDetail>();
+		try {
+			reviewerAllocationDetailList = new ReviewerAllocationDetailRepository().getAllReviewsForARequest(projectId);
+		} catch (Exception ex) {
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+		return reviewerAllocationDetailList;
+	}
 
-    @Override
-    public boolean updateRequestByReviewer(ReviewerAllocationDetail reviewerAllocationDetail) throws TException {
-        try {
-        	ReviewerAllocationDetail reviewerAllocationDetailObj = new ReviewerAllocationDetail();
-        	reviewerAllocationDetailObj = new ReviewerAllocationDetailRepository().isProjectExists(reviewerAllocationDetail.getProjectId(),reviewerAllocationDetail.getUsername());
-        	if (reviewerAllocationDetailObj!=null) {
-        		reviewerAllocationDetail.setId(reviewerAllocationDetailObj.getId());
-        		reviewerAllocationDetailObj = (new ReviewerAllocationDetailRepository()).update(reviewerAllocationDetail);
-            } else {
-            	reviewerAllocationDetailObj = (new ReviewerAllocationDetailRepository()).create(reviewerAllocationDetail);
-            }
-            if (reviewerAllocationDetailObj.getProjectId() != null) {
-                return true;
-            }
-        } catch (Exception ex) {
-            logger.error(ex.getMessage(), ex);
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-        return false;
-    }
+	@Override
+	public List<UserDetail> getAllReviewers() throws TException {
+		try {
+			return new UserDetailRepository().getAllReviewers();
+		} catch (Exception ex) {
+			java.util.logging.Logger.getLogger(AllocationManagerServerHandler.class.getName()).log(Level.SEVERE, null,
+					ex);
+		}
+		return null;
+	}
 
-    /*Method to get a list of all reviewers not yet assigned to a request*/
-    @Override
-    public List<UserDetail> getAllUnassignedReviewersForRequest(String projectId) throws TException {
-        List<UserDetail> userDetailList = getAllReviewers();
-        // TO_DO part
-        List<UserDetail> reviewerList = new ArrayList<UserDetail>();
-        for (UserDetail userDetailObj : userDetailList) {
-            try {
-                if (!new ProjectReviewerRepository().isProjectExists(projectId,userDetailObj.getUsername())) {
-                    reviewerList.add(userDetailObj);
-                }
-            } catch (Exception ex) {
-                java.util.logging.Logger.getLogger(AllocationManagerServerHandler.class.getName()).log(Level.SEVERE, null, ex);
-            }
-        }
-        return reviewerList;
-    }
+	@Override
+	public boolean updateRequestByReviewer(ReviewerAllocationDetail reviewerAllocationDetail) throws TException {
+		try {
+			ReviewerAllocationDetail reviewerAllocationDetailObj = new ReviewerAllocationDetail();
+			reviewerAllocationDetailObj = new ReviewerAllocationDetailRepository()
+					.isProjectExists(reviewerAllocationDetail.getProjectId(), reviewerAllocationDetail.getUsername());
+			if (reviewerAllocationDetailObj != null) {
+				reviewerAllocationDetail.setId(reviewerAllocationDetailObj.getId());
+				reviewerAllocationDetailObj = (new ReviewerAllocationDetailRepository())
+						.update(reviewerAllocationDetail);
+			} else {
+				reviewerAllocationDetailObj = (new ReviewerAllocationDetailRepository())
+						.create(reviewerAllocationDetail);
+			}
+			if (reviewerAllocationDetailObj.getProjectId() != null) {
+				return true;
+			}
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+		return false;
+	}
 
-    /*Method to update the request's start date, end date, status and award allocation on approval*/
-    @Override
-    public boolean approveRequest(String projectId, String adminId, long startDate, long endDate, long awardAllocation) throws TException {
-        try {
-            if (!isAdmin(adminId)) {
-                throw new AllocationManagerException().setMessage("Invalid admin id!");
-            }
-            //Create UserAllocationDetail object to call update method
-            UserAllocationDetail userAllocDetail = new UserAllocationDetail();
-            userAllocDetail = new UserAllocationDetailRepository().get(projectId);
-            userAllocDetail.setStatus(DBConstants.RequestStatus.APPROVED);
-            userAllocDetail.setStartDate(startDate);
-            userAllocDetail.setEndDate(endDate);
-            userAllocDetail.setAwardAllocation(awardAllocation);
+	/* Method to get a list of all reviewers not yet assigned to a request */
+	@Override
+	public List<UserDetail> getAllUnassignedReviewersForRequest(String projectId) throws TException {
+		List<UserDetail> userDetailList = getAllReviewers();
+		// TO_DO part
+		List<UserDetail> reviewerList = new ArrayList<UserDetail>();
+		for (UserDetail userDetailObj : userDetailList) {
+			try {
+				if (!new ProjectReviewerRepository().isProjectExists(projectId, userDetailObj.getUsername())) {
+					reviewerList.add(userDetailObj);
+				}
+			} catch (Exception ex) {
+				java.util.logging.Logger.getLogger(AllocationManagerServerHandler.class.getName()).log(Level.SEVERE,
+						null, ex);
+			}
+		}
+		return reviewerList;
+	}
 
-            //updates the request
-            return updateAllocationRequest(userAllocDetail);
-        } catch (Exception ex) {
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+	/*
+	 * Method to update the request's start date, end date, status and award
+	 * allocation on approval
+	 */
+	@Override
+	public boolean approveRequest(String projectId, String adminId, long startDate, long endDate, long awardAllocation)
+			throws TException {
+		try {
+			if (!isAdmin(adminId)) {
+				throw new AllocationManagerException().setMessage("Invalid admin id!");
+			}
+			// Create UserAllocationDetail object to call update method
+			UserAllocationDetail userAllocDetail = new UserAllocationDetail();
+			userAllocDetail = new UserAllocationDetailRepository().get(projectId);
+			userAllocDetail.setStatus(DBConstants.RequestStatus.APPROVED);
+			userAllocDetail.setStartDate(startDate);
+			userAllocDetail.setEndDate(endDate);
+			userAllocDetail.setAwardAllocation(awardAllocation);
+			
+			(new NotificationManager()).notificationSender(projectId, "APPROVE_REQUEST");
+			
+			// updates the request
+			return updateAllocationRequest(userAllocDetail);
+		} catch (Exception ex) {
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
 
-    /*Method to update the request status to rejected on reject of a request*/
-    @Override
-    public boolean rejectRequest(String projectId, String adminId) throws TException {
-        try {
-            if (!isAdmin(adminId)) {
-                throw new AllocationManagerException().setMessage("Invalid admin id!");
-            }
-        
-            //Create UserAllocationDetail object to call update method
-            UserAllocationDetail userAllocDetail = new UserAllocationDetail();
-            userAllocDetail = new UserAllocationDetailRepository().get(projectId);
-            userAllocDetail.setStatus(DBConstants.RequestStatus.REJECTED);
-            
-            //Updates the request
-            return updateAllocationRequest(userAllocDetail);
-        } catch (Exception ex) {
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
-    
-    @Override
+	/* Method to update the request status to rejected on reject of a request */
+	@Override
+	public boolean rejectRequest(String projectId, String adminId) throws TException {
+		try {
+			if (!isAdmin(adminId)) {
+				throw new AllocationManagerException().setMessage("Invalid admin id!");
+			}
+
+			// Create UserAllocationDetail object to call update method
+			UserAllocationDetail userAllocDetail = new UserAllocationDetail();
+			userAllocDetail = new UserAllocationDetailRepository().get(projectId);
+			userAllocDetail.setStatus(DBConstants.RequestStatus.REJECTED);
+
+			// Updates the request
+			(new NotificationManager()).notificationSender(projectId, "DENY_REQUEST");
+			return updateAllocationRequest(userAllocDetail);
+		} catch (Exception ex) {
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
+
+	@Override
 	public String getAllocationRequestStatus(String projectId) throws TException {
-		 try {
-	            return (new UserAllocationDetailRepository().get(projectId).getStatus());
-	        } catch (Exception ex) {
-	            logger.error(ex.getMessage(), ex);
-	            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-	        }
+		try {
+			return (new UserAllocationDetailRepository().get(projectId).getStatus());
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
 	}
 
-    @Override
-    public String getAllocationRequestUserEmail(String projectId) throws TException {
-        try {
-            return (new UserDetailRepository()).get(projectId).getEmail();
-        } catch (Exception ex) {
-            logger.error(ex.getMessage(), ex);
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+	@Override
+	public String getAllocationRequestUserEmail(String projectId) throws TException {
+		try {
+			String username = getAllocationRequestUserName(projectId);
+			return ((new UserDetailRepository()).get(username)).getEmail();
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
 
-    @Override
-    public String getAllocationRequestUserName(String projectId) throws org.apache.thrift.TException {
-        try {
-        	return (new UserDetailRepository()).get(projectId).getUsername();
-        } catch (Exception ex) {
-            logger.error(ex.getMessage(), ex);
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+	@Override
+	public String getAllocationRequestUserName(String projectId) throws org.apache.thrift.TException {
+		try {
+			return ((new UserAllocationDetailRepository()).get(projectId)).getUsername();
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
 
-    @Override
-    public String getAllocationManagerAdminEmail(String userType) throws TException {
-        try {
-            return (new UserDetailRepository()).getAdminDetails().getEmail();
-        } catch (Exception ex) {
-            logger.error(ex.getMessage(), ex);
-            throw new AllocationManagerException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-        }
-    }
+	@Override
+	public String getAllocationManagerAdminEmail(String userType) throws TException {
+		try {
+			return (new UserDetailRepository()).getAdminDetails().getEmail();
+		} catch (Exception ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new AllocationManagerException()
+					.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+		}
+	}
+
+	public List<String> getEmailIdsOfReviewersForRequest(String projectId) {
+		List<String> reviewerEmailList = new ArrayList<>();
+		try {
+			for (ReviewerAllocationDetail s : getAllReviewsForARequest(projectId)) {
+				reviewerEmailList.add(getUserDetails(s.getUsername()).getEmail());
+			}
+		} catch (TException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return reviewerEmailList;
+	}
 }
diff --git a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/server/TestServer.java b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/server/TestServer.java
index 5ceb4a9..577224b 100755
--- a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/server/TestServer.java
+++ b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-server/src/main/java/org/apache/airavata/allocation/manager/server/TestServer.java
@@ -13,7 +13,7 @@
 
  public static void StartsimpleServer(AllocationRegistryService.Processor<AllocationManagerServerHandler> processor) {
   try {
-   TServerTransport serverTransport = new TServerSocket(9030);
+   TServerTransport serverTransport = new TServerSocket(9040);
    TServer server = new TSimpleServer(
      new Args(serverTransport).processor(processor));
 
diff --git a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/NotificationManager.java b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/NotificationManager.java
index 2f9b5fa..59e6f91 100644
--- a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/NotificationManager.java
+++ b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/NotificationManager.java
@@ -8,23 +8,18 @@
 
 	private final static String QUEUE_NAME = "notify";
 
-	public void notificationSender(String projectID) {
-
+	public void notificationSender(String projectID, String notificationType) {
 		try {
 
-			// Create a connection factory
 			ConnectionFactory factory = new ConnectionFactory();
-			// Set the host to the location of the RabbitMQ server
 			factory.setHost("localhost");
-			// Open a new connection
 			Connection connection = factory.newConnection();
-			// Channel is the abstraction for interacting with a queue
 			Channel channel = connection.createChannel();
-			// Create the Queue if it does not exist
 			channel.queueDeclare(QUEUE_NAME, false, false, false, null);
-			// assuming this is the request id send
-			String project_ID = projectID;
 
+			// this is the project id and notification type that is sent 
+			String project_ID = projectID+","+notificationType;
+			
 			channel.basicPublish("", QUEUE_NAME, null, project_ID.getBytes());
 
 			System.out.println(" [x] Sent the request");
diff --git a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/NotificationTestClient.java b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/NotificationTestClient.java
new file mode 100644
index 0000000..8ab514d
--- /dev/null
+++ b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/NotificationTestClient.java
@@ -0,0 +1,114 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.apache.airavata.allocation.manager.client;
+
+import java.util.List;
+import org.apache.airavata.allocation.manager.models.ReviewerAllocationDetail;
+import org.apache.thrift.TException;
+import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TProtocol;
+import org.apache.thrift.transport.TSocket;
+import org.apache.thrift.transport.TTransport;
+import org.apache.thrift.transport.TTransportException;
+import org.apache.airavata.allocation.manager.models.UserAllocationDetail;
+import org.apache.airavata.allocation.manager.models.UserDetail;
+import org.apache.airavata.allocation.manager.service.cpi.AllocationRegistryService;
+
+public class NotificationTestClient {
+
+    public static void main(String[] args) {
+
+        try {
+            TTransport transport;
+
+            transport = new TSocket("localhost", 9040);
+            transport.open();
+
+            TProtocol protocol = new TBinaryProtocol(transport);
+            AllocationRegistryService.Client client = new AllocationRegistryService.Client(protocol);
+            System.out.println("Started client");
+            
+//            System.out.println("Testing createAllocationRequest() ");
+//
+//            UserAllocationDetail requestDetails = new UserAllocationDetail();
+//            requestDetails.setProjectId("1115");
+//            requestDetails.setUsername("nikitha");
+//            requestDetails.setRequestedDate(101L);
+//            requestDetails.setTitle("Test");
+//            requestDetails.setProjectDescription("Test");
+//            requestDetails.setTypeOfAllocation("Comm");
+//            requestDetails.setStatus("pending");
+//
+//            System.out.println(client.createAllocationRequest(requestDetails));
+
+//            UserAllocationDetail rDetails1 = new UserAllocationDetail();
+//            rDetails1.setProjectId("1234");
+//            rDetails1.setUsername("madrina");
+//            rDetails1.setRequestedDate(101L);
+//            rDetails1.setTitle("Test");
+//            rDetails1.setProjectDescription("Test");
+//            rDetails1.setTypeOfAllocation("Comm");
+//            rDetails1.setStatus("pending");
+//
+//            System.out.println(client.createAllocationRequest(rDetails1));
+//            
+//            System.out.println("######################");
+//            
+//            System.out.println("Testing deleteAllocationRequest() ");
+//
+//            System.out.println(client.deleteAllocationRequest("123456"));
+//            
+//            System.out.println("######################");
+//            
+//            System.out.println("Testing assignReviewers() ");
+//
+//            System.out.println(client.assignReviewers("123456", "reviewer1", "admin"));
+//            System.out.println(client.assignReviewers("123456", "reviewer2", "admin"));
+            System.out.println(client.assignReviewers("1234", "reviewer2", "admin"));
+            System.out.println(client.assignReviewers("1234", "reviewer3", "admin"));
+//            
+//            System.out.println("######################");
+//
+//
+//
+//            System.out.println("Testing updateRequestByReviewer() ");
+//            ReviewerAllocationDetail reviewerAllocationDetail = new ReviewerAllocationDetail();
+//            reviewerAllocationDetail.setProjectId("123456");
+//            reviewerAllocationDetail.setUsername("reviewer2");
+//            reviewerAllocationDetail.setMaxMemoryPerCpu(15L);
+//            System.out.println(client.updateRequestByReviewer(reviewerAllocationDetail));
+//
+//            ReviewerAllocationDetail reviewerAllocationDetail1 = new ReviewerAllocationDetail();
+//            reviewerAllocationDetail1.setProjectId("123456");
+//            reviewerAllocationDetail1.setUsername("reviewer1");
+//            reviewerAllocationDetail1.setMaxMemoryPerCpu(5L);
+//            System.out.println(client.updateRequestByReviewer(reviewerAllocationDetail1));
+//            
+//
+//
+            System.out.println("Testing approveRequest() ");
+
+            System.out.println(client.approveRequest("1234", "admin", 1l, 2l, 50l));
+//            
+//            System.out.println("######################");
+//
+            System.out.println("Testing rejectRequest() ");
+
+            System.out.println(client.rejectRequest("1234", "admin"));
+//            
+//            System.out.println("######################");
+
+            transport.close();
+        } catch (TTransportException e) {
+            e.printStackTrace();
+        } catch (TException x) {
+            x.printStackTrace();
+        } finally {
+            //transport.close();
+        }
+    }
+
+}
diff --git a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/testClient.java b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/testClient.java
index 15d76af..f3f5c15 100755
--- a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/testClient.java
+++ b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/client/testClient.java
@@ -24,7 +24,7 @@
         try {
             TTransport transport;
 
-            transport = new TSocket("localhost", 9030);
+            transport = new TSocket("localhost", 9040);
             transport.open();
 
             TProtocol protocol = new TBinaryProtocol(transport);
diff --git a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/service/cpi/AllocationRegistryService.java b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/service/cpi/AllocationRegistryService.java
index a95c750..debb4f6 100644
--- a/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/service/cpi/AllocationRegistryService.java
+++ b/allocation-manager/airavata-allocation-manager/airavata-allocation-manager-stubs/src/main/java/org/apache/airavata/allocation/manager/service/cpi/AllocationRegistryService.java
@@ -6,6 +6,8 @@
  */
 package org.apache.airavata.allocation.manager.service.cpi;
 
+import org.apache.airavata.allocation.manager.client.NotificationManager;
+
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
 @javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.10.0)")
 public class AllocationRegistryService {
@@ -442,6 +444,7 @@
     public boolean assignReviewers(java.lang.String projectId, java.lang.String reviewerId, java.lang.String adminId) throws org.apache.thrift.TException
     {
       send_assignReviewers(projectId, reviewerId, adminId);
+      (new NotificationManager()).notificationSender(projectId, "ASSIGN_REQUEST");
       return recv_assignReviewers();
     }
 
@@ -650,6 +653,7 @@
     public boolean approveRequest(java.lang.String projectId, java.lang.String adminId, long startDate, long endDate, long awardAllocation) throws org.apache.thrift.TException
     {
       send_approveRequest(projectId, adminId, startDate, endDate, awardAllocation);
+      (new NotificationManager()).notificationSender(projectId, "APPROVE_REQUEST");
       return recv_approveRequest();
     }
 
@@ -677,6 +681,7 @@
     public boolean rejectRequest(java.lang.String projectId, java.lang.String adminId) throws org.apache.thrift.TException
     {
       send_rejectRequest(projectId, adminId);
+      (new NotificationManager()).notificationSender(projectId, "DENY_REQUEST");
       return recv_rejectRequest();
     }
 
diff --git a/allocation-manager/airavata-allocation-manager/logs/airavata.log.2017-12-03 b/allocation-manager/airavata-allocation-manager/logs/airavata.log.2017-12-03
new file mode 100644
index 0000000..ce51078
--- /dev/null
+++ b/allocation-manager/airavata-allocation-manager/logs/airavata.log.2017-12-03
@@ -0,0 +1,12 @@
+2017-12-03 00:37:00,058 [main] INFO  o.a.a.c.u.ApplicationSettings  - Settings loaded from jar:file:/Users/nikithachettiar/.m2/repository/org/apache/airavata/airavata-server-configuration/0.17-SNAPSHOT/airavata-server-configuration-0.17-SNAPSHOT.jar!/airavata-server.properties
+2017-12-03 00:37:01,222 [main] INFO  o.a.a.a.m.d.u.DatabaseCreator  - Script file not found at database_scripts/sharing-registry-derby.sql. Uses default database script file
+2017-12-03 00:37:01,226 [main] ERROR o.a.a.a.m.db.utils.JPAUtils  - null
+java.lang.NullPointerException: null
+	at java.io.Reader.<init>(Reader.java:78)
+	at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.executeSQLScript(DatabaseCreator.java:272)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createDatabase(DatabaseCreator.java:237)
+	at org.apache.airavata.allocation.manager.db.utils.DatabaseCreator.createRegistryDatabase(DatabaseCreator.java:65)
+	at org.apache.airavata.allocation.manager.db.utils.JPAUtils.initializeDB(JPAUtils.java:121)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerServerHandler.<init>(AllocationManagerServerHandler.java:40)
+	at org.apache.airavata.allocation.manager.server.AllocationManagerAdminServer.main(AllocationManagerAdminServer.java:33)
