Now we can create some users and contacts. For this we change the App.java file we created during setup. First we must import the following classes:
import java.security.PrivilegedAction; import java.util.Arrays; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import net.sf.jpasecurity.contacts.model.Contact; import net.sf.jpasecurity.contacts.model.User; import net.sf.jpasecurity.security.authentication.StaticAuthenticationProvider;
To create the users and contacts we must create an EntityManagerFactory, an EntityManager, start a Transaction and persist the users. As recommended by the JPA Specification, we use one EntityManagerFactory per application. So we create it directly within the main:
public static void main(String[] args) { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("contacts"); }
We use a separate method to create the users:
public static void createUsers(EntityManagerFactory entityManagerFactory) { EntityManager entityManager; entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); entityManager.persist(new User("John")); entityManager.persist(new User("Mary")); entityManager.getTransaction().commit(); entityManager.close(); }
Ok, let's retrieve the users from the database to see whether they were really persisted:
public static void displayUserCount(EntityManagerFactory entityManagerFactory) { EntityManager entityManager; entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); List<User> users = entityManager.createQuery("SELECT user FROM User user").getResultList(); System.out.println("users.size = " + users.size()); entityManager.getTransaction().commit(); entityManager.close(); }
Let's change the main to call our methods and see the output:
public static void main(String[] args) { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("contacts"); createUsers(entityManagerFactory); displayUserCount(entityManagerFactory); }
Again on the command-line issue the following command from within the root-directory of our application:
mvn package
Now again change into the target folder and execute our application to see the output:
java -jar jpasecurity-simple-sample-0.3.0.jar
As we can see from the output, there are really two users in the database. Now we can create contacts for these users:
public static void createContacts(EntityManagerFactory entityManagerFactory) { EntityManager entityManager; entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); User john = (User)entityManager.createQuery("SELECT user FROM User user WHERE user.name = 'John'").getSingleResult(); User mary = (User)entityManager.createQuery("SELECT user FROM User user WHERE user.name = 'Mary'").getSingleResult(); entityManager.persist(new Contact(john, "peter@jpasecurity.sf.net")); entityManager.persist(new Contact(john, "0 12 34 - 56 789")); entityManager.persist(new Contact(mary, "paul@jpasecurity.sf.net")); entityManager.persist(new Contact(mary, "12 34 56 78 90")); entityManager.getTransaction().commit(); entityManager.close(); }
Let's see if all four contacts are there:
public static void displayContactCount(EntityManagerFactory entityManagerFactory) { EntityManager entityManager; entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); List<Contact> contacts = entityManager.createQuery("SELECT contact FROM Contact contact").getResultList(); System.out.println("contacts.size = " + contacts.size()); entityManager.getTransaction().commit(); entityManager.close(); }
Again we add the method to our main and see the output:
public static void main(String[] args) { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("contacts"); createUsers(entityManagerFactory); displayUserCount(entityManagerFactory); createContacts(entityManagerFactory); displayContactCount(entityManagerFactory); }
As we can see from the output: All contacts are persisted. Now it's time for some security.