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)
