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 
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.