<
  • Главная
Статьи

Створення програми Java EE, що переноситься між платформами Bluemix і приватного хмари

  1. Що потрібно для створення додатка
  2. Крок 1. Огляд прикладу додатки Java EE
  3. Крок 2. Огляд платформ розгортання
  4. Крок 3. Огляд служб доступу
  5. Крок 4. Упаковка додатки
  6. Крок 8. Ініціалізація бази даних
  7. висновок
  8. Ресурси для скачування

Обіцянка Java «написано один раз - працює скрізь» виконується для хмарних середовищ

Як Java-розробнику, вам хотілося б дотримати принцип Java «написано один раз - працює скрізь». Як це зробити, коли потрібно переносити додаток між IBM Bluemix і локальної хмарної середовищем, такий як SmartCloud Orchestrator або PureApplication System?

При зміні платформи розробки код програми може ненавмисно ставати залежним від платформи, порушуючи принцип «працює скрізь». У цьому керівництві ми покажемо, як ми вирішили проблему відмінностей між двома середовищами в частині підключення до бази даних і ініціалізації бази даних. Код додатка, а також код для ініціалізації бази даних і автоматизації процесу розгортання, додаються.

Спочатку розглянемо код і відзначимо відмінності між платформами в способі підключення до бази даних. І покажем, як ми реалізували переноситься рішення. Потім займемося автоматизацією процесу розгортання і вкажемо кроки, необхідні для упаковки додатки, щоб розгорнути його на обох платформах. Нарешті, ми вирішимо завдання ініціалізації бази даних в Bluemix без шкоди для переносимості програми.

запустити програму отримати код

Що потрібно для створення додатка

  • Обліковий запис Bluemix
  • Обліковий запис DevOps Services
  • Знайомство з Java EE
  • Доступ до примірника SmartCloud Orchestrator або PureApplication

Крок 1. Огляд прикладу додатки Java EE

  • Дизайн: наш приклад програми відображає список рахунків-фактур. Його дизайн відповідає моделі Model View Controller (MVC). Java-сервлет викликає рівень доступу до даних для отримання списку рахунків-фактур, а потім передає його на рівень представлення, який, в свою чергу, застосовує до даних правила форматування і отрісовиваєт веб-сторінку.
  • Код: натисніть кнопку Отримати код вище, і ви побачите вихідний код в проекті DevOps Services. Щоб внести в цей код зміни, натисніть кнопку EDIT CODE.
    Обіцянка Java «написано один раз - працює скрізь» виконується для хмарних середовищ   Як Java-розробнику, вам хотілося б дотримати принцип Java «написано один раз - працює скрізь»
    Потім натисніть кнопку FORK, щоб створити свою власну копію проекту DevOps Service.
    Або можна завантажити його в свою файлову систему, вибравши з меню пункт File> Export, і відредагувати в своєму улюбленому редакторі.
  • Структура бази даних: наш приклад бази даних досить простий: схема, яка містить таблицю для рахунків-фактур. Ось витяг з файлу SampleDatabase.sql: CREATE SCHEMA DEMO; CREATE TABLE DEMO.INVOICES (INVOICE_ID INTEGER NOT NULL, CUSTOMER_NAME VARCHAR (100), SHIPPING_ADDRESS VARCHAR (250), AMOUNT DOUBLE); ALTER TABLE DEMO.INVOICES ADD PRIMARY KEY (INVOICE_ID); INSERT INTO DEMO.INVOICES (INVOICE_ID, CUSTOMER_NAME, SHIPPING_ADDRESS, AMOUNT) VALUES (11222, 'Marco De Santis', 'Via Sciangai 53 000 144 Rome Italy', 100.0); INSERT INTO DEMO.INVOICES (INVOICE_ID, CUSTOMER_NAME, SHIPPING_ADDRESS, AMOUNT) VALUES (11223, 'Ruth Willenborg', '3901 S MIAMI BLVD DURHAM, NC, 27703-9135 United States', 1000.0);
  • Модель: для моделювання нашого об'єкта Invoice використовується простий POJO-об'єкт у файлі src / com / ibm / vapps / model / Invoice.java, що містить всього кілька полів, конструктор і методи getter / setter: public class Invoice {private int id; private String customerName; private String shippingAddress; private double amount; ...}
  • Контролер: сервлет отримує дані з об'єкта доступу до даних (Data Access Object - DAO) і направляє їх на рівень представлення: private static final String INVOICES_JSP_PAGE = "invoices.jsp"; protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List <Invoice> invoices = new ArrayList <Invoice> (); try {invoices = InvoicesDAO.retrieveInvoices (); } Catch (DatabaseException e) {request.setAttribute (ERROR_ATTRIBUTE_NAME, ErrorMessages.ERROR_RETRIEVING_DATA_MESSAGE); } Request.setAttribute (INVOICES_ATTRIBUTE_NAME, invoices); RequestDispatcher rd = getServletContext (). GetRequestDispatcher (INVOICES_JSP_PAGE); rd.forward (request, response); }
  • Подання: рівень представлення реалізується за допомогою JSP-сторінки, яка відображає зміст рахунки-фактури в HTML-таблиці з деякими елементами оформлення: <table> <thead> <tr> <th> Invoice Id </ th> <th> Customer Name </ th> <th> Shipping Address </ th> <th> Amount </ th> </ tr> </ thead> <tbody> <% List <Invoice> invoices = (List <Invoice>) request.getAttribute ( "invoices "); for (Iterator <Invoice> iter = invoices.iterator (); iter.hasNext ();) {Invoice invoice = iter.next (); %> <Tr> <td> <% = invoice.getId ()%> </ td> <td> <% = invoice.getCustomerName ()%> </ td> <td> <% = invoice.getShippingAddress () %> </ td> </ tr> <%}%> </ tbody> </ table>

Весь код можна побачити в файлі WebContent / invoices.jsp проекту DevOps Services .

Крок 2. Огляд платформ розгортання

Для обслуговування нашого застосування Java EE потрібні три речі: контейнер Java EE, СУБД і настройка JDBC для підтримки зв'язку. Давайте подивимося, що пропонують інфраструктури розгортання і як їх використовувати для вирішення нашої задачі.

Крок 3. Огляд служб доступу

Хоча обидві платформи начебто надають одні й ті ж можливості, є тонкі відмінності в конфігураціях зв'язку з їх серверами додатків і базами даних. На відміну від підходу Bluemix VCAP_SERVICES, в SmartCloud Orchestrator / PureApplication VApp нас просять явно ввести ім'я JNDI для пошуку джерела даних.

Уважно вивчивши документацію служби Bluemix SQL Database , Ви помітите дещо ще. Функція автоматичної настройки JDBC створює ресурс JNDI / jdbc / <ServiceInstanceName> і робить його доступним для Liberty.

Orchestrator за допомогою шаблону Virtual Application в SmartCloud застосовує для вилучення джерела даних стандарт JNDI. Однак він також вимагає вказівки JNDI-імені для пошуку в додатку, як описано в документації:

«Передбачається, що для пошуку джерела даних додаток використовує параметри Java Naming and Directory Interface (JNDI). Вкажіть JNDI-ім'я у вікні властивостей зв'язку. Під час розгортання присвоюється JNDI-ім'я, відповідне джерела даних, і це ім'я повинне збігатися з ім'ям, зазначеним в додатку ».

Bluemix підтримує як змінну VCAP_SERVICES, що містить конфігурацію підключення бази даних, так і JNDI-ім'я, по якому можна шукати. Для запобігання залежності нашого коду від Bluemix VCAP_SERVICES ми вибрали стандарт Java EE JNDI.

Наше додаток залишається стерпним завдяки кодування DAO в розрахунку на використання відомого JNDI-імені відповідно до обмежень SmartCloud Orchestrator і присвоєння нашому примірнику SQL Database відповідного імені в Bluemix.

Так що наш файл src / com / ibm / vapps / dao / InvoicesDAO.java виглядає наступним чином:

public class InvoicesDAO {private static final String DATASOURCE_JNDI_NAME = "jdbc / DemoDataSource"; private static Connection getJNDIConnection () throws NamingException, SQLException {Context initialContext = new InitialContext (); DataSource datasource = (DataSource) initialContext.lookup (DATASOURCE_JNDI_NAME); return datasource.getConnection (); } Public static List <Invoice> retrieveInvoices () throws DatabaseException {...}}

Крок 4. Упаковка додатки

  1. Упакуйте файли Enterprise Application EAR (<filename.ear>), слідуючи стандартам Java EE.
  2. База даних поширюється у вигляді файлу SQL, що містить оператори Database Definition Language і деякий приклад даних (<filename.sql>).
  3. В цілому наш додаток складається з архіву EAR і файлу SQL.

Крок 5. Розгортання і тестування в Bluemix

  1. З CLI Cloud Foundry можна безпосередньо перенести файли WAR, але не файли EAR. Для запуску файлу EAR в середовищі виконання Liberty він повинен бути упакованим сервером. Для того щоб зібрати свої файли, виконайте наступні дії.
    1. Вийміть наданий шаблон wlp.zip.
    2. Перейменуйте свій файл EAR bluemix.ear.
    3. Скопіюйте перейменований файл EAR в каталог wlp / usr / servers / libertyProfileServer / apps, перезаписавши існуючий заповнювач.
    4. Переупакуйте структуру каталогів як архів zip; наприклад, server.zip.
    5. Виконайте наступну команду: cf push server.zip
  2. Зв'яжіть екземпляр служби бази даних SQL з новим додатком. Ім'я примірника має відповідати ресурсу JNDI. Ми назвали свій екземпляр служби DemoDataSource, тому що наше додаток повинен шукати рядок jdbc / DemoDataSource. Функція автоматичної настройки створить ресурс JNDI в контейнері jdbc / <service_name>.
  3. Відкрийте додаток для управління примірником бази даних SQL і завантажте файл SQL для ініціалізації бази даних за допомогою наданого сценарію SQL.
  4. Відкрийте програму по URL-адресою, наданою Bluemix.

Крок 6. Розгортання і тестування в SmartCloud Orchestrator

  1. Почніть з вибору шаблону Images & Pattern> Virtual Application Patterns з головного меню. Створіть новий шаблон, натиснувши зелену кнопку зі знаком «плюс».
  2. Перетягніть вузол Enterprise Application з палітри в лівій частині вікна і помістіть його на полотно. Завантажте файл EAR, використовуючи панель конфігурації справа.
  3. Зробіть те ж саме з вузлом DB2 Database і завантажте файл схеми.
  4. З'єднайте вузли, провівши стрілку від додатка до бази даних. Дайте конфігурації те ж саме JNDI-ім'я jdbc / DemoDataSource. Натисніть кнопку Deploy.
  5. Після завершення процесу розгортання той же додаток, яке ми розгорнули раніше, буде працювати в приватному хмарі.

Крок 7. Автоматизація процесу розгортання за допомогою SmartCloud Orchestrator

Обидва описаних вище набору дій можна автоматизувати за допомогою SmartCloud Orchestrator Content Pack for Web Applications . Після того як він і все його залежності будуть встановлені в каталозі SmartCloudOrchestrator, ви знайдете в своєму каталозі Self Service Catalog пропозиції розгорнути додаток Java EE в SmartCloud Orchestrator або в Bluemix. Розглянемо приклад з Bluemix.

  1. Виберіть пропозицію в каталозі Self-Service.
  2. Завантажте сценарій SQL.

    Натиснувши кнопку OK, ви запустите бізнес-процес SmartCloud Orchestrator, який входить в Bluemix і виконує ті ж операції, які ми виконали вручну на кроці 4.

Крок 8. Ініціалізація бази даних

Автоматизація ініціалізації бази даних - ще одне місце, де Bluemix і SmartCloud Orchestrator VApp поводяться по-різному.

Виконуючи дії в Bluemix вручну, ми використовували для користувача інтерфейс для адміністрування бази даних. Однак програмним способом ті ж дії виконати не можна. Більш того, з міркувань безпеки служби Bluemix виконуються у внутрішній мережі, недоступною з Інтернету. Це не дозволяє налаштувати клієнт SQL на підключення до нашої бази даних.

У рекомендаціях по роботі з Bluemix пропонується включити в додаток логіку для підготовки структури бази даних. Однак оскільки ми хочемо зберегти наше додаток стерпним, ми розробили альтернативне рішення з використанням простого допоміжного додатки.

Для свого автоматизованого рішення ми написали додаток Node.js, засноване на наданому Bluemix шаблоні Node.js Cache Web Starter . Цей шаблон надає кінцеву точку HTTP, яка приймає запити POST з SQL-сценарієм в тілі запиту. Цей сценарій запускається службою, пов'язаної з SQL Database. Допоміжне додаток використовується тільки для обслуговування запиту POST, який ініціалізує базу даних, а потім віддаляється.

Ініціалізація досягається шляхом передачі SmartCloud Orchestrator управління сценарієм оболонки, який виконує наступні команди cf CLI:

  1. Вхід в систему з вашими обліковими даними. cf login -a http://api.stage1.ng.bluemix.net -u $ {USER} -p $ {PASSWORD}
  2. Передача упакованого сервера Liberty з параметром -no-start для запобігання негайного запуску додатка. cf push $ {APP_NAME} -p $ {PACKED_SERVER} .zip --no-start
  3. Створення екземпляра служби SQL DB. cf create-service sqldb sqldb_small $ {JNDI_NAME}
  4. Прив'язка служби SQL DB до додатка Liberty. cf bind-service $ {APP_NAME} $ {JNDI_NAME}
  5. Передача допоміжного додатки. cf push $ {APP_NAME} _dbinit -c "node app.js" -p $ WORK_DIR / dbinit.zip -no-start
  6. Прив'язка до того ж екземпляру SQL DB. cf bind-service $ {APP_NAME} _dbinit $ {JNDI_NAME}
  7. Запуск допоміжного додатки. cf start $ {APP_NAME} _dbinit
  8. Відправка HTTP POST з операторами SQL для виконання в базі даних. curl -i -X ​​POST -H "Content-Type: application / x-www-form-urlencoded" --data "@ $ {SQL_FILE} {APP_NAME}" http: // $ {APP_NAME} -dbinit.stage1.mybluemix .net / runSQLScript
  9. Роз'єднання допоміжного додатки з екземпляром служби SQL DB. cf unbind-service $ {APP_NAME} _dbinit $ {JNDI_NAME}
  10. Видалення допоміжного додатки з простору Bluemix. cf d -f $ {APP_NAME} _dbinit
  11. Запуск програми Liberty. cf start $ {APP_NAME}

У SmartCloud Orchestrator база даних инициализируется автоматично механізмом Pattern Engine, який обробляє вхідний сценарій. База даних инициализируется при запуску екземпляра DB2.

висновок

Залишаючись в рамках стандартів Java EE, можна дотримати принцип Java «написав раз - працює скрізь» для IBM Bluemix і хмарної середовища віртуальних додатків підприємства. У цьому керівництві показані відмінності в методах підключення до бази даних і способи збереження переносимості коду з використанням JNDI. Крім того, ми продемонстрували спосіб автоматизації процесу ініціалізації бази даних в Bluemix без додавання коду ініціалізації в додаток. Потрібно лише трохи додаткових зусиль - і ваш додаток буде залишатися незалежним від платформи, на якій воно розгортається.

Ресурси для скачування

Схожі теми

Підпишіть мене на повідомлення до коментарів

Як це зробити, коли потрібно переносити додаток між IBM Bluemix і локальної хмарної середовищем, такий як SmartCloud Orchestrator або PureApplication System?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью