Статьи

Пошаговая разработка веб-приложений на Java с использованием IBM Bluemix PaaS (часть 2)

Урок 2. Разработка веб-приложения Java, написанного один раз, и запуск его везде

Для этого руководства я выбрал  второй подход  к разработке на Bluemix ™  (представленный в предыдущей статье —  Пошаговая разработка веб-приложений на Java с использованием IBM Bluemix ™ PaaS (часть 1)  ) . На предыдущем уроке мы создали приложение через панель управления Bluemix ™, связали его со службой базы данных, и теперь у нас есть его первая версия, хранящаяся локально в нашей рабочей среде IDE. Код приложения можно найти по следующему адресу:  https://github.com/ammbra/JSPSample 

Шаг 1 — Настройка среды разработки

Если вы не знакомы с  GIT  и его действиями, для клонирования хранилища вам необходимо указать URL-адрес удаленной ветви (в данном случае главную ветку URL-адреса GIT, доступного на панели управления Bluemix ™) и в качестве учетных данных ваш Bluemix ™. полномочия. Клонирование репозитория имеет то преимущество, что создает локальную ветвь и соединение между локально-удаленными репозиториями; это соединение становится полезным в тех случаях, когда вы хотите автоматически распространять внесенные вами изменения в удаленную ветку без запроса подтверждения учетных данных.

В дополнение к IDE и GIT существует еще одно локальное требование: веб-сервер, настроенный с доменом, доступным для развертывания приложений. Веб-сервер должен быть установлен как среда развертывания для проекта Java, полученного GIT.

Приложение, созданное в Bluemix ™, уже внедрило сервис, но цель нашего приложения — доказать, что простой рецепт, такой как приложение CRUD с JSP, можно быстро и легко разработать, не проводя глубокое исследование того, как Bluemix ™ представляет собой облако. PaaS работают.

Шаг 2 — Подготовьте модель данных и добавьте пример данных

Для нашего приложения у нас есть служба базы данных, доступная и связанная в Bluemix ™. Прежде чем изменять код приложения, давайте создадим несколько таблиц и добавим примеры данных для нашего приложения.

По адресу  https://github.com/ammbra/JSPSample   также имеется файл sql ( bluemix.sql ), содержащий определения таблиц, связи между ними и примеры данных, которые необходимо добавить. Чтобы выполнить команды sql, перейдите на панель мониторинга Bluemix ™ и выберите службу базы данных.

Нажмите на кнопку Launch, и вы должны увидеть это:

В этом представлении выберите « Работа с объектами базы данных», а затем « Запустить DDL»:


Личное наблюдение . При создании службы базы данных вас назначают администратором схемы (которая принадлежит вашей базе данных), имя которой похоже на ваше имя пользователя Bluemix. Используйте эту схему в вашей базе данных sqls.

Шаг 3 — Подключение к базе данных

После привязки экземпляра базы данных SQL к приложению в переменную среды VCAP_SERVICES добавляется следующая конфигурация. Эта информация доступна на панели мониторинга вашего приложения в Bluemix, щелкнув заголовок вашей среды выполнения или нажав «Показать учетные данные» в заголовке SQLDB.

{
   "sqldb": [
      {
         "name": "SQL Database-DB",
         "label": "sqldb",
         "plan": "sqldb_small",
         "credentials": {
            "port": 50000,
            "db": "I_774843",
            "username": "uv4567yt",
            "host": "75.125.155.187",
            "hostname": "75.125.155.187",
            "jdbcurl": "jdbc:db2://75.125.155.187:60000/I_774843",
            "uri": "db2://uvbrndyt:[email protected]:50000/I_774843",
            "password": "8sly8hxv456in"
         }
      }
   ]
}

В коде Java подключитесь к базе данных ( com.tutorial.crudwithjsp.util.DatabaseUtil ), выполнив аналогичную реализацию, описанную ниже:

  1. определите ваше локальное соединение для локальных тестов (вместо этого вы можете хранить свои учетные данные облачной базы данных и подключаться к ним, как если бы вы делали это с обычным сервером баз данных):    
    
    private static String databaseHost = "localhost";
    private static int port = 50000;
    private static String databaseName = "mydb";
    private static String user = "myuser";
    private static String password = "mypass";
    private static String url = "myurl";

    2. 
при развертывании в облаке замените значения по умолчанию значениями VCAP_SERVICES, вызвав метод, подобный следующему:
      

private static boolean processVCAP() {
        // VCAP_SERVICES is a system environment variable
        // Parse it to obtain the for DB2 connection info
        String VCAP_SERVICES = System.getenv("VCAP_SERVICES");
        System.out.println("VCAP_SERVICES content: " + VCAP_SERVICES);

        if (VCAP_SERVICES != null) {
            // parse the VCAP JSON structure
            BasicDBObject obj = (BasicDBObject) JSON.parse(VCAP_SERVICES);
            String thekey = null;
            Set<String> keys = obj.keySet();
            System.out.println("Searching through VCAP keys");
            // Look for the VCAP key that holds the SQLDB information
            for (String eachkey : keys) {
                System.out.println("Key is: " + eachkey);
                // Just in case the service name gets changed 
                // to lower case in the future, use toUpperCase
                if (eachkey.toUpperCase().contains("SQLDB")) {
                    thekey = eachkey;
                }
            }
            if (thekey == null) {
                System.out.println("Cannot find any SQLDB service in VCAP; exit");
                return false;
            }
            BasicDBList list = (BasicDBList) obj.get(thekey);
            obj = (BasicDBObject) list.get("0");
            System.out.println("Service found: " + obj.get("name"));
            // parse all the credentials from the vcap env variable
            obj = (BasicDBObject) obj.get("credentials");
            databaseHost = (String) obj.get("host");
            databaseName = (String) obj.get("db");
            port = Integer.parseInt(obj.get("port").toString());
            user = (String) obj.get("username");
            password = (String) obj.get("password");
            url = (String) obj.get("jdbcurl");
        } else {
            System.out.println("VCAP_SERVICES is null");
            return false;
        }

        return true;
    }

    3. взаимодействовать с базой данных через объект источника данных
DB2SimpleDataSource dataSource = new DB2SimpleDataSource();
dataSource.setServerName(databaseHost);
dataSource.setPortNumber(port);
dataSource.setDatabaseName(databaseName);
dataSource.setUser(user);
dataSource.setPassword (password);
dataSource.setDriverType(4);
con=dataSource.getConnection();
con.setAutoCommit(false);
Шаг 4 — Разработка бизнес-логики

Этот шаг состоит из создания объектов данных на основе таблиц базы данных:

  • com.tutorial.crudwithjsp.model.Department
  • com.tutorial.crudwithjsp.model.Employee

После сопоставления объектов данных с таблицами базы данных мы можем приступить к созданию слоя доступа к данным. EmployeeDAO и DepartmentDAO управляют транзакциями базы данных для каждого из объектов данных; эти DAO содержат соединение с базой данных в своем конструкторе и имеют методы для вставки, обновления, удаления и выбора из каждой из таблиц.

Шаг 5 — Разработка контроллеров

Сервлеты приложения необходимы, потому что они определяют поведение приложения и выбирают представление для ответа; также они сопоставляют действия пользователя с обновлениями модели. В каждом сервлете должен быть создан скелетный код для обработки клиентских запросов (com.tutorial.crudwithjsp.controller.DepartmentController расширяет HttpServlet,  а com.tutorial.crudwithjsp.controller.EmployeeController расширяет HttpServlet). Наконец, создайте сопоставления для представлений в дескрипторе развертывания.

Шаг 6 — Организовать интерфейс приложения

 Представления отображают модель (и) и запрашивают обновления у модели (ей); они отправляют запросы пользователя на контроллер и позволяют ему выбрать, какие из представлений будут отображаться. Заключительный этап процесса разработки Java состоит из:

  • размещение страниц JSP в каталоге WEB-CONTENT приложения
  • настраивая их вид через CSS-файлы и изображения, хранящиеся отдельно.
  • необязательно, добавьте поддержку языка.

Урок 3. Непрерывная доставка, сборка и развертывание с использованием сервисов IBM DevOps

В предыдущих уроках мы обнаружили платформу IBM Bluemix ™, создали приложение и службу базы данных, доступные пользователям через нее; также связь между нашим локальным кодом и кодом, извлекаемым платформой, осуществляется через удаленный GIT-репозиторий. Но есть еще два «магических» шага, прежде чем приложение переходит в фазу выполнения: сборка и развертывание.

Сборка и развертывание поддерживаются через сервисы IBM DevOps, но в дополнение к этим двум сервисам DevOps предоставляются и другие возможности, полезные для разработки приложений:

  • Хостинг для публичных проектов
  • Редактировать код, доставленный в проект (ы)
  • Несколько репозиториев исходного кода
  • Поддержка команд, занимающихся гибкой разработкой и т. Д.

С помощью сервисов DevOps у разработчика есть только одна обязанность: доставлять правильный код, не обрабатывая изменения среды внутри него. Сервисы имеют возможность устанавливать, настраивать или поддерживать то, что было доставлено. Эти сервисы становятся доступными с первым коммитом, сделанным через выбранную систему управления версиями (на данный момент GIT или Jazz), и будут сопровождать каждую доставку кода, выполненную через ветку / поток. 

 Личные наблюдения:

  1.  Будьте внимательны при добавлении / настройке ваших библиотек проектов и сделайте так, чтобы ваш build.xml  знал об изменениях вашего проекта, прежде чем предоставлять свой код. Если вы внесете изменения, которые будут работать локально (например, установили библиотеку .jar в вашем classpath в зависимости от вашей локальной файловой системы), и передадите эти изменения, вы в итоге получите поврежденные сборки.
  1. Не забудьте добавить связанные сервисы в  файл manifest.yml, если ваше приложение использует их! Помните: облако предоставляет сервисы, и вы используете их через переменные VCAP_SERVICES, независимо от их значения или поставщика! Если вы жестко закодируете значения некоторых сервисов, приложение будет работать, но это будет означать больше усилий, вложенных в кодирование. Вы хотите облегчить жизнь своему разработчику, а не усложнить его!
  1. Если ваша сборка не удалась, не отчаивайтесь! При нажатии на номер сборки на сайте DevOps доступны журналы (в расширенном режиме сборки и развертывания всегда отображается последний номер сборки; нажмите на него, и вы увидите историю сборки) 
  1. Если  ваше развертывание было неудачным, на сайте DevOps также доступны журналы.
  1. Ваша сборка прошла успешно, развертывание приложения прошло успешно, приложение работает, но когда вы получаете к нему доступ, вы видите исключение? «Журналы сервера» доступны в Bluemix, когда вы нажимаете «  Имя приложения»> «Файлы и журналы»> «Журналы»

Резюме

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

Возможно, платформа не полностью подготовлена ​​к каждому подходу к разработке, может быть, наши навыки программистов не обновлены до современных тенденций в области кодирования, или нам не хватает опыта, накопленного за годы разработки кода, но не забывайте, что компьютеры сделаны людьми, поэтому обе сущности могут ошибаться. И поскольку оба делают ошибки, оба могут улучшать себя: компьютеры контролируются с помощью кода, который мы можем непрерывно отслеживать, планировать, создавать и развертывать, люди, которые могут постоянно учиться, думать, действовать и сотрудничать.

Учить