Історія про те, як я робив інтернет-магазин на java

В якості передмови

Більшу частину своєї професійної кар'єри я займався розробкою бізнес-додатків на Java. Програмні продукти призначалися, як правило, для різних фінансових організацій або інших порівнянних з ними за розміром комерційних структур. Розробка велася для Enterprise Level обладнання та серверів додатки. Варто відзначити, що дуже багато java програміст працює саме в цьому секторі. Можливо Ви уявляєте, що це таке - дороге обладнання, широкий канал, швидка пам'ять, база даних Oracle та інші атрибути безбідного IT-життя. Але буває так, що умови змінюються з точністю до навпаки.

Що робити, якщо потрібно створити інтернет-додаток для маленької фірми на хостингу зі скромними ресурсами?

Кілька років тому моя сестричка відкрила магазин одягу в Нижньому Новгороді. Вони з подружкою самі розробляли моделі, закуповували тканини і шили там же, в Нижньому Новгороді.

Звичайно, не було мови про великих серверах, промислових базах даних і інших дорогих іграшках. Потрібно було зробити щось просте, спритне й недороге.

Оскільки я живу в Москві, а вона в Нижньому, потрібен був сайт, інформацію на якому вона могла б міняти без моєї участі (або з моїм мінімальним).

Мені відразу стало видно два шляхи: PHP або Java. Щоб зробити вибір, вирішив провести невеликі дослідження, так як не хотілося винаходити велосипед. Оскільки цей сегмент розробки ПО був для мене новим, я поставив Денвер, подивився на PHP-ні рішення, потім скачав різні java-based CMS-ки, поцікавився у хостерів, що вони можуть мені порадити, запитав у друзів PHP-ник.

У підсумку зробив для себе висновки:

  • дешевий хостинг (в кілька разів дешевше в порівнянні з java, якщо не брати до розгляду Google App Engine.)
  • безліч готових рішень для цього сегмента, як платних так і безкоштовних.
  • я не знаю PHP і не хочу його вивчати
  • хостинг дорожче (не враховуємо Google App Engine, це окрема пісня)
  • більшість рішень великовагових, призначені для великих і товстих серверів. Навіть для Java Pet Store, все одно потрібен нормальний Application Server.
  • я знаю Java досить добре, все-таки досвід роботи більше 8 років, сертифікати SCJP, SCWCD, SCEApart1. Я не вважаю себе Über-програмістом, просто при роботі саме з java я відчуваю себе комфортно і впевнено.
  • бажання зробити саме на java

В силу своєї природної упертості, а можливо з небажання покидати зону комфорту, я вибрав другий шлях. Може це нерозумно і нераціонально, але дико хотілося спробувати. Не потрібні мені ці готові монстрообразность розміру CMS-ки, хотілося зробити щось зовсім просте. Зробити рішення на LAMP тільки на Tomcat 'е і Java' ой.

Завдання, як показав подальший досвід, досить проста, все зробив сам.

вибір хостингу

При всьому багатстві вибору, як виявилося, не так вже й багато альтернатив.

Варіант 1. brim.ru - найвідоміший хостинг в рунеті, що спеціалізується на java, дуже навіть непоганий.

Буде потрібно мінімальний тариф від 2112 руб / рік - 32 (!) Мб оперативної пам'яті.

Реєстрацію доменного імені можна виконати самостійно, наприклад через nic.ru (+620 руб / рік), або через хостера - тоді безкоштовно. Якщо страшно втратити домен, можете запитати потім у хостера дані по свого облікового запису у реєстратора і вивести.

Як надходити, залежить від обставин. У будь-якому випадку, потрібно буде відправити скани документа, що посвідчує особу (тобто паспорта), так що будьте до цього готові.

Зарубіжний хостинг вийде дорожче, або сильно урізаний по можливостям. Можна орендувати VPS і гратися з ним скільки душі буде завгодно, але це буде в рази дорожче і зовсім інша історія.

Варіант 2.Google App Engine (GAE) - Безкоштовно! + Реєстрація доменного GoDaddy.com (10 $)

Функціональні можливості такі ж. В добавок отримаєте різні плюшки від google, але майже скрізь є свої відмінності, особливості.

  • Хочете JSTL + EL? потрібно додавати <%@ page isELIgnored="false" %>
  • Своя база даних
  • Своє API для роботи з картинками
  • Своє API для аутентифікації інтегроване з Google-службами

Якщо перераховувати все, отримаємо цілий букет різних фішок-граблів на які доведеться наступати, якщо Ви до цього мали досвід написання веб-додатків під Java. З іншого боку, Google радує програмістів безліччю цікавого API (наприклад робота з XMMP, тобто чат). Думаю, в подальшому зроблю окремий пост про Google App Engine, в якому розповім про свій реальний досвід роботи з цією платформою.

Зараз сайт працює вже більше двох років на брімовском хостингу. Я їх сервісом цілком задоволений.

архітектура

Архітектура проста, як молоток. Є три компонента, назвемо їх умовно: Фронт. Адаменко і Сховище.

Сховище потрібно для того, щоб отримувати, зберігати і видаляти продукцію по каталогам. Іншими словами це jar-ик в якому знаходиться набір DAO (Data Access Object) для роботи з БД і набір POJO об'єктів представляють сутності (продукт, каталог і т.д.).

Фронт - сам сайт. Тут все просто. Для уявлення використовуємо JSP в зв'язці з JSTL і EL. У парі місць, де зручніше Model 2, використовуємо звичайні сервлети з форвардом на JSP-ку. Struts не потрібен, а тим більше JSF. Позаду JSP-ок з Сервлетами знаходяться класики з бізнес логікою, які лізуть в Сховище.

Адаменко дозволяє додавати, видаляти і редагувати інформацію про продукти і каталогах. Адаменко закрита від публічного доступу. Призначена для звичайного користувача. Так само, як і фронт використовує класи з Місце.

Так, звичайно, можна було своїми пустотливими рученятами лізти прямо в базу даних з JSP-ек або використовувати для цих цілей JSTL SQL теги. На жаль, такий підхід викликає у мене блювотний рефлекс і я не зміг себе пересилити. Довелося дотримати мінімальні рамки пристойності.

Збереження даних

Відразу стало питання ORM або НЕ ORM?

Звичайно можна використовувати:

  • у мене є досвід роботи з цією платформою (знаю, які є підводні камені і т.д.)
  • відмінно документований фреймворк
  • буде жерти ресурси, а у мене всього 32 Mb, немає вже.

Взагалі хотів відразу сказати щодо Hibernate - він звичайно спрощує життя програміста, але багато хто не розуміють, що роблять, коли його використовують. Наприклад, ось мої улюблені граблі, на які багато хто постійно наступають - популярні граблі.

  • Менш популярний в порівнянні з Hibernate, як наслідок - інформації менше.
  • Спритніші буде, але все одно у мене адже 32 (!) Mb.
  • Використовується в Google App Engine. Якщо захочеться потім зіскочити на GAE хостинг, то це буде легше, ніж зістрибувати разом з Hibernate.

iBatis - можна, але навіщо?

Загалом, щоб закрити це питання, моя думка: ORM-и зручні, коли у вас більше десятка різних класів, об'єкти яких потрібно зберігати в базі даних і з кожної робочим тижнем начальство або замовник підкидає Вам як мінімум по парочці нових, змінюючи при цьому старі. Плюс Ви не економити на hardware, а це не мій випадок. І якщо це не так, то ORM не потрібен. Якщо хочете отримати дійсно швидке та робастності додаток, то краще використовувати JDBC (!), І не вірте якщо Вам говорять, що JDBC - це архаїзм.

Особисто мене не особливо стомлює написати кілька select, insert, update, delete, раніше все так робив, і нічого, стало погано.

Ось невелика пам'ятка, що не потрібно забувати (для тих хто не знає):

  1. використовувати preparedstatement
  2. Закривати connection, statement і result set
  3. Використовувати connection pool (dpcp або c3p0)
  4. Не забути про індекси

подання

Звичайний JSP + JSTL + EL. Ось все, що потрібно насправді. JavaServerFaces - не потрібен.

Якщо Ви не маєте художніх навичок, краще не намагатися робити його самостійно. Дизайн варто брати професійний, тобто доведеться купувати. Я купив на стоці, рублів за 500. Ну не Артемій Лебедєв, згоден, але за 500 рублів піде. Все відносно адже, наприклад, перекусити в "граблі" або "Му-Му" буде коштувати приблизно таких же грошей.

Краще витратитися на дизайн, ніж зробити самому, а в підсумку буде какашка (перепрошую за вираз). Навіть якщо друзі і родичі будуть говорити "ну ніби нічого так, для першого разу піде", вони швидше за все не хочуть Вас образити.

Якщо все-таки вирішили робити самі, скористайтеся хоча б готовими палітрами кольорів, їх в інтернеті повно.

Вся справа в деталях

Деталі, в яких буває заритий собака:

Отже, сайт (інтернет-магазин одягу для вагітних). mamberry.ru

Сайт працює більше двох років. Час від часу, у міру появи вільного часу додаю всякі дрібниці.
На SEO та розкрутку гроші не витрачаємо, все-таки це маленький магазинчик, масштаб не той, та й платити гроші оптимізаторів не охота з принципу. Думаю, пройде небагато часу і свій покупець нас знайде. Наприклад, недавно несподівано для себе виявив, що за запитом в Яндексі "одяг для вагітних Львів" сайт виліз в перші рядки.

  • за перший рік витрачено: хостинг 2112 руб / рік + дизайн 500 руб + Яндекс.Директ 1000 руб = 3612 руб.
  • Витрачений час: в сумі вихідні і вечори, витрачені протягом року, дадуть десь місяць чистої роботи.
  • Набутий досвід - безцінний.
  • Щаслива сестра, для якої брат зробив інтернет-магазин.

P.S. Кому потрібна порада або хто зіткнувся зі схожою завданням - пишіть, може що підкажу 😉