Как подключить приложение JEE к базе данных MySQL? - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь подключить приложение JEE к базе данных MySQL. Есть много документов и подобных вопросов по этой теме, но ни одно из найденных мной решений не работает (тем не менее, я, возможно, пропустил одно из них, поэтому не стесняйтесь предлагать).

Имя сервера db и имя базы данных joinmyparty

Вот мой код Java для подключения:

public class MySqlConnection {
    private static Connection conn;

    public static Connection getConn() {
        try {
           Context initContext =  new InitialContext() ;
           Context envContext  = (Context)initContext.lookup("java:/comp/env") ;
           DataSource ds = (DataSource) envContext.lookup("jdbc/joinmyparty") ;
           conn = ds.getConnection();

        }  catch (NamingException e) {
            System.out.println("Cannot get connection: " + e);
        }  catch (SQLException e) {
            System.out.println("Cannot get connection: " + e);
        }
        return conn;
    }

Каждый раз, когда я вызываю DAO, я использую этот метод getConn(), чтобы открыть соединение, и закрываю его в блоке finally.

Я записал это в свой /tomcat/conf/context.xml file:

<?xml version="1.0" encoding="UTF-8"?>

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

  <Resource url="jdbc:mysql://db:3306/joinmyparty"
driverClassName="com.mysql.jdbc.Driver" password="mypassword"
username="myusername" maxWait="10000" maxIdle="30"
maxActive="100" type="javax.sql.DataSource" auth="Container"
name="jdbc/joinmyparty" validationQuery="select 1" testOnBorrow="true"/>

</Context>

Я пытался поместить соединитель mysql .jar в /tomcat/lib или в /WEB-INF/lib и в путь сборки. Я также пробовал несколько версий соединителей (но только по одной за раз), особенно чтобы получить тот же уровень, что и в базе данных MySQL.

Когда я вызываю сервлет, который требует подключения к базе данных, у меня появляется пустая страница с методом POST () и ошибка 5OO с методом GET (). Вот ошибка в журнале (я пытался перевести ее как мог, так как я не англичанин):

description : this server has encountered an internal error which prevents it from fulfilling your request

exception

java.lang.NullPointerException
    com.picco.user.dao.UserDao.findByEmail(UserDao.java:40)
    com.picco.user.servlet.Index.doGet(Index.java:56)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

И здесь речь идет о части кода (но, как я уже сказал, все коды, использующие DAO, имеют одинаковую проблему).

try {
            UserDao udao = new UserDao();
            User u = udao.findByEmail(myCookieVal);
            SongDao sdao = new SongDao();
            ArrayList<Song> list = sdao.getAllSongs(u.getId());
            Random rd = new Random();
            int count = udao.count();
            request.setAttribute("currentSong", list.get(rd.nextInt(list.size())));
            request.setAttribute("songList", list);
            request.setAttribute("partyCount", count);
            this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
        } catch(SQLException e) {
            e.printStackTrace();
        } finally {
            HsqlConnection.closeInstance();
        }

Не стесняйтесь спрашивать меня о деталях, если я не описал достаточно проблем.

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

JAR-файл MySQL JDBC принадлежит папке Tomcat /lib.Вы хотите, чтобы загрузчик классов Tomcat сначала его нашел.

Разве ваш DAO не может подключиться?Я бы добавил это в конструктор.

0 голосов
/ 15 марта 2019

Возможно, проблема в том, что вы пытаетесь выбрать пользователя ресурса перед тем, как создать экземпляр подключения, для которого установлено значение null.

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