我正在尝试使用<xe:jdbcConnectionManager>
with <xe:jdbcRowSet>
。这应该工作吗?这本书(XPages Extension Library)似乎暗示它应该这样做,但示例 NSF (XPagesJDBC.nsf) 不包含任何具有该组合的示例。当然,jdbcRowSet 接受connectionManager
属性。
我收到此错误:
com.ibm.xsp.FacesExceptionEx: Unknown ConnectionManager jdbcConnectionManager1
com.ibm.xsp.extlib.util.JdbcUtil.createManagedConnection(JdbcUtil.java:106)
com.ibm.xsp.extlib.jdbc.model.JdbcRowSetAccessor.findConnection(JdbcRowSetAccessor.java:467)
外部代码
问题似乎出在 JdbcUtil.java 函数 findConnectionManager() 中。它返回 null,这就是我得到上述异常的原因。这是功能:
public static IJdbcConnectionManager findConnectionManager(FacesContext context, UIComponent from, String name) throws SQLException {
UIComponent c = FacesUtil.getComponentFor(from, name);
if(c!=null) {
return (IJdbcConnectionManager)c;
}
return null;
}
该参数name
不为空,因为它在异常消息中被引用。context
根本不使用该参数。并且参数from
,如果为 null,则像这样获取(在第 102 行):from = context.getViewRoot();
。
这是抛出异常的函数:
public static Connection createManagedConnection(FacesContext context, UIComponent from, String name) throws SQLException {
if(from==null) {
from = context.getViewRoot(); // ROW 102
}
IJdbcConnectionManager manager = findConnectionManager(context, from, name);
if(manager==null) {
throw new FacesExceptionEx(null,"Unknown ConnectionManager {0}",name); // ROW 106
}
return manager.getConnection();
}
我的代码
所以,这有效:
<xp:this.data>
<xe:jdbcRowSet var="jdbcRowSet1" maxRows="10"
sqlQuery="SELECT * FROM test.reportcode;"
connectionName="mysql_pooled">
</xe:jdbcRowSet>
</xp:this.data>
这不起作用:
<xe:jdbcConnectionManager id="jdbcConnectionManager1"
connectionName="mysql_pooled">
</xe:jdbcConnectionManager>
<xp:this.data>
<xe:jdbcRowSet var="jdbcRowSet1" maxRows="10"
sqlQuery="SELECT * FROM test.reportcode;"
connectionManager="jdbcConnectionManager1">
</xe:jdbcRowSet>
</xp:this.data>
请注意,connectionName 是相同的,并且在 jdbcRowSet 直接使用时可以完美运行。唯一的变化是将该属性替换为使用相同连接名称的 jdbcConnectionManager 引用。该设置也与 jdbcQuery 数据源完美配合。
我怎样才能使这项工作?或者可以做到吗?