我正在开发一个 java servlet Web 应用程序,该应用程序管理来自多个数据库(结构相同)的信息,每个数据库对应于不同的“业务”。用户选择存储在会话中的“当前业务”,应用程序可以显示或修改该“当前业务”。
我想以动态的方式使用 tomcat 资源,以便使用 jndi 访问这些业务。通过这种方式,我可以在 servlet 中使用 jstl sql 标记或上下文查找。我无法在 web.xml 文件中定义每个资源,因为它们存储在 SQL 表中。最终结果是能够编写具有以下行的简单 jsp:
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<sql:query var = "users" dataSource="sources/${sessionScope.currentBusiness}">
select id, firstName, lastName FROM user
</sql:query>
或可以有这样的行的 servlet
String request.getSession().getAttribute("currentBusiness");
Context initial = new InitialContext();
Context context = (Context) initial.lookup("java:comp/env");
DataSource source = (DataSource) context.lookup("sources/" + currentBusiness);
我可以在哪里获得“当前业务”的正确数据源。
我已经尝试编写自己的从 javax.naming.spi.ObjectFactory 派生的 ObjectFactories,但没有成功。关于如何轻松做到这一点的任何指示?