I'm相当新的Java EE和有关于Wildfly 10上运行的应用程序服务器的应用程序,在我的情况下,理解问题如何在Wildfly中“刷新”已部署的应用程序?
我的问题是,对象显然是保持自己的状态,一旦他们在那里实例化应用程序启动,即使我关闭并重新打开浏览器会话。就我而言,我正在使用试图打开jdbc连接的bean,并在出现错误时写入facelet的消息。
因此,为了测试场景,我关闭了数据库并启动了应用程序。如预期的那样,出现错误消息。现在,重新启动数据库后,它仍然没有连接并给我“无数据库”消息。必须完全重启应用程序服务器才能使bean重新启动。
所以问题是,我必须做什么,重新初始化我的应用程序的所有涉及的对象实例?
这里是bean的问题代码:
@Named
@Stateless
public class CoworkerProducer
{
@Inject
private EntityManager em;
@Resource(lookup="java:/JMPostgres")
private DataSource dsJM;
public void addCoworkers(Long projectId)
{
Project managedProject = em.find(Project.class, projectId);
Long jmId = managedProject.getJmId();
try {
Connection con = dsJM.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM employees e, departments d WHERE e.department_id = d.id AND d.project_id = " + jmId);
ResultSet result = ps.executeQuery();
while(result.next()){
Coworker cow = new Coworker();
cow.setProject(managedProject);
em.persist(cow);
}
}
catch (SQLException e) {
final FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "no database!", null));
}
}
}
你为什么要注入'EntityManager',并在同一时间注射'DatasSource'? –
,因为我从DataSource(外部RDBMS)读取一些数据并将该数据存储在实体管理器持久化的对象中,然后 – Prefect73