У меня есть файл JSP со следующим кодом
<sql:update var="result" dataSource="${datasource}">
INSERT INTO movie (name,rating) values (?,?)
<sql:param value="${mtgReq.params['name']}"/>
<sql:param value="${mtgReq.params['rating']}"/>
</sql:update>
<c:set target="${outputMap}" property="postResult" value="${result}"/>
Я хочу записать SQL-запрос, который выполняется вместе со значением параметров.Точно так же, как в Hibernate .
Единственное, я не использую какие-либо фреймворки в фоновом режиме, это просто JDBC.
Я обнаружил этот пример каркаса логирования, который добавляет прокси-слой поверх DataSource
объекта и регистрирует запрос.
Единственная проблема заключается в том, что их конфигурация работает с DataSource
, объявленным глобально в файле server.xml
Tomcat
, но я хочу егонастроить на уровне приложения таким образом, чтобы я мог настроить его для каждого веб-приложения, поэтому я последовал их примеру, но написал то же самое в файле context.xml моего приложения. Вот как это выглядит
<?xml version="1.0" encoding="UTF-8"?>
<Context cookies="false" path="/testweb" privileged="true" reloadable="true">
<Resource auth="Container"
closeMethod="close"
connectionTimeout="300000"
dataSource.implicitCachingEnabled="true"
driverClassName="org.hsqldb.jdbc.JDBCDriver"
factory="com.zaxxer.hikari.HikariJNDIFactory"
idleTimeout="120000"
jdbcUrl="jdbc:hsqldb:file:C:\Softwares\apache-tomcat-9.0.19\databases\testWeb\testdb;shutdown=true"
maxLifetime="1800000"
maximumPoolSize="2"
minimumIdle="1"
name="jdbc/testwebT"
username="sa"
password=""
poolName="testSamplePool"
type="javax.sql.DataSource"/>
<Resource name="jdbc/myProxy"
auth="Container"
type="net.ttddyy.dsproxy.support.ProxyDataSource"
factory="net.ttddyy.dsproxy.support.jndi.ProxyDataSourceObjectFactory"
description="ds"
listeners="count,sysout"
proxyName="DS-PROXY"
format="json"
dataSource="java:jdbc/testwebT"/>
<ResourceLink name="jdbc/testweb" global="jdbc/myProxy" type="javax.sql.DataSource"/>
<JarScanner scanManifest="false"/>
<WatchedResource>/WEB-INF/lib/</WatchedResource>
</Context>
Приведенная выше конфигурация не 'не работает для меня и дает мне эту ошибку
//removed stacktrace
[C:\Softwares\apache-tomcat-9.0.19\webapps\testWeb] has finished in [21,474] ms
[C:\Softwares\apache-tomcat-9.0.19\webapps\testWebH] has finished in [15,119] ms
07-May-2019 10:07:40.114 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-7000"]
07-May-2019 10:07:40.166 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
07-May-2019 10:07:40.175 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [36,756] milliseconds
07-May-2019 10:08:21.865 SEVERE [http-nio-7000-exec-1] com.local.test.tag.ExceptionTagHandler.doEndTag Name [jdbc/myProxy] is not bound in this Context. Unable to find [jdbc].
javax.naming.NameNotFoundException: Name [jdbc/myProxy] is not bound in this Context. Unable to find [jdbc].
at org.apache.naming.NamingContext.lookup(NamingContext.java:817)
at org.apache.naming.NamingContext.lookup(NamingContext.java:173)
at org.apache.naming.factory.ResourceLinkFactory.getObjectInstance(ResourceLinkFactory.java:152)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
at org.apache.naming.NamingContext.lookup(NamingContext.java:840)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.NamingContext.lookup(NamingContext.java:827)
at org.apache.naming.NamingContext.lookup(NamingContext.java:173)
at com.local.test.service.ConnectionProvider.getMyDatasource(ConnectionProvider.java:536)
at com.local.test.tag.ExceptionTagHandler.doEndTag(ExceptionTagHandler.java:549)
at org.apache.jsp.WEB_002dINF.resources.error.errorpage_jsp._jspx_meth_m_005fexception_005f0(errorpage_jsp.java:153)
//removed stacktrace
Может кто-нибудь сказать мне, где я делаю ошибку?Заранее спасибо.