我很擅长用Jax-rs服务器实现数据源,我已经遇到了很多我通过搜索解决的问题,其他的是通过演绎,现在我找到了一个我无法解决的问题。
10:31:23,633 INFO [org.jboss.as.ejb3.deployment](MSC服务主题) 1-5)WFLYEJB0473:名为的会话bean的JNDI绑定 部署单位“部署”中的“NotificacaoDAOEJB”SouVizinho.war“' 如下:
Java的:全球/ SouVizinho / NotificacaoDAOEJB br.com.br.ejb.NotificacaoDAOEJB Java的:应用程序/ SouVizinho / NotificacaoDAOEJB br.com.br.ejb.NotificacaoDAOEJB Java的:模块/ NotificacaoDAOEJB br.com.br.ejb.NotificacaoDAOEJB Java的:全球/ SouVizinho / NotificacaoDAOEJB java:app / SouVizinho / NotificacaoDAOEJB java:module / NotificacaoDAOEJB
10:31:23,634 INFO [org.jboss.as.ejb3.deployment](MSC服务主题) 1-5)WFLYEJB0473:名为的会话bean的JNDI绑定 部署单位部署中的'NotificacaoControladorEJB' “SouVizinho.war”如下:
Java的:全球/ SouVizinho / NotificacaoControladorEJB br.com.souvizinho.controlador.NotificacaoControladorEJB Java的:应用程序/ SouVizinho / NotificacaoControladorEJB br.com.souvizinho.controlador.NotificacaoControladorEJB Java的:模块/ NotificacaoControladorEJB br.com.souvizinho.controlador.NotificacaoControladorEJB Java的:全球/ SouVizinho / NotificacaoControladorEJB Java的:应用程序/ SouVizinho / NotificacaoControladorEJB 的java:模块/ NotificacaoControladorEJB
我正在通过PostMan请求“/ contador / {id}”当它到达 notificaoDAO.contador(id)时它会显示 notificacaoDAO null 。
PS:我在Eclipse Oxygen上使用Wildfly 11
控制器
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@Path("ejb/notificacao")
@Stateless
@LocalBean
public class NotificacaoControladorEJB {
SmartJava smartjava = new SmartJava();
@EJB
NotificacaoDAOEJB notificacaoDAO;
@GET
@Produces("application/json; charset=UTF-8")
@Path("/contador/{id}")
public Notificacao contadorGet(@PathParam("id") int id) {
long quantidade;
try {
quantidade = notificacaoDAO.contador(id);
return new Notificacao(quantidade);
} catch(Exception e) {
quantidade = 0;
System.err.println(smartjava.getFullStackTrace(e));
return new Notificacao(quantidade);
}
}
DAO
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
@LocalBean
public class NotificacaoDAOEJB {
//private EntityManagerFactory entityManagerFactory;
@PersistenceContext
private EntityManager entityManager;
SmartJava sj = new SmartJava();
public Notificacao Salvar(Notificacao notificacao) {
try {
this.entityManager.getTransaction().begin();
this.entityManager.persist(notificacao);
this.entityManager.getTransaction().commit();
} catch (Exception e) {
System.out.println(sj.getFullStackTrace(e));
} finally {
//this.entityManager.close();
}
return notificacao;
}
public void Alterar(Notificacao notificacao){
this.entityManager.getTransaction().begin();
this.entityManager.merge(notificacao);
this.entityManager.getTransaction().commit();
//this.entityManager.close();
}
@SuppressWarnings("unchecked")
public List<Notificacao> Listar(){
return this.entityManager.createQuery("SELECT a FROM Notificacao a ORDER BY a.dtcad").getResultList();
}
public Notificacao GetNotificacao(int nrseq) {
return this.entityManager.find(Notificacao.class, nrseq);
}
@SuppressWarnings("unchecked")
public long contador(int nrsequsuario) {
try {
return (long) this.entityManager.createQuery("SELECT COUNT(a) FROM Notificacao a "
+ "WHERE a.visualizado = false AND a.useralvo.nrseq = :usuario ORDER BY a.dtcad")
.setParameter("usuario", nrsequsuario).getSingleResult();
} catch(Exception e) {
System.err.println(sj.getFullStackTrace(e));
return 0;
}
}
}
答案 0 :(得分:0)
我遵循了本教程:
https://blogs.sap.com/2014/11/26/jax-rs-the-missing-link-between-ui5-and-hcp-java-apps-adding-ejb/
并且工作,但我遇到了交易问题,所以我做了这个主题的UserTransaction: A JTA EntityManager cannot use getTransaction()
现在一切正常,持续100毫秒而不是5000毫秒,并列出50毫秒而不是3000毫秒。