Erro ao usar o merge eclipselink

Olá pessoal,

Estou com um problema já a uma semana que não estou conseguindo resolver, gostaria de saber se alguém tem alguma luz no fim do túnel :smiley:

Bom vamos la,

Estou fazendo testes automatizados e o testSaveUser() e o testGetUserById() passaram no teste normalmente

no caso do testSetUser() esta dando erro java.lang.NullPointerException. Conferi todo o codigo com o codigo fonte do curso e esta igual igual.
Abaixo vou posta os resultados do netbeans:

Testcase: testSetUser(br.com.devmedia.session.UserSessionTest): Caused an ERROR
null
java.lang.NullPointerException
at br.com.devmedia.session.UserSessionTest.testSetUser(UserSessionTest.java:89)

SEVERE: Exception while visiting com/sun/gjc/spi/base/datastructure/Cache.class of size 450
java.lang.NullPointerException
at org.glassfish.hk2.classmodel.reflect.impl.TypesImpl.getType(TypesImpl.java:78)
at org.glassfish.hk2.classmodel.reflect.impl.ModelClassVisitor.visit(ModelClassVisitor.java:119)
at org.objectweb.asm.ClassReader.accept(Unknown Source)
at org.objectweb.asm.ClassReader.accept(Unknown Source)
at org.glassfish.hk2.classmodel.reflect.Parser$5.on(Parser.java:363)
at org.glassfish.hk2.classmodel.reflect.util.JarArchive.onSelectedEntries(JarArchive.java:125)
at org.glassfish.hk2.classmodel.reflect.Parser.doJob(Parser.java:348)
at org.glassfish.hk2.classmodel.reflect.Parser.access$300(Parser.java:70)
at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:307)
at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:296)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

O interessante é que o erro só acontece caso eu tenho que usar o getEm().merge(us);

abaixo as classes principais

Criei uma classe User com o seguinte código:


@Entity
@Table(name="users")
public class User implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    @Column
    @Basic(optional=false)
    private Integer id;
    
    @NotNull
    @NotEmpty(message="Usuario nao pode ser nulo")
    @Column(length=255,nullable=false)
    private String username;
    
    @NotNull
    @NotEmpty
    @Column(length=32,nullable=false)
    private String password;

    @NotNull
    @NotEmpty
    @Column(length=255,nullable=false)
    private String name;

    @NotNull
    @NotEmpty
    @Email
    @Column(length=255,nullable=false)
    private String email;
    
    @OneToMany(cascade= CascadeType.ALL,mappedBy="userOf",orphanRemoval=true)
    private List<Address> addresses = new LinkedList<Address>();
    
    @OneToMany(cascade= CascadeType.ALL,mappedBy="userOf",orphanRemoval=true)
    private List<CreditCard> credicards = new LinkedList<CreditCard>();
    
    @OneToMany(cascade= CascadeType.ALL,mappedBy="userOf",orphanRemoval=true)
    private List<Sell> sells = new LinkedList<Sell>();
    
    public void AddAddress(Address end){
        end.setUserOf(this);
        getAddresses().add(end);
    }

...... gets e sets

A classe UserSession com o seguinte codigo:

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class UserSession extends BasicSessionBean{
    
    public User getUserById(int idUser){
        return getPojo(User.class, idUser);
    }
    
    public List<User> getAllUsers(){
        return getList(User.class, "select us from User us order by us.name");
    }
    
    public List<User> getUsersByName(String name){
        return getList(User.class, "select us from User us where us.name like ?1", "%"+name+"%");
    }
    
    public boolean isUserOK(String username, String password){
        return (getPojo(User.class, "select us from User us where us.username = ?1 and us.password = ?2", username,password) != null);
   }
    
    public User saveUser(User us){
        getEm().persist(us);
        return us;
    }
    
    public User setUser(User us){
        getEm().merge(us);
        return us;
    }
    
    public void removeUser(User us){
        us = getEm().merge(us);
        getEm().remove(us);
    }
    
    public boolean removeUser(int idUser){
        execute("DELETE FROM Address addr where addr.userOf.id= ?1", idUser);
        boolean toReturn = execute("DELETE FROM User us where us.id = ?1", idUser) > 0;
        return toReturn;
    }
    
    public List<Address> getAddressesOfUser(User us){
        return getList(Address.class, "select addr Address addr where addr.userOf = ?1", us);
    }
    
    public Address getAddress(int idAddress){
        return getPojo(Address.class, idAddress);
    }

O BasicSessionBean com o codigo:

public abstract class BasicSessionBean implements Serializable{

    @PersistenceContext
    private EntityManager em;
    
    public EntityManager getEm() {
        return em;
    }

    public BasicSessionBean() {
    }
    
    
    public <T> List<T> getList(Class<T> classToCast, String query, Object... values){
        Query qr = createQuery(query, values);
        return qr.getResultList();
    }
    
    public <T> List<T> getLimitedList(Class<T> classToCast, String query,int limit, Object... values){
        Query qr = createQuery(query, values);
        qr.setMaxResults(limit);
        return qr.getResultList();
    }
    
    public <T> List<T> getNamedList(Class<T> classToCast, String namedQuery, Object... values){
        Query qr = em.createNamedQuery(namedQuery);
         if(values != null){
            for (int i = 0; i < values.length; i++) {
                Object object = values[i];
                qr.setParameter(i+1, object);
            }
        }
        return qr.getResultList();
    }
    
    public <T> T getPojo(Class<T> classToCast, String query, Object... values){
        Query qr = createQuery(query, values);
        return (T) qr.getSingleResult();
    }
    
    public <T> T getPojo(Class<T> classToCast, Serializable primaryKey){
        return em.find(classToCast, primaryKey);
    }
    
    public int execute(String query, Object... values){
        Query qr = createQuery(query, values);
        return qr.executeUpdate();
    }

    private Query createQuery(String query, Object[] values) {
        Query qr = em.createQuery(query);
        if(values != null){
            for (int i = 0; i < values.length; i++) {
                Object object = values[i];
                qr.setParameter(i+1, object);
            }
        }
        return qr;
    }
}

Fico realmente muito mais muito agradecido quem puder me ajudar nesse problema, pois já pesquisei muito mesmo antes de posta esse problema.