Урок 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 ), выполнив аналогичную реализацию, описанную ниже:
- определите ваше локальное соединение для локальных тестов (вместо этого вы можете хранить свои учетные данные облачной базы данных и подключаться к ним, как если бы вы делали это с обычным сервером баз данных):
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);
Этот шаг состоит из создания объектов данных на основе таблиц базы данных:
- 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), и будут сопровождать каждую доставку кода, выполненную через ветку / поток.
Личные наблюдения:
- Будьте внимательны при добавлении / настройке ваших библиотек проектов и сделайте так, чтобы ваш build.xml знал об изменениях вашего проекта, прежде чем предоставлять свой код. Если вы внесете изменения, которые будут работать локально (например, установили библиотеку .jar в вашем classpath в зависимости от вашей локальной файловой системы), и передадите эти изменения, вы в итоге получите поврежденные сборки.
- Не забудьте добавить связанные сервисы в файл manifest.yml, если ваше приложение использует их! Помните: облако предоставляет сервисы, и вы используете их через переменные VCAP_SERVICES, независимо от их значения или поставщика! Если вы жестко закодируете значения некоторых сервисов, приложение будет работать, но это будет означать больше усилий, вложенных в кодирование. Вы хотите облегчить жизнь своему разработчику, а не усложнить его!
- Если ваша сборка не удалась, не отчаивайтесь! При нажатии на номер сборки на сайте DevOps доступны журналы (в расширенном режиме сборки и развертывания всегда отображается последний номер сборки; нажмите на него, и вы увидите историю сборки)
- Если ваше развертывание было неудачным, на сайте DevOps также доступны журналы.
- Ваша сборка прошла успешно, развертывание приложения прошло успешно, приложение работает, но когда вы получаете к нему доступ, вы видите исключение? «Журналы сервера» доступны в Bluemix, когда вы нажимаете « Имя приложения»> «Файлы и журналы»> «Журналы» .
Резюме
Облачная платформа-Java-опыт представляет собой способ кодирования 21-го века, и с помощью этих уроков каждый может решить, насколько легко / сложно адаптироваться к нему. Если взаимодействие с облачной платформой и практикой кодирования казалось легким, то развивайте свои знания с помощью кодирования своего собственного опыта в облаке! Если взаимодействие с облачной платформой, кодирование, отслеживание и развертывание показались сложными, то преодолевайте препятствия, приобретая больше знаний о них и применяя полученные знания!
Возможно, платформа не полностью подготовлена к каждому подходу к разработке, может быть, наши навыки программистов не обновлены до современных тенденций в области кодирования, или нам не хватает опыта, накопленного за годы разработки кода, но не забывайте, что компьютеры сделаны людьми, поэтому обе сущности могут ошибаться. И поскольку оба делают ошибки, оба могут улучшать себя: компьютеры контролируются с помощью кода, который мы можем непрерывно отслеживать, планировать, создавать и развертывать, люди, которые могут постоянно учиться, думать, действовать и сотрудничать.
Учить