- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们的应用程序中,我们使用 hibernate 配置了 c3p0 池连接。使用数组类型的输入调用存储过程 我必须通过删除所有包装来获得底层连接。但是在这种情况下,当我尝试获取 C3P0ProxyConnection 类时,我总是收到 ClassCastException。
是否有一种简单的方法来调用具有复杂输入(如数组)的存储过程? 在下面的代码中,我打印了一些类加载器信息,以查看强制转换类是否由不同的类加载器加载。但似乎所有类加载器都由同一个类加载器加载 类加载器。但Connection类位置为空,因此必须由Bootstrap类加载器加载。这可能是问题所在吗?
我已附加来自 hinernate session 工厂的实际连接对象的快照。
private List<InvoicePrintDetailsDTO> getSelectedInvoiceDetailsToPrint(List<Integer> selectedInvoiceIds) {
Currency defaultCurrency = DAOInstanceFactory.getInstance().getCurrencyDAO().loadCurrencyByCurrencyCode("LKR");
List<InvoicePrintDetailsDTO> listOfInvoicesToPrint = Collections.emptyList();
Session session = DAOInstanceFactory.getInstance().getSessionFactory().getCurrentSession();
Connection connection = session.connection();
try {
Object[] invoiceIds = selectedInvoiceIds.toArray();
Array invoiceIdsARRAY = getSqlArray(invoiceIds,"SELECTEDINVOICEIDS",connection);
String query = "{call GETINVOICEPRINTDATA(?,?,?,?)}";
CallableStatement ocs = connection.prepareCall(query);
ocs.setArray(1, invoiceIdsARRAY);
ocs.setInt(2, defaultCurrency != null ? defaultCurrency.getId() : 0);
ocs.setInt(3, 1000);
ocs.registerOutParameter(4, OracleTypes.ARRAY,"INVOICEPRINTINVOICES");
ocs.executeUpdate();
Array resultsAsArray = ocs.getArray(8);
Map<String,Class<?>> resultsAsMap = connection.getTypeMap();
resultsAsMap.put("INVOICEPRINTINVOICEINFO", Class.forName("com.xxxx.xxxxx.business.utill.InvoicePrintDetailsDTO"));
if(resultsAsArray!=null) {
Object[] values = (Object[]) resultsAsArray.getArray();
if(values != null && values.length > 0) {
listOfInvoicesToPrint = new ArrayList<InvoicePrintDetailsDTO>();
for (int i=0; i < values.length; i++){
InvoicePrintDetailsDTO obj = (InvoicePrintDetailsDTO)values[i];
listOfInvoicesToPrint.add(obj);
}
}
}
} catch (Exception exception) {
logger.error(ERROR_OCCOURED_WHILE_GENERATING_INVOICE_PRINT, exception);
} finally {
try {
if(connection != null && !connection.isClosed()){
connection.close();
}
} catch (SQLException sqlException) {
logger.error(ERROR_OCCOURED_WHILE_GENERATING_INVOICE_PRINT, sqlException);
}
}
return listOfInvoicesToPrint;
}
private Array getSqlArray(Object[] data, String sqlTypeName, Connection connection) throws SQLException {
Array array = null;
Class<? extends Connection> connectionClass = connection.getClass();
ClassLoader connectionClassLoader = connectionClass.getClassLoader();
System.out.println("Connection class loader is :"+connectionClassLoader.toString());
System.out.println("Connection class location :"+connectionClass.getResource('/' + connectionClass.getName().replace('.', '/') + ".class"));
Class<C3P0ProxyConnection> c3P0ProxyConnectionClass = C3P0ProxyConnection.class;
ClassLoader proxyConnectionLoader = c3P0ProxyConnectionClass.getClassLoader();
System.out.println("Proxy Connection class loader is :"+proxyConnectionLoader.toString());
System.out.println("C3P0ProxyConnection class location :"+c3P0ProxyConnectionClass.getResource('/' + c3P0ProxyConnectionClass.getName().replace('.', '/') + ".class"));
Class<NewProxyConnection> newProxyConnectionClass = NewProxyConnection.class;
ClassLoader newProxyConnectionLoader = newProxyConnectionClass.getClassLoader();
System.out.println("New Proxy Connection class loader is :"+newProxyConnectionLoader.toString());
System.out.println("NewProxyConnection class location :"+newProxyConnectionClass.getResource('/' + newProxyConnectionClass.getName().replace('.', '/') + ".class"));
C3P0ProxyConnection proxyValue = (C3P0ProxyConnection) connection;
if (connection instanceof C3P0ProxyConnection) {
C3P0ProxyConnection proxy = (C3P0ProxyConnection) connection;
try {
Method m = Connection.class.getMethod("createArrayOf", String.class, Object[].class);
Object[] arrayOfArguments = { sqlTypeName, data };
array = (Array) proxy.rawConnectionOperation(m, C3P0ProxyConnection.RAW_CONNECTION, arrayOfArguments);
} catch (Exception exception) {
logger.error("Error calling createArrayOf", exception);
throw new SQLException(exception);
}
}
return array;
}
20:36:53,622 INFO [STDOUT] Connection class loader is :WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@21bdbf51
20:36:53,623 INFO [STDOUT] Connection class location :null
20:36:53,624 INFO [STDOUT] Proxy Connection class loader is :WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@21bdbf51
20:36:53,624 INFO [STDOUT] C3P0ProxyConnection class location :jar:file:/D:/jboss-4.2.2.GA/server/default/deploy/xxxx.war/WEB-INF/lib/c3p0-0.9.5.2.jar!/com/mchange/v2/c3p0/C3P0ProxyConnection.class
20:36:53,625 INFO [STDOUT] New Proxy Connection class loader is :WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@21bdbf51
20:36:53,626 INFO [STDOUT] NewProxyConnection class location :jar:file:/D:/jboss-4.2.2.GA/server/default/deploy/xxxx.war/WEB-INF/lib/c3p0-0.9.5.2.jar!/com/mchange/v2/c3p0/impl/NewProxyConnection.class
20:36:53,631 INFO [STDOUT] ERROR [http-10.10.10.117-8080-6] (InvoicePDFBody.java:316) - Error occoured while generating invoice print.
java.lang.ClassCastException: $Proxy315 cannot be cast to com.mchange.v2.c3p0.C3P0ProxyConnection
at com.xxxx.xxxx.print.handlers.InvoicePDFBody.getSqlArray(InvoicePDFBody.java:358)
at com.xxxx.xxxx.print.handlers.InvoicePDFBody.getSelectedInvoiceDetailsToPrint(InvoicePDFBody.java:290)
at com.xxxx.xxxx.print.handlers.InvoicePDFBody.buildPdfDocument(InvoicePDFBody.java:413)
at com.xxxx.document.print.controller.InvoicePDFGenerator.buildPdfDocument(InvoicePDFGenerator.java:19)
at org.springframework.web.servlet.view.document.AbstractPdfView.renderMergedOutputModel(AbstractPdfView.java:78)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.custom.spring.plugin.AuthenticationFilter.doFilter(AuthenticationFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.custom.spring.plugin.RoleBasedAccessFilterForInviocePrint.doFilter(RoleBasedAccessFilterForInviocePrint.java:60)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.custom.spring.plugin.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:199)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:662)
最佳答案
所以,有几件事:
$Proxy315
不是 C3P0ProxyConnection
。它是由 hibernate 生成的动态代理,包装了 BorrowedConnectionProxy 。其中嵌入的可能是一个C3P0ProxyConnection
。如果您确实愿意,可以使用静态方法 BorrowedConnectionProxy.getWrappedConnection(...)
来解包到可能是 c3p0 NewProxyConnection
的内容。您还可以使用 JDBC 连接标准方法 unwrap .您可能必须获取包装的 Connection 的唯一原因是,如果您使用的是非常旧版本的 hibernate,并且动态代理实现了旧版本的 Connection。如果是这种情况,请在转换之前尝试 BorrowedConnectionProxy.getWrappedConnection(...)
。由于您正在进行大量的打印调试,因此请打印您获得的连接以确保它是您所期望的。
关于java - 将 NewProxyConnection 转换为 C3P0ProxyConnection 时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46201465/
关于strcat函数。 while (*p) p++; 和 while (*++p) ; 两者都有效,但是 while (*p++) ; 不起作用。我认为 first 和 th
" in HTML?(HTML中的““是什么
?)
下面例子中的第一行代码是什么。我看到一个YouTuber在写下面的代码,它显示了一个设计在csswar Challenges中。我也尝试了一下,它很管用。但我以前从未在任何HTML教程上看到过它,我在
vs.
是不间断空格,表示没有换行的空白处。 如果我用 我在两个段落之间有一个空格(更大的间隔)。如果我使用 我在两个段落之间只有一个新行(没有中断)。为什么? 最佳答案 在 HTML 中
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 9
我对编程还很陌生,只是想知道为什么这段代码: for ( ; *p; ++p) *p = tolower(*p); 当 p 指向一个字符串时,可以降低 c 中字符串的大小写吗? 最佳答案 一般来说,这
代码 int n = 25; int *p = &n; printf("%x\n %d\n %x\n", p, p[0], p[1]); 返回: \ 当然我永远不会这样做,但在 K&R 中声明
所以,我想创建一个简单的程序,返回有关连续素数的计算结果。首先,我创建一个包含所有这些素数的列表,然后尝试计算结果,但这给了我一个超出范围的索引。有人可以帮助我吗?我的程序: primes = []
这个问题在这里已经有了答案: With arrays, why is it the case that a[5] == 5[a]? (20 个答案) 关闭 9 年前。 我想知道 C/C++ 中以下四
我仍在努力理解 *p、&p 和 p 之间的区别。根据我的理解,* 可以被认为是“指向的值”,而 & 可以被认为是“地址”。换句话说,* 保存值,而 & 保存地址。如果这是真的,那么 *p 和 p 之间
你是吗? [xxxrecipientFirstNamexxx]
和你是吗? {recipientFirstName}
需要更换 你是吗? [xxxrecipientFirstNamexxx] 和 你是吗? {recipientFirstName} 。我尝试使用边界匹配器。但结果并不符合预期。我尝试使用下面的代码 "A
我想按 IsTop 属性升序排序对象,然后按 JobId 属性降序排序: query = query.OrderBy(p => p.IsTop).ThenOrderByDescending(p =
在我尝试使用 Apache POI 进行转换的 Excel 文件中,我有一个单元格的数值为 -3.97819466831428,自定义格式为“0.0 p.p.;(0.0 p.p.)”。因此,在 Exc
我想创建一个扩展方法,允许我调用 ToSerializableDictionary(p => p.ID)而不是 .ToDictionary(p => p.ID)在以下 LINQ 上下文中。虽然我不确定
在下面的 HTML 代码上运行此 jQuery 代码会返回不同的结果,我认为它们应该返回相同的值。 jQuery 代码: var counter = 0; $("p").each(function()
在下面的代码片段中,符号 *p 等同于 p[0],*(p + 1) 等同于p[1],依此类推。 int* p = new int[3] { 1, 2, 3}; cout << *p << ' ' <<
这个问题在这里已经有了答案: What will happen when I call a member function on a NULL object pointer? [duplicate]
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Undefined Behavior and Sequence Points 按照标准中的定义,E1 +=
" in HTML?(在HTML中“
以下示例中的第一行代码是什么。我看到一个youtube用户写下面的代码,它显示在cssbattle挑战的设计。我也试过,它的作品。但我从来没有见过它在任何HTML教程之前,我在谷歌上搜索它,但它只显示
每当我收到来自 MS outlook 的电子邮件时,我都会收到此标记 & nbsp ; (没有空格)哪个显示为?在 <>. 当我将其更改为 ISO-8859-1 时,浏览器页面字符集编码为 UTF-8
p1
TESTp2
代码: from bs4 import BeautifulSoup soup = BeautifulSoup('p1TESTp2') print soup.div() 结果: [p1, p2] 为什么
我是一名优秀的程序员,十分优秀!