【发布时间】:2016-11-18 09:03:56
【问题描述】:
我是 Java EE 的新手,对在应用程序服务器中运行应用程序有一个理解问题,在我的例子中是 Wildfly 10。
我的问题是,对象显然会保持它们的状态,一旦它们在应用程序启动时被实例化,即使我关闭并重新打开浏览器会话也是如此。就我而言,我正在使用一个尝试打开 jdbc 连接并写入 facelet 消息的 bean,以防出现问题。
所以,为了测试场景,我关闭了数据库并启动了应用程序。正如预期的那样,出现了错误消息。现在,重新启动数据库后,它仍然没有连接并给我“无数据库”消息。为了让 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)读取了一些数据并将这些数据存储在由实体管理器持久化的对象中
标签: java jakarta-ee wildfly application-server