Building corporate portals with liferay JEEConf 2011

5,263 views

Published on

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,263
On SlideShare
0
From Embeds
0
Number of Embeds
3,112
Actions
Shares
0
Downloads
40
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Building corporate portals with liferay JEEConf 2011

  1. 1. <ul>Построение корпоративных порталов на Liferay <li>Алексей Какунин, ООО «ЕМДЕВ»
  2. 2. [email_address] </li></ul>
  3. 3. Цели <ul><li>Что такое Liferay?
  4. 4. Что дает Liferay программисту?
  5. 5. Куда «копать»?
  6. 6. Какие проблемы? </li></ul>
  7. 7. <ul>Что такое Liferay? </ul><ul></ul>
  8. 8. Лидер в области корпоративных порталов http://www.gartner.com/technology/media-products/reprints/liferay/206214.html
  9. 9. <ul>Liferay это </ul><ul><li>Open Source решение
  10. 10. «Enterprise Ready»
  11. 11. Поддержка стандартов (JSR 168/286)
  12. 12. Много портлетов Out-Of-Box (60+)
  13. 13. Простой и мощный
  14. 14. Инфраструктура для разработчика
  15. 15. Прототип за день! </li></ul>
  16. 16. <ul>Портлеты Liferay </ul><ul></ul><ul><li>Управление всем
  17. 17. Cтраницы, контент, документы, картинки
  18. 18. Блоги, вики, форумы
  19. 19. Организация социальных сетей
  20. 20. Портлеты сторонних производителей </li></ul>
  21. 21. Панель Управления
  22. 22. Альтернативы? <ul>Порталы: </ul><ul><li>JBoss GateIn
  23. 23. Apache Pluto </li></ul><ul>Другие решения: </ul><ul><li>Magnolia
  24. 24. Alfresco </li></ul>
  25. 25. Когда не надо использовать <ul><li>Просто сайт, сайт-визитка
  26. 26. Специализированное решение (Twitter)
  27. 27. Не используется функциональность Liferay
  28. 28. Функциональность сильно отличается от Liferay </li></ul>
  29. 29. <ul>Построение корпоративных порталов </ul>
  30. 30. Мощная WCM <ul><li>Легкое создание веб-страниц
  31. 31. Мощная работа с веб-содержимым: структуры, шаблоны
  32. 32. Основные операции относительно легки «Не-IT» персоналу
  33. 33. Поддержка версионирования
  34. 34. Поддержка бизнес-процессов для публикации </li></ul>
  35. 35. Управление пользователями <ul><li>Интеграция с LDAP/Active Directory
  36. 36. Роли и права доступа
  37. 37. Отражение структуры организации </li></ul>
  38. 38. Сайты Подразделений Организации <ul><li>Отдельный сайт для подразделений
  39. 39. Свои пользователи, роли, права доступа </li></ul>
  40. 40. Платформа для интеграции <ul><li>Интеграция в инфраструктуру предприятия
  41. 41. Документооборот, Бизнес процессы, Enterprise Service Bus, Отчеты, BI, ERP
  42. 42. Интеграция пользовательского интерфейса
  43. 43. Масштабируемость </li></ul>
  44. 44. Интеграция в инфраструктуру предприятия <ul>Еще один кирпич в стене </ul>
  45. 45. Интеграция в инфраструктуру предприятия OS <ul>Windows, Linux, FreeBSD, MacOs X, Solaris, кофеварка? </ul>Application Servers <ul>Jetty, Resin, Tomcat, Glassfish, JBoss, WebSphere, WebLogic </ul>Databases <ul>HSQL, MySQL, PostgreSQL, Oracle, MsSql, DB2, Sybase </ul>Identity Management <ul>LDAP, Active Directory CAS, OpenSSO, NTML </ul>
  46. 46. Организация документооборота <ul><li>Встроенный Документооборот
  47. 47. Доступ через WebDav, интеграция с MS Office
  48. 48. Бизнес Процессы
  49. 49. Различные способы хранения содержимого </li></ul>
  50. 50. Организация документооборота <ul>Liferay 6.1 — CMIS Repositories </ul>
  51. 51. Организация документооборота + =
  52. 52. Поиск <ul><li>Индексация всех объектов
  53. 53. Build-in Lucene
  54. 54. Внешний поисковый сервер (SOLR, OpenSearch)
  55. 55. Можно реализовать свою интеграцию (Google Search Appliance) </li></ul>
  56. 56. Бизнес Процессы <ul><li>Встроенное Workflow API
  57. 57. Kaleo, jBPM3, jBPM4, Activiti
  58. 58. Bonita BPMS, Intalio BPMS, Tibco </li></ul>
  59. 59. Enterprise Service Bus <ul>Liferay + Mule ESB + Magento + CAS </ul>Mule ESB Liferay Magento ...
  60. 60. Еще пример Liferay Alfresco Jasper Reports Server CAS LDAP PostgreSQL
  61. 61. Отчеты, BI, ERP ... <ul><li>Jasper Reports Server
  62. 62. Pentaho
  63. 63. Adempiere ERP
  64. 64. Zimbra Communication Suite </li></ul>
  65. 65. Интеграция пользовательского интерфейса <ul><li>WSPR
  66. 66. IFrame Portlet, WebProxy Portlet </li></ul>
  67. 67. Social MashUp <ul><li>Export портлетов как приложения Facebook
  68. 68. Open Social Widgets </li></ul>
  69. 69. Производительность <ul><li>Small Amazon EC2 instance
  70. 70. 50 одновременных пользователей
  71. 71. 3 запроса в секунду
  72. 72. Habra-эффект </li></ul>
  73. 73. Производительность: Масштабируемость До 3900 транзакций в секунду
  74. 74. <ul>Разработка для Liferay </ul><ul></ul>
  75. 75. Liferay — платформа для разработки <ul><li>Предоставляет полную инфраструктуру
  76. 76. Откуда взять базу, транзакции
  77. 77. BeanLocator: Использование Spring-бинов из других контекстов
  78. 78. ServiceBuilder — упрощение разработки «сервисной» логики. </li></ul>
  79. 79. <ul>Архитектура Liferay </ul><ul></ul>
  80. 80. Архитектура Liferay <ul><li>Стандартное JEE приложение
  81. 81. Достаточно Java SE — любые ОС
  82. 82. Любой сервер — Tomcat, Jetty, WebSphere, Glassfish....
  83. 83. Spring Framework
  84. 84. Hibernate </li></ul>
  85. 85. Среда разработки <ul><li>Базирующийся на Ant Plugins-SDK
  86. 86. Сборка при помощи Maven (Начиная с Liferay 6) </li></ul><ul>http://www.emforge.net/web/russian-liferay/wiki/-/wiki/Main/Среда+разработки+для+Liferay </ul>
  87. 87. <ul>Разработка в Plugins SDK </ul><ul></ul><ul><li>Ext (Начиная с Liferay 6)
  88. 88. Portlets
  89. 89. Themes
  90. 90. Layout Templates
  91. 91. Hooks </li></ul>
  92. 92. <ul><li>Разработка в Plugins SDK </li></ul><ul></ul>
  93. 93. <ul>Среды Разработки </ul><ul></ul><ul><li>Liferay IDE (Eclipse)
  94. 94. Netbeans + Portal Pack
  95. 95. Idea </li></ul>
  96. 96. <ul>Разработка портлетов </ul><ul></ul><ul><li>JSP + Alloy UI
  97. 97. Struts
  98. 98. Spring MVC
  99. 99. JSF, JSF 2.0 (IceFaces & RichFaces)
  100. 100. GWT
  101. 101. Vaadin
  102. 102. Groovy & Grails
  103. 103. RoR, PHP </li></ul>
  104. 104. <ul>Разработка портлетов: почему JSP </ul><ul><li>Каждый портлет – небольшой кусок функциональности
  105. 105. Нет необходимости в темплейтах, сложной структуре
  106. 106. “ Совместимый” внешний вид со стандартными портлетами Liferay
  107. 107. Alloy UI (базируется на YUI 3.0) – достаточно мощный Ajax
  108. 108. Поддержка Liferay & Alloy тегов
  109. 109. Лучше интеграция с Service Builder-ом </li></ul>
  110. 110. <ul>Разработка портлетов: пример таблицы </ul><ul></ul><ul>     PortletURL portletURL = renderResponse.createRenderURL();           // define list of headers we will use in the table      List<String> headerNames = new ArrayList<String>();      headerNames.add(&quot;name&quot;);      headerNames.add(&quot;photo&quot;);      headerNames.add(&quot;price&quot;);      // create search container, used to display table      SearchContainer searchContainer = new SearchContainer(renderRequest,                                                         null, null,                                                         SearchContainer.DEFAULT_CUR_PARAM,                                                         SearchContainer.DEFAULT_DELTA,                                                         portletURL,                                                         headerNames,                                                         &quot;There No Pets To Display&quot;);      portletURL.setParameter(searchContainer.getCurParam(), String.valueOf(searchContainer.getCurValue()));           // get count of pets and list of pets to display on current page      int petsCount = ItemLocalServiceUtil.getItemsCount();      List<Item> pets = ItemLocalServiceUtil.getItems(searchContainer.getStart(),                                                      searchContainer.getEnd());           // set count into search container      searchContainer.setTotal(petsCount);           // fill table      List<ResultRow> resultRows = searchContainer.getResultRows();      for (int i=0; i < pets.size(); i++) {          Item pet = pets.get(i);         ResultRow row = new ResultRow(pet, pet.getItemId(), i);         row.addText(pet.getName(), &quot;&quot;);          row.addJSP(&quot;/pet_image.jsp&quot;, application, request, response);         row.addText(String.valueOf(pet.getPrice()));         resultRows.add(row);      }     </ul>
  111. 111. <ul>Portlets Development: Table Sample </ul><ul><liferay-ui:search-iterator searchContainer=&quot;<%= searchContainer %>&quot; /> </ul>
  112. 112. Разработка портлетов: почему Vaadin? <ul><li>Мощный Ajax
  113. 113. Только Java
  114. 114. Широкий набор виджетов
  115. 115. Хорошая поддержка со стороны Liferay
  116. 116. Если не нужны стандартные портлеты </li></ul>
  117. 117. <ul>Service Builder </ul><ul></ul><ul><li>Средство для автоматической генерации CRUD операций и сервисов
  118. 118. Создает Hibernate Mappings
  119. 119. Создает Hints (файлы содержащие информацию и упрощающие генерацию UI)
  120. 120. Создает Persistance Service (DAO)
  121. 121. Создает Local & Remote Сервисы
  122. 122. Автоматически создает базовые CRUD операции </li></ul>
  123. 123. <ul>Service Builder: service.xml </ul><ul></ul><ul><service-builder package-path='petcatalog'>      <namespace>PetCatalog</namespace>     <!-- Project -->     <entity name='Item' table='PETS_ITEM' local-service='true' remote-service='false'>          <!-- PK fields -->          <column name='itemId' type='long' primary='true'/>                   <column name=&quot;productId&quot; type=&quot;String&quot; />                  <column name=&quot;name&quot; type=&quot;String&quot; />                  <column name=&quot;description&quot; type=&quot;String&quot; />                  <column name=&quot;imageUrl&quot; type=&quot;String&quot; />                  <column name=&quot;imageThumbUrl&quot; type=&quot;String&quot; />                  <column name=&quot;price&quot; type=&quot;double&quot; /> <finder name='Name' return-type='Collection'> <finder-column name='name' /> </finder>     </entity> </service-builder> </ul>
  124. 124. Local и Remote сервисы <ul><li>WebService
  125. 125. JSON сервис
  126. 126. Обязательно выполнять авторизацию! </li></ul>
  127. 127. <ul>Изменения в ядре Liferay </ul><ul></ul><ul>1. Ext plugin 2. Expando (Custom properties) 3. Hooks: </ul><ul><li>JSP Hooks
  128. 128. Property Hook
  129. 129. Service Hooks
  130. 130. Events (Model Listeners) </li></ul>
  131. 131. <ul>Expando: custom properties </ul><ul></ul><ul><li>Позволяет “повесить” на любой объект custom properties
  132. 132. Имя и тип property
  133. 133. Поиск по custom properties
  134. 134. Отображение custom properties в стандартных диалогах </li></ul>
  135. 135. <ul>Hooks: Events </ul><ul></ul><ul><li>StartUp Event
  136. 136. ServicePreAction Event
  137. 137. Model Listeners: </li></ul><ul>public class GroupListener extends BaseModelListener<Group> { @Override public void onBeforeRemove(Group group) throws ModelListenerException { try { // remove project associated with group Project project = ProjectLocalServiceUtil. getProjectForCommunity (group.getGroupId()); if (project != null ) { ProjectLocalServiceUtil. deleteProject (project); } } catch (Exception ex) { throw new ModelListenerException( &quot;Cannot remove project&quot; , ex); } } } </ul>
  138. 138. <ul>Проблемы </ul><ul></ul><ul><li>Мало документации, на русском 0
  139. 139. То что есть зачастую бесполезно
  140. 140. Достаточно бесполезные форумы
  141. 141. Медленный баг-фикс в Community Edition
  142. 142. Отсутствие тесной интеграции с J2EE технологиями </li></ul>
  143. 143. Решение <ul><li>Исходный код Liferay
  144. 144. Коммерческие сервисы (курсы, Enterprise Edition) </li></ul>
  145. 145. Ссылки <ul><li>Http://www.liferay.com
  146. 146. Http://www.emforge.net/web/russian-liferay
  147. 147. Http://www.emdev.ru </li></ul><ul></ul>

×