Как регистрировать запросы, написанные в <sql: query> или <sql: update> - PullRequest
0 голосов
/ 07 мая 2019

У меня есть файл 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

Может кто-нибудь сказать мне, где я делаю ошибку?Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...