Я знаю, что есть много вопросов относительно этого исключения, однако, я считаю, что я пробовал все в течение многих дней, но пока безуспешно.Поскольку это рабочий сервер, я могу работать с ним только после полуночи: (
У меня есть приложение Tomcat. Недавно я обновил пул соединений, чтобы использовать пул jdbc-соединений Tomcat.моя машина для разработки Windows, все работает нормально, но теперь, когда я пытаюсь реализовать это на моем Linux-сервере, я получаю это исключение (см. заголовок), когда мое приложение пытается подключиться к MySQL.
I 'Я использую «Easy Tomcat 7», который должен быть таким же, как и обычная версия Tomcat, только он поставляется с программным обеспечением CPanel.
Мне просто нужна эта БД для этого приложения (не для нескольких приложений).
Это мой класс java DB:
public class DBUtil {
static DataSource ds;
static {
try {
Context context = new InitialContext();
ds = (DataSource)context.lookup("java:comp/env/jdbc/rhwebDB");
} catch (NamingException e) {
e.printStackTrace();
System.out.println("DBUtil.NamingException" + e);
} catch(Exception e) {
System.out.println(e);
}
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
Это мой файл context.xml, который находится в myAppDirectory / META-INF
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/rhwebDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
maxActive="20"
minIdle="3"
maxIdle="15"
maxWait="10000"
initialSize="3"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="30000"
username="dbuser"
password="dbpwd"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/rhmexweb_rhweb"/>
</Context>
Я не использую файлы WAR. Я просто загружаю файлы на свой сервер и перезапускаю tomcat, когда это необходимо, что обычно нормально работает.
В случае, если это тоже актуально, файл Tomcat server.xml имеет эти настройкидля этого сайта. У меня естьтакже попытался добавить параметр copyXML = "true", но пока безуспешно:
<Host name="rhweb.net" appBase="webapps">
<Alias>www.rhweb.net</Alias>
<Context path="" reloadable="false" docBase="/home/rhweb/public_html" debug="1"/>
</Host>
Вот полная трассировка стека, которую я получаю, когда мое приложение пытается установить соединение с MySQL:
javax.naming.NameNotFoundException: Name [jdbc/rhwebDB] is not bound in this Context. Unable to find [jdbc].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
at javax.naming.InitialContext.lookup(InitialContext.java:415)
at util.DBUtil.<clinit>(DBUtil.java:23)
at Solutio.AdminRH.Entity.ISeguridadAdminDB.verificaUsuario(ISeguridadAdminDB.java:142)
at org.apache.jsp.menu_jsp._jspService(menu_jsp.java:115)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Я также попытался добавить эти строки в файл web.xml моего приложения (который мне не нужно было включать в мой компьютер с Windows)
<resource-ref>
<description>MySQL RhWeb Datasource</description>
<res-ref-name>jdbc/rhwebDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
И когда я включаю эти строки, я получаю исключениеэто:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
Похоже, что Tomcat не может найти мой файл META-INF / context.xml или он не распознает эту ссылку:
ds= (DataSource) context.lookup ("java: comp / env / jdbc / rhwebDB");
Мои версии linux, Tomcat и JDK:
CentOS выпуск 6.8 (финальный))
Apache Tomcat / 7.0.42
java версия "1.7.0_131"
Я не знаю, что еще можно попробовать исправить.Буду признателен за любую помощь
ОБНОВЛЕНИЕ
Я до сих пор не нашел решения.Я осознал некоторые вероятные проблемы конфигурации, которые могут быть связаны со всем этим:
Приложение находится здесь:
/ home / rhmexweb / public_html
Однако наФайл Tomcat server.xml, определяющий хост для этого сайта:
<Host name="rhweb.mx" appBase="webapps">
<Context path="" reloadable="false" docBase="/home/rhmexweb/public_html" />
</Host>
Причина, по которой он не находится в каталоге webapps, заключается в том, что CPanel автоматически создает каждую учетную запись в / home / account-name / public_html,вот почему здесь необходим элемент контекста (наверное).Если я удаляю весь тег Context и вместо этого я использую appBase = "/ home / rhmexweb / public_html", то Tomcat не найдет все фляги и содержимое из папки WEB-INF (/ Главная / rhmexweb / public_html / WEB-INF ).Я упоминал об этом, потому что я добавил параметр copyXML = "true" просто чтобы посмотреть, куда tomcat попытается скопировать файл context.xml, и если он изменит свое имя, но окажется, что есть два разных пути,Сначала я получил исключение для прав записи, когда впервые включил этот параметр, и он пытался создать папку здесь:
/ var / lib / easy-tomcat7 / webapps /
Этот путь,содержит только папки приложения tomcat по умолчанию (manager, examples & host-manager)
Эта папка, в которой перечислены все веб-сайты и все скомпилированные файлы jsp:
/ usr/ local / easy / etc / easy-tomcat7 / Catalina /
однако в /usr/local/easy/etc/easy-tomcat7/Catalina/rhweb.mx/ нет каталога WEB-INF.
В любом случае, я хотел бы знать, может ли наличие элемента Context в определении хоста быть проблемой для Tomcat, чтобы найти файл appPath / META-INF / context.xml.