Adding user to their own contacts, reusing one database transaction
Fixes #15
This commit is contained in:
		@@ -44,6 +44,10 @@ public class Startup {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		server.start();
 | 
							server.start();
 | 
				
			||||||
		server.getSocketProcessor().registerSocketIdListener(ConnectionManager.getInstance());
 | 
							server.getSocketProcessor().registerSocketIdListener(ConnectionManager.getInstance());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							System.out.println("Press any key to stop the server...");
 | 
				
			||||||
 | 
							System.in.read();
 | 
				
			||||||
 | 
							System.exit(0);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static void initializeCurrentMessageId() {
 | 
						private static void initializeCurrentMessageId() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ package envoy.server.database;
 | 
				
			|||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.persistence.EntityManager;
 | 
					import javax.persistence.EntityManager;
 | 
				
			||||||
 | 
					import javax.persistence.EntityTransaction;
 | 
				
			||||||
import javax.persistence.Persistence;
 | 
					import javax.persistence.Persistence;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import envoy.server.data.ConfigItem;
 | 
					import envoy.server.data.ConfigItem;
 | 
				
			||||||
@@ -19,6 +20,9 @@ import envoy.server.data.User;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
public class PersistenceManager {
 | 
					public class PersistenceManager {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private final EntityManager		entityManager	= Persistence.createEntityManagerFactory("envoy").createEntityManager();
 | 
				
			||||||
 | 
						private final EntityTransaction	transaction		= entityManager.getTransaction();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static final PersistenceManager persistenceManager = new PersistenceManager();
 | 
						private static final PersistenceManager persistenceManager = new PersistenceManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -26,7 +30,10 @@ public class PersistenceManager {
 | 
				
			|||||||
	 *
 | 
						 *
 | 
				
			||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	private PersistenceManager() {}
 | 
						private PersistenceManager() {
 | 
				
			||||||
 | 
							transaction.begin();
 | 
				
			||||||
 | 
							Runtime.getRuntime().addShutdownHook(new Thread(() -> transaction.commit()));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @return the {@link PersistenceManager} singleton
 | 
						 * @return the {@link PersistenceManager} singleton
 | 
				
			||||||
@@ -34,8 +41,6 @@ public class PersistenceManager {
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static PersistenceManager getPersistenceManager() { return persistenceManager; }
 | 
						public static PersistenceManager getPersistenceManager() { return persistenceManager; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private EntityManager entityManager = Persistence.createEntityManagerFactory("envoy").createEntityManager();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Adds a {@link User} to the database.
 | 
						 * Adds a {@link User} to the database.
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
@@ -43,9 +48,8 @@ public class PersistenceManager {
 | 
				
			|||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void addUser(User User) {
 | 
						public void addUser(User User) {
 | 
				
			||||||
		entityManager.getTransaction().begin();
 | 
					 | 
				
			||||||
		entityManager.persist(User);
 | 
							entityManager.persist(User);
 | 
				
			||||||
		entityManager.getTransaction().commit();
 | 
							entityManager.flush();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -55,9 +59,8 @@ public class PersistenceManager {
 | 
				
			|||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void addMessage(Message message) {
 | 
						public void addMessage(Message message) {
 | 
				
			||||||
		entityManager.getTransaction().begin();
 | 
					 | 
				
			||||||
		entityManager.persist(message);
 | 
							entityManager.persist(message);
 | 
				
			||||||
		entityManager.getTransaction().commit();
 | 
							entityManager.flush();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -67,9 +70,8 @@ public class PersistenceManager {
 | 
				
			|||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void addConfigItem(ConfigItem configItem) {
 | 
						public void addConfigItem(ConfigItem configItem) {
 | 
				
			||||||
		entityManager.getTransaction().begin();
 | 
					 | 
				
			||||||
		entityManager.persist(configItem);
 | 
							entityManager.persist(configItem);
 | 
				
			||||||
		entityManager.getTransaction().commit();
 | 
							entityManager.flush();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -79,9 +81,8 @@ public class PersistenceManager {
 | 
				
			|||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void updateUser(User user) {
 | 
						public void updateUser(User user) {
 | 
				
			||||||
		entityManager.getTransaction().begin();
 | 
					 | 
				
			||||||
		entityManager.merge(user);
 | 
							entityManager.merge(user);
 | 
				
			||||||
		entityManager.getTransaction().commit();
 | 
							entityManager.flush();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -91,9 +92,8 @@ public class PersistenceManager {
 | 
				
			|||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void updateMessage(Message message) {
 | 
						public void updateMessage(Message message) {
 | 
				
			||||||
		entityManager.getTransaction().begin();
 | 
					 | 
				
			||||||
		entityManager.merge(message);
 | 
							entityManager.merge(message);
 | 
				
			||||||
		entityManager.getTransaction().commit();
 | 
							entityManager.flush();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -103,9 +103,8 @@ public class PersistenceManager {
 | 
				
			|||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void updateConfigItem(ConfigItem configItem) {
 | 
						public void updateConfigItem(ConfigItem configItem) {
 | 
				
			||||||
		entityManager.getTransaction().begin();
 | 
					 | 
				
			||||||
		entityManager.merge(configItem);
 | 
							entityManager.merge(configItem);
 | 
				
			||||||
		entityManager.getTransaction().commit();
 | 
							entityManager.flush();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -115,9 +114,8 @@ public class PersistenceManager {
 | 
				
			|||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void deleteUser(User user) {
 | 
						public void deleteUser(User user) {
 | 
				
			||||||
		entityManager.getTransaction().begin();
 | 
					 | 
				
			||||||
		entityManager.remove(user);
 | 
							entityManager.remove(user);
 | 
				
			||||||
		entityManager.getTransaction().commit();
 | 
							entityManager.flush();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -127,9 +125,8 @@ public class PersistenceManager {
 | 
				
			|||||||
	 * @since Envoy Server Standalone v0.1-alpha
 | 
						 * @since Envoy Server Standalone v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void deleteMessage(Message message) {
 | 
						public void deleteMessage(Message message) {
 | 
				
			||||||
		entityManager.getTransaction().begin();
 | 
					 | 
				
			||||||
		entityManager.remove(message);
 | 
							entityManager.remove(message);
 | 
				
			||||||
		entityManager.getTransaction().commit();
 | 
							entityManager.flush();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@ public class ObjectMessageProcessor implements IMessageProcessor {
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	public ObjectMessageProcessor(Set<ObjectProcessor<?>> processors) { this.processors = processors; }
 | 
						public ObjectMessageProcessor(Set<ObjectProcessor<?>> processors) { this.processors = processors; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@SuppressWarnings("unchecked")
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void process(Message message, WriteProxy writeProxy) {
 | 
						public void process(Message message, WriteProxy writeProxy) {
 | 
				
			||||||
		try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) {
 | 
							try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,6 +54,7 @@ public class LoginCredentialProcessor implements ObjectProcessor<LoginCredential
 | 
				
			|||||||
		// Create contacts
 | 
							// Create contacts
 | 
				
			||||||
		Contacts contacts = new Contacts(user.getId(),
 | 
							Contacts contacts = new Contacts(user.getId(),
 | 
				
			||||||
				user.getContacts().stream().map(envoy.server.data.User::toCommonUser).collect(Collectors.toList()));
 | 
									user.getContacts().stream().map(envoy.server.data.User::toCommonUser).collect(Collectors.toList()));
 | 
				
			||||||
 | 
							contacts.getContacts().add(user.toCommonUser());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Complete handshake
 | 
							// Complete handshake
 | 
				
			||||||
		System.out.println("Sending user...");
 | 
							System.out.println("Sending user...");
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user