Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > PainKiller

Оценить эту запись

Поднимаем сервер в облаке (Jelastic + Java + Tomcat + MySQL + BlazeDS) Часть II

Запись от PainKiller размещена 27.02.2014 в 12:58

Итак, приступим к созданию окружения. Заходим в консоль Jelastic, (если надо регистрируемся, первые 5 дней бесплатные), нажимаем кнопку «Создать окружение», выставляем нужную нам конфигурацию (Tomcat + MySQL). На сервер можно выставить ресурсы (они измеряются в клаудлетах), рекомендую выставить 3 и тогда хостинг будет почти бесплатный. На сервер в корень автоматически загружается проект Helloword.war, его можно скачать, переименовать расширение в zip, распаковать и ознакомится со структурой. Из консоли заходим в phpMyAdmin, тут нужен пароль, который приходит к вам на почту в письме от Jelastic, создаем пользователя (у меня db_user), задаем ему пароль (у меня password), и создаем для него БД (у меня с таким же названием db_user). В базе данных создаем одну единственную таблицу names с одним полем (name) вводим туда имена, они нужны для теста коннекта к БД, особо ленивые могут воспользоваться этим SQL-скриптом:
Код:
CREATE TABLE IF NOT EXISTS names (name TEXT);
INSERT INTO names values ("Nike");
INSERT INTO names values ("Саша");
INSERT INTO names values ("Петя");
INSERT INTO names values ("Вася");
INSERT INTO names values ("Катя");
INSERT INTO names values ("Таня");
Не забываем выставить у поля name кодировку UTF-8, по умолчанию у Jelastic поддержка кириллицы не включена и мы получим каркозябы.

Создаем web-проект в Netbeans (я пользуюсь ей, поэтому буду ссылаться на эту IDE), знакомимся с документацией Jelastic по подключению БД к Java, и надо сказать, что тут у меня возник небольшой затык, т.к. код у них приведен нерабочий, поэтому привожу здесь свою полную, рабочую версию своего класса подключения к БД:
Код:
import java.sql.*;
import java.util.logging.*;
import java.io.IOException;
import java.util.*;

    /**
	 * ...
	 * @author PainKiller
	 */

public class DBManager
{

    private String host = "jdbc:mysql://mysql-env-XXXXX.jelasticloud.com/db_user";
    private String username = "db_user";
    private String password = "password";
    private String driver = "com.mysql.jdbc.Driver";
    
    public List drivers;
    private ArrayList rowValues = new ArrayList();

    private final static String getData = "SELECT name FROM  `names`";

    public Connection createConnection() throws IOException, ClassNotFoundException, SQLException
    {
        try
        {
            DriverManager.registerDriver((Driver)Class.forName(driver).newInstance());
        } catch (InstantiationException ex)
        {
            Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
             rowValues.add(ex.toString());
        } catch (IllegalAccessException ex)
        {
            Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
            rowValues.add(ex.toString());
        }
        Connection connection = DriverManager.getConnection(host, username, password);
        //drivers = Collections.list(DriverManager.getDrivers());
        System.out.println("CONNECTION: " + connection);
        return connection;
    }

    public ArrayList<String> getResults()
    {
        ResultSet rs;
        try
        {
            Statement statement = createConnection().createStatement();
            rs = statement.executeQuery(getData);
            while (rs.next())
            {
                rowValues.add(rs.getString(1));
            }

        } catch (IOException ex)
        {
            Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
            rowValues.add(ex.toString());
        } catch (ClassNotFoundException ex)
        {
            Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
             rowValues.add(ex.toString());
        } catch (SQLException ex)
        {
            ex.printStackTrace();
             rowValues.add(ex.toString());
        }
        return rowValues;
    }

}
Тут в общем то все просто, создаем подключение к БД и выполняем простой запрос, который возвращает нам наши имена из БД и помещает их в ArrayList. В реальном проекте я рекомендую так не смешивать, а сделать класс DBManager с одним методом createConnection() , и в классах наследниках реализовывать всю логику работы с БД. Если же многопоточное обращение к БД вам не нужно (а скорее всего так и будет), можно сделать этот метод статическим. Также обратите внимание, что внутри каждого catch’a мы добавляем в наш ArrayList сообщение об ошибке. Особенностей дебага в Jelastic мы пока касаться не будем, но если что-то пойдет не так, вместо имен мы получим сообщение об ошибке. Также не забываем положить в папку ../web/WEB-INF/lib (путь от корня проекта) файл mysql-connector-java-5.1.17-bin.jar – это jdbc-connector к MySQL, его можно скачать с официального сайта MySQL, я взял его из прилагающегося к докам примера.
Теперь нам нужно написать сервлет, который выведет нам содержимое нашей БД. Создаем в NetBeans класс сервлета, указываем ему контекст “/testdb”, и переопределяем в нем один единственный метод:
Код:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        DBManager dbm = new DBManager();
        //получаем данные из БД, сохраняем их в ArrayList
        ArrayList<String> res = dbm.getResults();
        try
        {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet TestBD</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet TestBD at " + request.getContextPath() + "</h1>");
            //выводим данные в хтмл
            for (int i = 0; i < res.size(); i++)
            {
               out.println("<p>" + res.get(i) + "</p>");
            }
            out.println("</body>");
            out.println("</html>");
        } finally
        {
            out.close();
        }
    }
Собираем проект, зипуем содержимое папки build, переименовываем расширение получившегося файла в war, и загружаем в консоль Jelastic (через вкладку Диспетчер дистрибутивов). Развертываем дистрибутив на нашем Tomcat, указываем такой же контекст (“/testdb”), и переходим по ссылке, которая должна выглядеть примерно так: http://env-XXXXXXX.jelasticloud.com/testdb
где http://env-XXXXXXX.jelasticloud.com/ - это адрес вашего окружения в Jelastic. Если мы все сделали правильно, мы должны увидеть список наших имен из БД, если что то пошло не так мы увидим сообщение об ошибке. В принципе, так можно формировать XML и отдавать его клиенту, но мы будем использовать более быстрый и удобный способ.

В следующем посте подключим BlazeDS, и примем данные с сервера на флексовом клиенте.

Прикладываю исходники серверной части, сразу предупреждаю, что они не рабочие т.к. свои адреса, пароли, явки я палить не стал, да и окружение у вас будет другое, кладу их только для ознакомления. В идеале лучше сделать проект самому с нуля, меньше шансов ошибиться в конфигах и с подключением к БД.
Вложения
Тип файла: rar javaserver1.rar (4.05 Мб, 115 просмотров)
Всего комментариев 0

Комментарии

 

 


Часовой пояс GMT +4, время: 13:53.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.