Switched to merge over persist and update

This commit is contained in:
Norbi Peti 2016-08-01 13:46:29 +02:00
parent a3d5f290a6
commit 1a1772fabf
8 changed files with 49 additions and 61 deletions

View file

@ -49,6 +49,7 @@ body {
height: -moz-calc(100% - 50px);
height: -webkit-calc(100% - 50px);
height: calc(100% - 50px);
overflow: auto;
}
html, body {

View file

@ -116,7 +116,7 @@ public class IOHelper {
// provider.SetValues(() ->
// user.setSessionid(UUID.randomUUID().toString()));
user.setSessionid(UUID.randomUUID().toString());
provider.save(user);
user = provider.save(user);
ZonedDateTime expiretime = ZonedDateTime.now(ZoneId.of("GMT")).plus(Period.of(2, 0, 0));
exchange.getResponseHeaders().add("Set-Cookie",
"user_id=" + user.getId() + "; expires=" + expiretime.format(DateTimeFormatter.RFC_1123_DATE_TIME));

View file

@ -38,44 +38,42 @@ public class Main {
user2.setName("Teszt"); // TODO:
// http://www.journaldev.com/3524/spring-hibernate-integration-example-tutorial
user2.setEmail("test2@test.com");
user2.getContacts().add(user);
provider.save(user);
List<User> users = provider.getUsers();
user = users.get(0);
user = provider.save(user);
user2 = provider.save(user2);
user.getContacts().add(user2);
provider.save(user2);
users = provider.getUsers();
user2 = users.get(1);
LogManager.getLogger().log(Level.DEBUG, users);
user2.getContacts().add(user);
LogManager.getLogger().log(Level.DEBUG, "1st's contact: " + user.getContacts().get(0));
LogManager.getLogger().log(Level.DEBUG, "2nd's contact: " + user2.getContacts().get(0));
Conversation convo = new Conversation();
//convo.getUsers().add(user);
//user.getConversations().add(convo);
//convo.getUsers().add(user2);
//user2.getConversations().add(convo); //TODO: Fix duplicate
Conversation conversation = new Conversation();
conversation = provider.save(conversation);
conversation.getUsers().add(user);
user.getConversations().add(conversation);
LogManager.getLogger().debug("User: " + user);
conversation.getUsers().add(user2);
LogManager.getLogger().debug("User2: " + user2);
user2.getConversations().add(conversation); // TODO: Fix
// duplicate
// key constraint
Message msg = new Message();
msg.setSender(user);
msg.setTime(new Date());
msg.setMessage("Teszt 1");
convo.getMesssages().add(msg);
conversation.getMesssages().add(msg);
Message msg2 = new Message();
msg2.setSender(user2);
msg2.setTime(new Date());
msg2.setMessage("Teszt 2");
convo.getMesssages().add(msg2);
provider.save(convo);
provider.save(user);
provider.save(user2);
User loggedinuser = new User();
loggedinuser.setName("NorbiPeti");
loggedinuser.setSessionid("093b1395-8c31-4f3b-ba67-828a755af92e");
loggedinuser.setEmail("sznp@asd.com");
convo.getUsers().add(loggedinuser);
loggedinuser.getConversations().add(convo);
provider.save(loggedinuser);
provider.save(convo);
conversation.getMesssages().add(msg2);
// provider.save(user);
// provider.save(user2);
/*
* User loggedinuser = new User(); provider.save(loggedinuser);
* loggedinuser.setName("NorbiPeti"); loggedinuser.setSessionid(
* "093b1395-8c31-4f3b-ba67-828a755af92e");
* loggedinuser.setEmail("sznp@asd.com");
* conversation.getUsers().add(loggedinuser);
* loggedinuser.getConversations().add(conversation);
*/
}
LogManager.getLogger().log(Level.INFO, "Starting webserver...");
HttpServer server = HttpServer.create(new InetSocketAddress(InetAddress.getLocalHost(), 8080), 10);

View file

@ -13,24 +13,17 @@ import io.github.norbipeti.chat.server.db.domain.*;
public class DataProvider implements AutoCloseable {
private EntityManagerFactory emf;
private EntityManager em;
public DataProvider() {
emf = Persistence.createEntityManagerFactory("ChatServerPU");
em = emf.createEntityManager();
em.getTransaction().begin();
}
public <T extends ChatDatabaseEntity> void save(T object) {
EntityManager em = null;
try {
em = emf.createEntityManager();
em.getTransaction().begin();
Session s = em.unwrap(Session.class);
s.saveOrUpdate(object);
em.persist(object);
em.getTransaction().commit();
} finally {
em.close();
}
public <T extends ChatDatabaseEntity> T save(T object) {
T obj = em.merge(object);
return obj;
}
public List<User> getUsers() {
@ -46,21 +39,15 @@ public class DataProvider implements AutoCloseable {
}
private <T> List<T> get(Class<T> cl) {
EntityManager em = emf.createEntityManager();
TypedQuery<T> query = em.createQuery("SELECT x FROM " + cl.getSimpleName() + " x", cl);
List<T> results = query.getResultList();
Hibernate.initialize(results);
em.close();
return results;
}
public void removeUser(User user) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
User managedUser = em.find(User.class, user.getId());
em.remove(managedUser);
em.getTransaction().commit();
em.close();
}
public User getUser(Long id) {
@ -68,32 +55,28 @@ public class DataProvider implements AutoCloseable {
}
private <T> T get(Class<T> cl, Long id) {
EntityManager em = emf.createEntityManager();
T result = em.find(cl, id);
em.close();
return result;
}
@Deprecated
public void SetValues(Runnable action) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
action.run();
em.flush();
em.getTransaction().commit();
em.close();
}
@Override
public void close() {
if (em != null) {
em.flush();
em.close();
}
if (emf != null)
emf.close();
}
public boolean isEntityManaged(Object entity) {
EntityManager em = emf.createEntityManager();
boolean ret = em.contains(entity);
em.close();
return ret;
}
}

View file

@ -23,7 +23,10 @@ public class Conversation extends ChatDatabaseEntity {
// inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName =
// "id", unique = false), uniqueConstraints = @UniqueConstraint(name =
// "USER_CONV_UN", columnNames = {"user_id", "conversation_id" }))
@JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(name = "conversation_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"))
// @JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(name =
// "conversation_id", referencedColumnName = "id"), inverseJoinColumns =
// @JoinColumn(name = "user_id", referencedColumnName = "id"))
@JoinTable(name = "User_Conversation")
private Set<User> users;
public List<Message> getMesssages() {

View file

@ -11,12 +11,12 @@ public class Message extends ChatDatabaseEntity {
@Column(name = "id", unique = true, nullable = false)
private Long id;
@ManyToOne
//@JoinTable(name="user_message")
// @JoinTable(name="user_message")
private User sender;
private Date time;
private String message;
@ManyToOne(fetch = FetchType.EAGER)
//@JoinTable(name="conversation_message")
// @JoinTable(name="conversation_message")
private Conversation conversation;
public User getSender() {

View file

@ -18,6 +18,7 @@ public class User extends ChatDatabaseEntity {
private String email;
private String password;
@ElementCollection(fetch = FetchType.EAGER)
@ManyToMany(cascade = CascadeType.ALL)
private List<User> contacts;
private String salt;
// @Column(columnDefinition = "CHAR(16) FOR BIT DATA")
@ -27,7 +28,10 @@ public class User extends ChatDatabaseEntity {
// @ManyToMany(fetch = FetchType.EAGER, mappedBy = "users")
@ManyToMany(mappedBy = "users", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
// @ManyToMany(mappedBy = "users")
//@JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(referencedColumnName = "id", unique = false), inverseJoinColumns = @JoinColumn(referencedColumnName = "id", unique = false))
// @JoinTable(name = "User_Conversation", joinColumns =
// @JoinColumn(referencedColumnName = "id", unique = false),
// inverseJoinColumns = @JoinColumn(referencedColumnName = "id", unique =
// false))
private Set<Conversation> conversations;
public List<User> getContacts() {

View file

@ -40,9 +40,8 @@ public class RegisterAjaxPage extends Page {
user.setEmail(post.getString("email"));
user.setSalt(BCrypt.gensalt()); // http://www.mindrot.org/projects/jBCrypt/
user.setPassword(BCrypt.hashpw(post.getString("pass"), user.getSalt()));
provider.save(user);
User managedUser = provider.getUser(user.getId());
IOHelper.LoginUser(exchange, managedUser, provider);
user = provider.save(user);
IOHelper.LoginUser(exchange, user, provider);
IOHelper.SendResponse(200, "Success", exchange);
} catch (Exception e) {
throw e;