Проблемы с JDB C URL в контексте tomcat 9. xml для treeAnno - PullRequest
0 голосов
/ 14 февраля 2020

У меня установлена ​​fre sh tomcat 9 на сервере (Ubuntu 18.04). Я пытаюсь настроить treeanno (https://github.com/nilsreiter/treeanno/releases) и развернуть архив веб-приложения (war), который указан в репозиториях github. Я использовал приложение tomcat manager для развертывания war-файла и следовал этому описанию, чтобы настроить tomcat на использование соответствующего ресурса базы данных: https://github.com/nilsreiter/treeanno/blob/master/INSTALL.md. Согласно скудному описанию, это должно быть добавлено в контексте. xml установки tomcat:

<Resource name="treeanno/jdbc" auth="Container" type="javax.sql.DataSource"
           maxActive="100" maxIdle="30" maxWait="10000"
           username="USERNAME" password="PASSWORD" driverClassName="com.mysql.jdbc.Driver"
           url="DATABASE URL"/>

Поскольку я новичок в tomcat, мне неясно, какие свойства мне нужно установить, особенно "URL". Если я пытаюсь получить доступ к приложению, я получаю следующую ошибку, указывая на то, что невозможно установить соединение с базой данных, поскольку URL-адрес не подходит:

    Type Exception Report

    Message An exception occurred processing [/index.jsp] at line [12]

    Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.apache.jasper.JasperException: An exception occurred processing [/index.jsp] at line [12]

9:      doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
10:         doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
11:         omit-xml-declaration="false" />
12: <sql:query var="rs" dataSource="treeanno/jdbc" sql="select id, username from treeanno_users">
13: </sql:query>
14: <html xmlns="http://www.w3.org/1999/xhtml">
15: <head>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:626)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:500)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'jdbc:mysql:3306'"
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:666)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:270)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause

javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'jdbc:mysql:3306'"
    org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(QueryTagSupport.java:285)
    org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(QueryTagSupport.java:168)
    org.apache.jsp.index_jsp._jspx_meth_sql_005fquery_005f0(index_jsp.java:296)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:134)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Я уже понял, что URL-адрес должен ссылка на сервер базы данных, включая пароль и пользователя, но это не подходит для этого файла конфигурации.

Здесь я нашел следующее (https://ci.apache.org/projects/tomcat/tomcat9/docs/jndi-datasource-examples-howto.html):

url=jdbc:mysql://localhost:3306/javatest"/

, но с настройкой порта et c. не работает: url = jdb c: mysql: // localhost: 8080 / TreeAnno-1.0.2 "/

Теперь, как мне нужно сформулировать URL, чтобы приложение могло подключаться / инициировать MySQL базу данных?

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Прежде всего, вам необходимо установить MySQL (или установить с docker, если вы знакомы с ним).

Во время установки, Я помню, что он попросит вас установить пароль для root (который является именем пользователя по умолчанию). После установки создайте новую базу данных .

Предположим, вы называете базу данных foo, <Resource/> в context.xml должно обновиться до:

<Resource name="treeanno/jdbc" auth="Container" type="javax.sql.DataSource"
           maxActive="100" maxIdle="30" maxWait="10000"
           username="root" password="passwordOfTheRoot" driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://localhost:3306/foo"/>

Затем загрузите драйвер MySQL JDB C и поместите его в $TOMCAT_ROOT_FOLDER/lib. Затем перезапустите Tomcat, и я считаю, что приложение затем подключится к базе данных foo и создаст таблицы для вас .

1 голос
/ 14 февраля 2020

Существуют различные способы настройки соединения для передачи данных JDB C для веб-приложения, размещенного на Tomcat.

JNDI-соединение в Tomcat

В своих заметках вы описываете, как вы используете запись Tomcat Resource, добавленную в файл Tomcat context.xml. Когда я использую этот подход, я также добавляю запись в файл web.xml моего веб-приложения, которая ссылается на запись Resource. Например:

<resource-ref>
    <res-ref-name>treeanno/jdbc</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

Обратите внимание, что имя ссылки на ресурс в моем файле web.xml совпадает с именем Resource.

Сделав это, я теперь могу обратиться к этому источнику данных в Java код моего приложения выглядит следующим образом:

// ABSOLUTELY NOT PRODUCTION-READY CODE! JUST FOR TESTING!

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

...

Context initialContext = new InitialContext();
Context context = (Context) initialContext.lookup("java:comp/env");
DataSource ds = (DataSource) context.lookup("treeanno/jdbc");

Что делает java:comp/env? См. Здесь .

Но сначала проверьте свой URL

Вы можете самостоятельно убедиться, что у вас есть правильный URL-адрес соединения JDB C (и пользователь, и пароль), перед тем, как перейти к описанной выше конфигурации.

Никакие попытки не помогут, если у вас неправильный URL-адрес или источник данных недоступен и т. д. c.

Как проверить? Различные способы - например:

Использовать такой инструмент, как DBeaver . Для этого потребуется указать URL, пользователя и пароль для подключения к MySQL.

или написать отдельное автономное приложение Java (с основным методом) и базовый c . Соединение JDB C .

Или любым другим способом, который фокусируется только на деталях соединения MySQL, за исключением сложностей конфигурации Tomcat.

И, как указал @CHN: все это спорно, если вы не имеете * JDB C баночка файла mysql 1042

Как я уже сказал, это только один способ получить работу -.. но он работал для меня

...