MySql не работает из развернутого Java-приложения - PullRequest
1 голос
/ 11 декабря 2010

Я сделал страницу, используя распорки.При работе на localhost (glassfish) все работает нормально.Однако, когда я копирую WAR-файл на удаленный сервер и запускаю приложение, оттуда форма входа не работает.Это означает, что что-то не так при подключении к базе данных mysql.

Как я могу решить эту проблему?

Фрагмент кода:

Connection conn = null;
    Statement stmt = null;
    try{
        InitialContext ctx = new InitialContext();
        DataSource ds = (DataSource)ctx.lookup("jdbc/SB");


        conn = ds.getConnection();
        stmt = conn.createStatement();
        ResultSet rs = null;
        if(stmt.execute("SELECT * FROM users WHERE username='"+loginform.getUsername()+"' AND geslo=MD5('"+loginform.getPassword()+"') LIMIT 1;"))
        {
    rs = stmt.getResultSet();
        }

        rs.next();

К сожалению, я не могу прочитать с консоли сервера.Что еще я должен сделать, чтобы увидеть исключение (удаленное ведение журнала?)?

Спасибо за ответы.

ОБНОВЛЕНИЕ: - Локально и удаленно работает GlassFish 3.0.1.- Моя рабочая среда - NetBeans 6.9.1.- Локальное развертывание выполняется просто в NetBeans.Я просто нажимаю на название проекта и нажимаю опубликовать.Для удаленного развертывания администратор предоставил мне доступ к FTP-серверу, где я просто скопировал файл WAR.- MySQL сервер находится где-то еще.Дело в том, что он доступен из веб-приложения localhost, но не из того же удаленного веб-приложения.

Ответы [ 6 ]

1 голос
/ 11 декабря 2010

Предполагая, что у вас есть права администратора на удаленном сервере, вам необходимо

  1. Убедитесь, что источник данных "jdbc / SB" существует.(Resources / JDBC / JDBC Resources)
  2. Убедитесь, что «имя пула» в источнике данных существует (Resources / JDBC / Пулы соединений)
  3. Откройте соответствующий пул соединений и нажмите «ping»кнопка.
  4. При сбое команды ping проверьте параметры соединения на вкладке Дополнительные свойства.

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

0 голосов
/ 11 декабря 2010

Это моя weg (предположение с дикими глазами) ....

На вашем локальном сервере приложений установлен драйвер MySql.Ресурс JDBC также определен правильно.Сервер MySql, вероятно, работает на вашем локальном хосте.Вы разработали свое приложение локально в NetBeans.

При развертывании приложения из NetBeans на локальном сервере в среде IDE убедитесь, что на сервере установлен драйвер БД.NetBeans не может сделать это при развертывании на удаленном хосте.Если вы используете какой-либо другой метод развертывания, установка драйвера не является автоматической.Это простой шаг, чтобы забыть.

Вы можете узнать, установлен ли диск MySql на вашем сервере, написав веб-приложение, которое пытается загрузить или использовать один из классов из файла jar драйвера.Если при доступе генерируется исключение, вы, вероятно, можете получить что-то, что работает, включив диск MySql в WEB-INF / lib вашего веб-приложения.

NetBeans также помогает людям создавать и управлять своими определениями ресурсов JDBC.Если вы создаете приложение, предназначенное для базы данных на вашем локальном хосте, ресурс JDBC будет иметь локальный хост как часть URL.Это будет прекрасно работать, когда приложение развернуто на том же сервере, что и сервер БД.Если приложение перемещается на другой сервер, необходимо изменить ресурс JDBC, чтобы учесть возможность того, что сервер БД НЕ находится на локальном хосте.

Если у вас нет доступа администратора к удаленному серверу, выбудут проблемы с определением ресурсов.Если ваш удаленный сервер был доменом / экземпляром GlassFish 3.1, вы могли бы использовать ресурсы области приложения для получения ресурсов, определенных для вашего приложения.

Относительно доступа к файлу журнала.

Если вы используете asadmin для развертывания на удаленном сервере, эта команда поможет вам получить доступ к журналу сервера, если вы работаете с GlassFish v2.x: http://docs.sun.com/app/docs/doc/821-0179/display-log-records-1?l=en&a=view. Вы также можете получить доступ к журналу через консоль администратора.

Если вы используете rcp для развертывания своего приложения, скопировав его в каталог автоматического развертывания удаленного сервера, вы можете посмотреть, можете ли вы скопировать журнал на локальный компьютер.

Например ... если ваш администратор сказал вам выполнить развертывание с помощью команды ftp, например:

ftp> cd /a/b/glassfish/domains/domain1/autodeploy
ftp> put MyGreatWebapp.war

, вы можете получить журнал, выполнив что-то вроде этого:

ftp> cd /a/b/glassfish/domains/domain1/logs
ftp> get server.log

Эксперимент ....

0 голосов
/ 11 декабря 2010

К сожалению, я не могу читать с консоли сервера.

Если у вас есть доступ оболочки к удаленному серверу, решение простое:

  • Измените настройки ведения журнала, чтобы ваше веб-приложение регистрировало файл вместо /, а также консоли.
  • Войдите в систему и прочитайте файл.

(Действительно, если вы использовали Tomcat, то материал, записанный в System.out / System.err, все равно записывается в файл. Возможно, это также верно и для Glassfish.)

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

0 голосов
/ 11 декабря 2010

Вы уверены, что ваша база данных настроена правильно на вашем удаленном сервере? Похоже, проблема с брандмауэром.

0 голосов
/ 11 декабря 2010

Держу пари, что у вас нет прав доступа к БД ...

Попробуйте это в качестве теста ... установите клиент MySQL на другую машину и затем подключитесь к серверу MySQL оттуда.

Если это не удается, то:

Скажем, вы вошли с: Пользователь: test Пароль: пароль

Затем откройте клиент Mysql и введите:

use nameOfDatabase;
GRANT ALL ON nameofDatabase.* TO 'userName'@'ipaddressOfServerOrDNSName';

Это должно сделать это.

Существуют и другие способы предоставления доступа, см. http://dev.mysql.com/doc/refman/5.1/en/grant.html

0 голосов
/ 11 декабря 2010

Некоторые идеи- войти в файл вместо консоли- Распечатать журнал на странице распорок- возможно, у вас нет прав доступа или проблемы с брандмауэром для доступа к БД

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