Salve a tutti, sto utilizzando NetBeans 7.1 IDE con Glassfish 3.1.2 per sviluppare una semplice applicazione web J2EE v6. L'applicazione, fin'ora, non è altro che l'applicazione per la gestione dei contatti trovata in un tutorial qui. Ho cercato in lungo e in largo una soluzione ma non ne riesco a uscirne.
L'applicazione usa PrimaFaces 3.2 con JSF 2.1.7.

File ContactsBean.java
codice:
package com.organizer.ejb;

import com.organizer.entity.Contact;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;

@ManagedBean
@RequestScoped
public class ContactsBean {

    private List<Contact> contacts;
    private Contact contact=new Contact();

    @PersistenceUnit(unitName="PersonalOrganizerJPA")
    private EntityManagerFactory emf;

        @Resource
        private UserTransaction utx;

        public ContactsBean()
        {
        }
    public List<Contact> getContacts() {
        EntityManager em = emf.createEntityManager();
        Query query = em.createQuery("SELECT c FROM Contact c");
        contacts = (List<Contact>)query.getResultList();
        return contacts;
    }
    public void salva(ActionEvent event){
        EntityManager em = emf.createEntityManager();
        try {
            utx.begin();
            em.joinTransaction();
            em.persist(contact);
            utx.commit();
            showGrowlInsMessage();
        } catch (Exception e) {
            try {
                utx.rollback();
            } catch (IllegalStateException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            } catch (SecurityException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            } catch (SystemException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            }
        }finally{
            em.close();
        }       
        contact=null;
    }
    public void aggiorna(ActionEvent event){

        EntityManager em = emf.createEntityManager();
        try {
            utx.begin();
            em.joinTransaction();
            em.merge(contact);
            utx.commit();
            showGrowlUpdMessage();
        } catch (Exception e) {
            try {
                utx.rollback();
            } catch (IllegalStateException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            } catch (SecurityException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            } catch (SystemException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            }
        }finally{
            em.close();
        }       
        contact=null;
    }
    public void elimina(ActionEvent event){

        EntityManager em = emf.createEntityManager();
        try {
            utx.begin();
            em.joinTransaction();
            Contact c = em.find(Contact.class, contact.getId());
            em.remove(c);
            utx.commit();
            this.showGrowlDelMessage();
        } catch (Exception e) {
            try {
                utx.rollback();
            } catch (IllegalStateException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            } catch (SecurityException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            } catch (SystemException e1) {
                showGrowlErrorMessage();
                e1.printStackTrace();
            }
        }finally{
            em.close();
        }       
        contact=null;
    }
    public void setContacts(List<Contact> contacts) {
        this.contacts = contacts;
    }
    public Contact getContact() {
        return contact;
    }
    public void setContact(Contact contact) {
        this.contact = contact;
    }
    private void showGrowlUpdMessage(){

        FacesContext context = FacesContext.getCurrentInstance();   
        context.addMessage(null, new FacesMessage("Successful", "Contatto aggiornato con successo"));   
    }
    private void showGrowlInsMessage(){

        FacesContext context = FacesContext.getCurrentInstance();   

        context.addMessage(null, new FacesMessage("Successful", "Contatto inserito con successo"));  
    }
    private void showGrowlDelMessage(){

        FacesContext context = FacesContext.getCurrentInstance();   
        context.addMessage(null, new FacesMessage("Successful", "Contatto eliminato con successo"));   
    }
    private void showGrowlErrorMessage(){

        FacesContext context = FacesContext.getCurrentInstance();   
        context.addMessage(null, new FacesMessage("Errore", "Operazione fallita"));   
    }
}
File web.xml
codice:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>faces/ContactsPage.xhtml</welcome-file>
    </welcome-file-list>
</web-app>