Estou tentando fazer o spring fazer a criação do EntityManagerFactory pra mim… só que tá dando erro, dizendo que não foi instanciada a classe TipoService, ou seja, nullPointer exception. vejam o código:
O meu applicationContext: (coloquei ele no WEB-INF é lá que tem que colocar?)
~@Transactional
public class TipoServiceImpl implements TipoService {
@PersistenceContext
private EntityManager em;
public void setEntityManager(EntityManager em) {
this.em = em;
}
@SuppressWarnings("unchecked")
public List<Tipo> findAll() {
Query query = getEntityManager().createQuery("select p FROM Person p");
return query.getResultList();
}
}
aí na action eu simplesmente chamei a service e tentei usar… mas dá nullPointer Exception… como se nem tivesse achado o applicationContext, será que o arquivo está no lugar errado? coloquei no WEB-INF junto com o web.xml… falta alguma coisa? o que tá de errado pra dar nullPointer Exception?
public class loginAction extends ActionSupport {
private List<Tipo> tipos;
private String tipo;
private TipoService tipoService;
public String execute() throws Exception {
tipos = tipoService.findAll();
return SUCCESS;
}
}
será que falta alguma coisa no web.xml? eu não acrescentei nada lá pro spring… precisa?
Também no contexto-param vc pode indicar quais serão os seus arquivos xml que vc irá usar para configuração dos beans, por convenção é usado o nome do seu servlet + -servlet precindido de -sevlet:
qdo eu digo arquivo para configuração dos beans eu extou falando no arquivo applicationContext msm, mas por default e pra melhor organização, ao em vez de usar o applicationContext.xml mude o nome para xxx-servlet.xml, no seu web.xml configure o servlet do Spring, e no seu arquivo xxx-servlet.xml mude para nomeDoServlet-servlet.xml, este é o arquivo default, caso vc queira criar outros arquivos é só vc declarar no ContextConfigLocation :
O que essa configuração do servlet que vc falou pra colocar web.xml faz? (Eu não entendi porque eu só tô querendo usar o spring pra gerenciar o jpa, por que eu preciso usar servlet?)
Error creating bean with name 'entityManagerFactory': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name persistence is not bound in this Context
isso aí é porque ele não reconheceu o jndi-name que eu coloquei no applicationContext.xml!
Vc precisou configurar o Servlet? Pois fiquei em duvida se vc precisava depois que vc falou que so esta usando o Spring para fazer integração com JPA, pois eu estou usando o spring em outras camadas tbm.
Então de acordo com a documentação vc deve colocar o nome do persistence e depois o nome do seu PersistenceUnit msm:
Ok, vou colocar as partes mais importantes do meu código aki, espero que te ajude:
Os beans para configuração do Spring, como eu estou configurando todo o meu dataSource no persistence.xml aqui eu não preciso especificar nada relacionado a ele, nem o o proprio persistence.xml: