Assistance with Open Source adoption


Internal secrets of Liferay Screens: SendBuffer

Liferay - Mon, 05/30/2016 - 17:21
Lately, we’ve being working on an event tracking system for Liferay Screens. Nothing fancy: just another Flurry or Google Analytics for mobile apps. The best part is the information collected will be used to feed the Audience Targeting Rules Engine, so you’ll be able to segment your users based on their behaviour on your mobile apps.   Anyway, on the mobile end the procedure is quite simple:
  • Some screenlets (or any other part of the app’s code) will generate and add tracking events (including metadata information). You know: this button has been clicked, that view has been shown, and so on.
  • When the event count reach one specific number, the events are batched and submitted to the server. Older events are sent first, so technically the events live in a FIFO queue.
  • The submission may take several seconds, so while this is working, more events can be generated and added to the queue.
  • When the submission is successfully completed, the submitted events are finally discarded. If an error occurs during the submission, those events are added back to the  queue (in order to try again later).
After thinking twice about these steps, we realized this follows a mixture of producer-consumer together with a write-buffer pattern.   It’s a producer-consumer because:
  • There are several processes (threads, queues, whatever) creating and adding events to the queue. These are the producers.
  • There is a process removing items from the queue and sending them to the server. This is the consumer.
  • The submission is an asynchronous process. While it’s in progress, the queue is accepting new events.

And it’s a write-buffer because:

  • The buffer (or queue) can be filled. There’s a size that represent the capacity of the buffer.
  • When the buffer is full, it’s flushed. Those items are “written” (aka submitted) to the server.
  • When the submission is successfully completed, the items sent are discarded. If there’s an error sending the items, the items are added back to the buffer (and they will be re-sent later).

So with these patterns identified, we coded a Swift class that help us to handle this scenario properly.

We called it “SendBuffer”, and it’s useful for several scenarios:
  • If you need to upload items in a background process, but you want to do it in batches (instead of one by one)
  • If you need a typical producer-consumer pattern, just create the SendBuffer object with size 1. As soon as one item is added to the buffer, it will be processed right away. The buffer will continue processing items while it has more items.

Also you can find a sample application that shows graphically how the buffer behaves.

In the right you can see how items are moved back and forth:

  • When an event is added, it appears in the buffer area.
  • When the buffer gets full, the batch is moved from the buffer to the "sending area"
  • When the (fake) submission is completed, the events are moved from "sending area" to sent area. But if the submission is failed, the events are added back to the buffer.

If you see it useful, just star it in Github!

Jose M. Navarro 2016-05-30T22:21:57Z
Categories: CMS, ECM

Nesting Liferay JSON Service calls

Liferay - Mon, 05/30/2016 - 08:01

One really cool feature of Liferay JSON web services is the ability to nest service calls.

For example, what if you would like to update a web content journal article via JSON? The /journalarticle/update-article method requires the following four parameters: 


Parameter Description groupId ID for the Liferay site articleId ID for the web content journal article content XML representation of the web content version Article version number

groupId, articleId, and content are easy to come up with. But how can I find the article version number? I could make a separate call to get-article to retrieve the article metadata including the version number, but this would add extra complexity (and an extra network call) to my client code. 

Instead it is also possible to automatically look up the version number while updating with a nested call like this: 

var cmd = { "$article = /journalarticle/get-article": { "groupId": article.groupId, "articleId": article.articleId, "$update = /journalarticle/update-article": { "@version": "$article.version", "groupId": article.groupId, "articleId": article.articleId, "content": xml, "serviceContext.scopeGroupId": article.groupId } } };

How cool!

Allen Ziegenfus 2016-05-30T13:01:08Z
Categories: CMS, ECM

Liferay Connected Services - 2016 Q2 Updates

Liferay - Mon, 05/30/2016 - 05:17

Last two months Liferay Connected Service (LCS) team spent testing system for upcomming changes related to subscription management. It should allow enterprise customers more flexible license management and elastic subscription mode.

I guess now I have enough time to put some news for all of you who follow LCS progress.

  • in the next release of LCS system we  will stop support and development for all 6.1.x platforms

  • browseable page metric history have been available since April 2016
  • notifications/alerts improvements were deployed early in May 2016
  • LCS system is tested and ready for incoming family of 7.0 portal based solutions

I hope you will find time to explore and evaluate the leatest LCS features soon.

Igor Beslic 2016-05-30T10:17:17Z
Categories: CMS, ECM

Three Ways to Embrace Digital Transformation at Liferay Symposium

Liferay - Thu, 05/26/2016 - 19:11


3 Reasons to Attend #LSNA16

As customers drive how they interact with brands, companies need to stay ahead of the curve with tools that deliver personalized digital experiences wherever, whenever they engage with your business.

Liferay Symposium gives you a forum to learn from leading industry experts, access key content for digital transformation and network with new peers.


  Build Engaging Experiences           Take in fresh keynote presentations, breakout sessions, deep dives and speed consulting, and learn how to create personalized experiences across all channels from an integrated digital experience platform.       Gain Valuable Customer Insights   See firsthand how our clients are attracting and retaining customers through dynamic case studies, customer stories, and product demos on content targeting and using data to increase conversion.       Be a Digital Leader in Your Industry   Learn best practices for redefining your company's digital strategy with actionable takeaways from Liferay founders and developers, industry experts, and world-class clients.  



Angela Wu 2016-05-27T00:11:21Z
Categories: CMS, ECM

Liferay DXP数字体验平台,荣耀绽放:端对端的客户体验

Liferay - Tue, 05/24/2016 - 10:26

知名软件厂商Liferay,已经宣布Lifeay Digital Experience Platform(DXP)的面世。





Liferay的产品副总裁Edwin Chueng,阐释了这一观点: “当今的商务市场,早就超越了仅将目光放在用户的体验这一层面。Liferay DXP通过革命性的创新体验,帮助企业博得客户信心,赢得竞标,开创更多销售机遇。在深度整合的商务流程系统中,企业可以全面掌握客户偏好和历史事件,及时为客户提供优质资源及建议。”   Liferay DXP:惊鸿一瞥

Liferay DXP平台上,销售、市场,客户支持与服务团队可以真正的为创造优质的客户体验而协作。Liferay可以汇集不同的系统中的信息,以更全面的方式在平台上展现出来借以优化客户互动体验,整合企业运维流程。

Liferay DXP也可以促进合作伙伴和员工与客户间的交流,借以缔造更佳的企业印象。 通过以下几个方面,Liferay将其实现:  
  • 弹性架构 - 以变应变:通过高复用性的微服务与高整合性的应用,Liferay可以快速实现数字策略以适应不断更新的尖端技术。

  • 体验管理:基于精准的大数据信息,从促销活动一直到客户服务处理,每一个直接面对客户的商务环节都可以量身打造。

  • 单一客户视图(SVC):基于企业中不同的数据采集点,例如:客户情绪、兴趣点或重要对话,Liferay DXP将所有信息糅合一体,为企业提供单一的客户资料视图。

  • 定向数据:通过使客户访问视频、推广链接、社区活动与社交资料来丰富客户体验。

  • 与新兴技术对接:DXP设计初衷就是为了支持新兴的移动前段框架。这些框架被众多移动前段开发者钟爱和广泛应用。



  1. 真正涵盖(促成)客户旅程:秉承Liferay portal的一贯作风,Liferay DXP更加的适应整个的客户生命周期。生命周期通常是指客户从观望(网站匿名访客)到转变成客户(注册)再到拥护(在客户门户与客户服务系统中)的过程。其他关注CMS产品通常只关注在客户的观望周期。基于Liferay以往的丰富经验,Lifeay在银行业的地位独一无二。

  2. 岂止于客户,广泛的目标受众:除了客户之外,Liferay DXP也是为企业合作伙伴和员工设计的。设计的初衷是为了确保Liferay DXP能够胜任于企业内部协作和效率优化。

  3. 完善的商务平台:Liferay DXP缔造了丰富的协作功能,基于整合后台系统,将更多独立业务部门的信息整理有效利用。

更多信息,请访问Liferay DXP官网。   原文链接: 原文作者:Kaya Ismail Neil Jin 2016-05-24T15:26:11Z
Categories: CMS, ECM

Creating configurable DDL templates with structured web content

Liferay - Tue, 05/24/2016 - 05:45

Liferay DDLs are quite useful for dealing with small sets of custom data, for which it would be overkill to create a new service. Our event microsites use DDLs extensively for displaying speaker, agenda and sponsor information. Through the the Skinny JSON Provider, our DDL data information is even served via JSON-WS for use in the Liferay Events App. How cool!

DDL templates perform the magic of transforming custom DDL data to HTML and are easy to write in Freemarker or Velocity. 

But what if you need to reuse DDL templates in various contexts? DDL templates do not, as far as I am aware, offer any options for configuration. For example, we have a common agenda DDL definition for Liferay events. Since the events themselves take place in different countries there are many aspects of the displayed agenda that are country or region specific (date formatting, header text, etc.). With standard DDL templates, there is no simple way to reuse a DDL template in different contexts.

One idea to solve this problem is to use custom web content structures. A web content structure is created with a field for the DDL record set id and whichever other fields need to be configured. Then a web content article is created where the particular record set id is set and the standard Web Content Display portlet is used to display the template. 

In the code there is hardly any difference. Instead of using the automatically set record set id value ( $, we instead use our own field definition, e.g. "record_set_id" to retrieve and process and DDL records in the template: 

## Get DDL Records #set ($ddl_records_local_service = $serviceLocator.findService("com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService")) #set ($record_set_id = $getterUtil.getLong($ #set ($records = $ddl_records_local_service.getRecords($record_set_id))

Then we are free to define whatever other fields we need for further customizing the DDL display. This has the following advantages compared to using standard DDL templates:

  • DDL template code can be reused in more situations leading to stronger more generic templates as opposed to one-off solutions for each page
  • The display of DDLs can be configured by non-programmers 
  • Instead of having to supplement DDL templates with related web content for headers and other elements, these elements can be built directly into the DDL template making pages easier to maintain. 

Here is an example of using this approach to configure the display of sponsors. The header text can be configured in the "sponsor_header_text" field. The text for displaying "Platinum" sponsors can be configured in the "sponsor_text" field. 


One thing to keep in mind is that you might run into problems with cached DDL data, as by default web content templates are cached. 

DDL Templates and Web Content structures - two great tastes that taste great together!















Allen Ziegenfus 2016-05-24T10:45:57Z
Categories: CMS, ECM

Bootstrap 3 in Liferay 6.2, yes! that's possible

Liferay - Mon, 05/23/2016 - 18:02

Hey guys, today I am going to speak about a concurrent topic, how to replace Bootstrap 2.3.2 CSS in Liferay 6.2 for new Bootstrap 3.x, I have received a lot of questions about it, and I helped all I was able, but I think this post and GitHub repository with a theme example can help more than some emails.


Before all else, I would like to say that the solution which I provide today is a personal work (not official) and only one of many ways to achieve it but for me it is the easier way because we only change the theme.


Yes, I've written the word "replace". This solution remove Bootstrap 2.3.2. and add Bootstrap 3.x (4 in the near future). It is not a way to put Bootstrap 3 on top of Bootstrap 2.3.2, I can not recommend that solution for many reasons, for example: it would duplicate the CSS weight, there would be a lot of class conflicts, or it would be very difficult to define browsers compatibility in your project.

Of course, we can not replace all Bootstrap 2.3.2 classes references along Liferay portal only when you theme is applied, but they are not many classes to rescue, so we will extend those old classes from new Bootstrap 3.x equal clases, like an example: span6 will work as col-md-6.

it can sound hard but no worries, let's see step by step (or go directly to GitHub repository with an example):


We are going to create a new _styled theme based on Boostrap 3.x, so first of all, you will need create a new theme using new SDK based on gulp or normal SDK.

Did you know where Bootstrap 2.3.2 CSS files are located in your theme? No worries, they are in “css/aui” directory, so let's work into this directory.


1º Create new aui.css file in “css” directory, then we must delete Bootstrap 2.3.2 references in this aui.css, in this way Bootstrap 2.3.2 will be removed from our theme (files will be there, but they won't be loaded).




2º Now we are are going to add the new Bootstrap, so let's go to copy "Bootstrap 3.x sass-version" files into a new directory inside “aui” called "bs3" and reference it in aui.css.

We can use differents ways to get Bootstrap 3.x sass-version, download directly from Bootstrap-sass GitHub repository, using Bower, npm, gem or compass, as you prefer.




3º Well, we have interchanged Bootstrap versions, but all old classes which have been deleted/renamed in Bootstrap 3.x do not look well so they should be created as an extension of the equal classes in Bootstrap 3.x, for this we will use my CSS file named "_bs2_extender.scss" which will do all basic extensions.

Some examples about what this file does:




4º Some Liferay CSS components do not look so well as they should because they were based on Bootstrap 2.3.2, so to fix it we will add a file called “_bs_liferay_fixes.scss” which contains some adjustments.




Now we can deploy the theme and we should see something like this:




It’s done! you have a new Bootstrap 3.x_styled-theme with which you will be able to use as a base to build your Bootstrap 3.x Liferay 6.2 themes.

In “_bs2_extender.scss” file I have extended the classes I consider the minimum to work well in Liferay 6.2, but feel free removing or adding, even collaborating in GitHub repository of this theme.

I recommend to use this theme when we want to use Bootstrap 3.x upgrades like its grid or responsive facilities. If we are still writing Bootstrap 2.3.2 markup, It wouldn’t make much sense, so be smart about what Bootstrap version do you want to use.


Thanks guys! More info about what I’m working on, Liferay themes or Liferay general world on my twitter @marcoscava

Marcos Castro 2016-05-23T23:02:50Z
Categories: CMS, ECM

Dorka a Liferay színpadán

Liferay - Fri, 05/20/2016 - 05:58
Végre egy hölgy is csatlakozik a nyilatkozók sorához. :)     1. Több, mint két éve dolgozol a Liferay-nél, Customer Advocacy Specialist pozícióban. Mik a feladataid?  - A CAS csapat tulajdonképpen úgy funkcionál, mint egy teljeskörű ügyfélszolgálat. Mi biztosítjuk az EMEA support mindennapi, zökkenőmentes, adminisztratív működését, valamint egyfajta villámhárítóként is szolgálunk az ügyfelek, a partnerek, a sales és a support csapat komplex hálózata között. Nekem ebben az a konkrét feladatom, hogy minden résztvevővel együttműködve minden adminisztratív és kicsit technikai jellegű kérdést megválaszoljak, támogassam az ügyfél elképezeléseit, ugyanakkor segítsem a support munkáját is, hogy mindenki a legjobb megoldást kapja és boldogan nyugtázza a napot. :) Az általános adminisztratív és támogató feladatokon kívül két nagyobb ügyfél személyes kapcsolattartója is vagyok, ami azt jelenti, hogy bárminemű kéréssel, kérdéssel problémával soron kívül fordulhatnak hozzám, és azt megpróbálom összeegyeztetni a support csapat lehetőségeivel.   2. A Liferay előtti munkáid más területekbe engedtek betekinteni. Mivel foglalkoztál ezelőtt és azok a tapasztalataid hogyan segítik a Liferay-es munkádat? - Dolgoztam a repülőtéren check-in és gate agent pozícióban (tudod akik felveszik a csomagokat meg beszállókártyát nyomtatnak kedvesen a check-in pultban, valamint felügyelik a boardingot a beszállítókapuknál); illetve voltam külföldi páciensekkel foglalkozó fogászati klinikán is ügyfélkapcsolati koordinátor. A reptéren rengeteget tanultam a pontosságról, fegyelemről, lehetetlen kérések teljesítéséről, az emberi természetről, a saját határaimról, a csapatmunkáról. A fogászat pedig nagyfokú türelmet, teherbírást, figyelmet, problémamegoldást és emberi kapcsolatokat adott nekem. Ezek mind abban segítenek, hogy a jelenlegi munkámat a lehető legjobb tudásom szerint láthassam el ebben a pozícióban, akár angol akár magyar nyelven zajlik a kommunikáció. Mert ugyan itt nincsenek személyesen emelkedett hangnemben reklamáló, ideges utasok vagy páciensek, helyette viszont vannak fizető ügyfelek, akik a lehető legmagasabb színvonalú szolgáltatást és segítséget várják el tőlünk, a pénzükért cserébe.    3. Bár a CAS csapat is a Support része, ez mégis más, mint amit a CSE kollégák csinálnak. Miben különbözik ez a feladatkör? - A fő különbség az, hogy a CAS a Liferay - mint termék - majdnem minden résztvevőjével találkozik és kommunikál. A sales-es nekünk szól, ha várható egy új ügyfél érkezése, vagy ha egy ügyfél supportját meg kell újítani vagy sem. A könyveléstől kapjuk meg a zöld lámpát, ha adminisztrálhatjuk az új vagy meglévő ügyfelek soron következő vásárlásait. A partner vagy maga az ügyfél jelentkezik, hogy milyen licensz kulcsokat gyártsunk. A support szól, ha valamit egyeztetni kell az ügyféllel és/vagy a sales-szel. Még nem meglévő ügyfelek keresnek meg, hogy tőlünk kérjenek ideiglenes licenszet amellyel ki tudják próbálni a Liferay-t és ha tetszik, később meg is vásárolják a teméket. Tulajdonképpen olyanok vagyunk, mint egy első védvonal és lépcsőfok a support előtt, próbáljuk a legjobb benyomást tenni az ügyfélre ugyanúgy, mint ahogy támogatni a kollégákat.   4. Mi a legjobb része a pozíciódnak, illetve a Liferay-nek?  - A széleskörű kapcsolattartás és az együttműködés lehetősége, valamint az ezt a folyamatot követő bizalom az, amit a legjobban szeretek a munkámban. Ha meg vannak velem elégedve, később is hozzám fordulnak majd és ha jól végeztem el a munkám, talán mindenkinek könnyebb lesz egy kicsit a végén.  A Liferay legjobb része, hogy barátokra találtam, ezenkívül szerintem a fiatalos csapat, a lendület, a jó kis beszélgetések mind-mind emelik a hangulatot, így jó bejárni.   5. Dráma szakon végeztél. Ezen tanulmányaidat hogyan alkalmazod a munkában vagy akár az élet más területein?  - A munkám során a leghangsúlyosabb drámai képesség amit gyakorlok, az az empátia. Általában írásban kommunikálunk a másik féllel, így ha felmerül bármilyen kérés, kérdés, probléma, a válaszadás előtt mindig van időm elszámolni 10-ig, belegondolni kicsit a másik helyzetébe és megfogalmazni a gondolataimat. Minden leírt szónak hangsúlyosabb jelentése van, mint mondjuk egy személyes beszélgetés során, és emiatt sokkal jobban oda kell figyelnünk, hogy milyen köntösben fogalmazzuk meg a válaszainkat. Ennek az a jó oldala, hogy ha valamilyen ügyben megkeresnek minket, akkor együtt tudunk érezni az ügyféllel (sales-essel, kollégával, partnerrel) és azonnal felajánljuk a segítségünket kedves, előzékeny körmondatokkal fűszerezve.  Ha az ember úgy érzi, van aki megérti és figyel rá, ráaásul az a valaki még udvarias is, máris sokkal kevésbé fogja borúsan látni az aktuális helyzetét és örülni fog a segítségnek. Az élet más területein még tanulom alkalmazni az empátiás készséget, hiszen előfordul, hogy személyesen sokkal harsányabb, hirtelenebb és nyersebb vagyok, ez érthető módon néhány ember számára furcsa, félreérthető vagy akár ijesztő is lehet. Emiatt ezeken a beállításokon még mindenképpen finomhangolnom kell. :)   6. Mondhatni, hogy a "színpadiassága" miatt vettél részt az idei Liferay Farsang szervezésében? :)  - Igen, abszolút, mivel mikor egy másik szerepet kell megtestesítenem, olyankor nagyon otthon érzem magam a bőrömben és elmúlik minden gátlásom, amivel a magánéletem során esetleg jobban meg kell küzdenem. Ráadásul “ismerősök” között egyáltalán nem érzem cikinek vagy kellemetlennek a szószóló szerepet, nagyon kevés dolog feszélyez, mert az ilyen dolgokat úgy fogom fel, mintha egy színházi előadás lenne. A Farsang ötlete alapból nagyon tetszett és arra gondoltam, hogy ha a többiek is benne vannak, akár egy jó program is kerekedhet belőle a végén, amit persze vezényelni kell, hogy mindenki érdeklődését fent tudjuk tartani. Így esett rám a választás, hogy ha már annyit beszélek meg hangoskodom (sic!) akkor legyek én a műsorvezető.  Persze meg kell jegyeznem, hogy a résztvevő kollégák, a főszervező Nóri és Imi, valamint a csodálatos Developer Team három zsűrije nélkül a jó hangulat nem jöhetett volna létre. (Taps :D)   7. Mi teszi különlegessé az ilyen és ehhez hasonló céges rendezvényeket?  - Többek között az is, hogy az ilyen események alkalmával egy kicsit mindenki felenged, ellazul és esetleg olyan kollégákkal is szóbaelegyedik, akikkel a mindennapi munkája során azelőtt nem sok kapcsolódási pontja volt. Ilyenkor a jókedv, a zene, a csocsó, a finom kaják, a sör, az üdítők mindenkit közelebb hoznak egymáshoz, így ezek a rendezvények szorosabbá és barátibbá teszik a kapcsolatokat a kollégák között.  Andrea Tamás 2016-05-20T10:58:24Z
Categories: CMS, ECM

My First Liferay 7 Project

Liferay - Thu, 05/19/2016 - 15:10

While preparing for our annual Dutch Liferay User group meeting I tried to develop a simple MVC portlet accessing the Liferay 7 API. Somehow this took more time than I had expected - probably because the new blade tooling takes some getting used to.

My purpose was to write a portlet invoking the UserLocalService in the new non-static way instead of using the now obsolete UserLocalServiceUtil.

First I needed to set up the tools jpm and blade - this can be done by following the instructions on the page

Then we create a new workspace:

blade init -f workspace

This will create a new subdirectory 'workspace' containing all the basics you need to start developing. Now you start the server by issuing the following command - it will download the LR code into the workspace/tomcat directory:

blade server start

This will start LR7 on the usual http:/localhost:8080

Now let's create an MVC portlet and add some code:

blade create -t mvcportlet -p demo.lnlug -c MyMvcPortlet my-mvc-portlet-project

This instructs blade to create a subclass of MVCPortlet called MyMvcPortlet in package demo.lnlug in a project my-mvc-project created under modules.

When you deploy this portlet into Liferay with the following command:

blade deploy

you will see the following message in the LR logs:

20:14:53,570 INFO [Thread-110][BundleStartStopLogger:35] STARTED my.mvc.portlet.project_1.0.0.201605192014 [483]

Now I added the following method to MyMvcPortlet:

@Override public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { int numberOfUsers = getUserLocalService().getUsersCount(); renderRequest.setAttribute("numberOfUsers", numberOfUsers); System.out.println("Number of users = " + numberOfUsers); super.doView(renderRequest, renderResponse); }

supported by the following code in the same class:

@Reference public void setUserLocalService(UserLocalService userLocalService) { this.userLocalService = userLocalService; } public UserLocalService getUserLocalService() { return userLocalService; } private UserLocalService userLocalService;

This annotation @Reference is interesting, it is the OSGI annotation org.osgi.service.component.annotations.Reference used to refer to a Component deployed by some other OSGI bundle. For this to work you need to add one single line to build.gradle:

compile 'com.liferay.portal:com.liferay.portal.kernel:2.0.0'

It took me a while to figure this dependency out. In the end I found it in one of the blade samples projects to be found here:

Finally we have to display the variable numberOfUsers in our view.jsp:

<%= request.getAttribute("numberOfUsers") %>

Now after a new deployment of our portlet we'll see the number of Users displayed on the page.

Willem Vermeer 2016-05-19T20:10:04Z
Categories: CMS, ECM

Smart content using category properties

Liferay - Wed, 05/18/2016 - 15:22
If you've been using the Liferay CMS, you are probably familiar with a journal article's Categorization tab wherein you can specify the tags and the categories for the journal article. If you aren't familiar with those terms, you should read up on Categorization. Tags and categories are indispensable to a well-defined content architecture, apart from being the most convenient way to organize your content. More here:   The rest of this article assumes you are familiar with content categories. One little feature of categories that you may not be aware of is that a category can have one or more properties tied to it. If you knew about that already, you can safely skip this post and save yourself the 15 minutes it will take to read. But if you didn't know that, or you did but never really dug into it, read on.   Here is a screenshot of my experimental Versified site that lets you browse some of my classical poems. For the purposes of this post, I originated the following requirement:   Present all poems in a card layout wherein each card displays the summary of the poem and is color-coded based on the category it belongs to.   You can get to the Categories screen by clicking Admin / Content / Categories. As you can see, I created a new vocabulary on there called poems. Then I added a few categories to that vocabulary to represent some forms of classical poetry.   But I didn't stop there. A category can have one or more properties, where a property is any arbitrary name-value pair that makes sense for your business needs. So if you were to click the sonnet category you would see that it has one property named color_code which takes a HEXA HTML color code, as below.   You can click Edit to see how that property was added, see below.     In order to let me code to this specific property name, I went ahead and defined that same property for the remaining categories in my poems vocabulary. In effect, Sonnets are to show up in Midnight Blue (our category of interest in this post), Silly Rhymes in Red, Free verse in Dark Gray, Hybrid metered poems in Orange, and so on.   I then created some content items and assigned each of them an appropriate category. Screenshots below are provided for those new to Liferay CMS - they simply show how I (1) viewed the list of content (Admin / Content), (2) selected a content item to edit, and then (3) clicked the Categorization tab to select a category in the poems vocabulary. Don't forget to click Save to publish your changes.     Now to tie it all together. Here's what I know:
  1. Since I have to present multiple content items, I am going to need the Asset Publisher Portlet.
  2. Also I need to display the information in a card layout. So I can't use a stock ADT (Application Display Template), such as Abstracts. Instead I will need to craft a custom ADT.
  3. Further, I need to be able to color code each card based on the category that the content item is tied to. 
  In coding my custom ADT, I could use an inelegant algorithm whereby we check the category name and compare it with a known list of categories, and then use a color code associated with each category. But such a programmatic approach is inflexible and confusing to maintain. That is what makes the category properties I created above an attractive declarative option.   Here is my final custom ADT that addresses the above. Note: I just hacked in styles rather than define clean CSS classes because I honestly don't care - not the point of this post. (Don't judge me.)   #set ($vocabularyLocalService = $serviceLocator.findService("com.liferay.portlet.asset.service.AssetVocabularyLocalService")) #set ($vocabularies = $vocabularyLocalService.getGroupVocabularies($getterUtil.getLong($groupId)))   ### we are interested in one specific vocabulary - poems #foreach($voc in $vocabularies)     #if ($ == "poems")         #set ($poemsVocabularyId = $voc.vocabularyId)     #end #end   #if (!$entries.isEmpty())     <div>     #foreach ($curEntry in $entries)         #set( $renderer = $curEntry.getAssetRenderer() )         #set( $link = $renderer.getURLViewInContext($renderRequest, $renderResponse, ''))         #set( $journalArticle = $renderer.getArticle() )         #set ($articlePrimKey = $journalArticle.getResourcePrimKey())          #set ($catLocalService = $serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryLocalService"))         #set ($catPropertyLocalService = $serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryPropertyLocalService"))         #set ($articleCats = $catLocalService.getCategories("com.liferay.portlet.journal.model.JournalArticle", $articlePrimKey))         #set($viewURL = $assetPublisherHelper.getAssetViewURL($renderRequest, $renderResponse, $curEntry))         #set( $document = $$journalArticle.getContent()) )         #set( $rootElement = $document.getRootElement() )            #set ($colorCode = "")           ###### if the content item is tied to a category that is in the         ###### poems vocabulary, get that category's color_code property         #foreach($cat in $articleCats)             #if($cat.vocabularyId == $poemsVocabularyId)                 #set ($colorCode = $catPropertyLocalService.getCategoryProperty($cat.categoryId, "color_code"))             #end         #end       ###### Display the poem as a card     <a href="$viewURL" style="color:white;">         <div class="span4" style="background-color: #$colorCode.value; color:white; padding:10px; margin:10px; height:150px; border-radius:10px;">             <span style="font-weight:bold;color:white;font-size:20px;">${curEntry.getTitle($locale)}</span>             <hr>             ${curEntry.getSummary($locale)}         </div>     </a>     #end     </div>  #end   In particular, this excerpt shows how the color_code property is extracted from a content item's category. #foreach($cat in $articleCats)     #if($cat.vocabularyId == $poemsVocabularyId)         #set ($colorCode = $catPropertyLocalService.getCategoryProperty($cat.categoryId, "color_code"))     #end #end   And here is my asset publisher after it was configured to use that ADT. Now, if I need to change my sonnets to be green instead of blue, I just have to modify the value of the color_code property I defined for the sonnet category.     And here's how the Asset Publisher renders after that change. Furthermore, if I need to define a new category (say, limerick), I can create it with its own color_code property and unique HTML color code value, and then simply assign any content to have the new limerick category via the Categorization tab.   Wasn't that easy? Javeed Chida 2016-05-18T20:22:31Z
Categories: CMS, ECM

Spring 2016 Javadoc Contest Winners

Liferay - Mon, 05/16/2016 - 12:37
Our inaugural Community Javadoc Contest officially ended last week, and we received some really good submissions. Luckily, there were two clear-cut winners, so the process of choosing our champions was very straightforward. We have one internal winner (Liferay employee) and one external winner (community member). Before announcing them, I'd like to give a big thanks to anyone that submitted Javadoc over the past few months. We greatly appreciate it! Now to the exciting part!     Community Javadoc Champion - Sébastien Le Marchand   Sébastien fully documented Liferay's GetterUtil and ParamUtil classes, and partially documented several other classes/interfaces. I'd like to especially thank Sébastien for his quick responses and obvious attention to detail! Thanks!   Internal Liferay Javadoc Champion - Marcellus Tavares   Marcellus provided a slew of Javadoc for our DDL Java code, which included DDL constants, exceptions, exporter, utility, comparators, and services. Thanks, Marcellus!   Again, thanks to everyone that played a part in this contest. If you'd like to provide any feedback on how this contest could be improved, or if you'd like to see this contest again in the future, please comment on this post below. Cody Hoag 2016-05-16T17:37:58Z
Categories: CMS, ECM

OSGi File Naming Convention for Liferay Faces Artifacts

Liferay - Fri, 05/13/2016 - 18:01

The Liferay Faces team is moving closer towards the goal of releasing a JSF portlet bridge (and associated demos) for use with Liferay Portal 7.0 CE.

Since this new version of the portal utilizes OSGi to achieve modularity, the portal's dependency artifact filenames follow the OSGi file naming convention using Bundle-SymbolicName. For example: The old portal-service.jar artifact has been renamed to com.liferay.portal.kernel.jar due to the following line in META-INF/MANIFEST.MF:

Bundle-SymbolicName: com.liferay.portal.kernel This type of convention effectively prepends the groupId to the artifact name. Recent examples in Java EE that follow a similar type of convention include javax.servlet-api.jar and javax.faces-api.jar.   Although the Liferay Faces artifacts are currently designed to be embedded dependencies (inside the WEB-INF/lib directory of a WAR), we have adopted the aforementioned file naming convention in order to be consistent with the rest of the company. It will also help to guide us towards the goal of having the Liferay Faces dependency artifacts to be separately deployable OSGi bundles. For more information, see FACES-2681.   Schedule: Here are some examples of what you can expect:   Liferay Faces Dependency Artifact Filenames
(groupId: com.liferay.faces) Old Naming Convention New Naming Convention liferay-faces-alloy.jar com.liferay.faces.alloy.jar liferay-faces-bridge-api.jar com.liferay.faces.bridge.api.jar liferay-faces-bridge-impl.jar com.liferay.faces.bridge.impl.jar liferay-faces-metal.jar com.liferay.faces.metal.jar liferay-faces-portal.jar com.liferay.faces.portal.jar liferay-faces-util.jar com.liferay.faces.util.jar

In addition, we are renaming our demo portlets:

Liferay Faces Demo Artifact Filenames
(groupId: com.liferay.faces.demo)

Old Naming Convention New Naming Convention alloy3-portlet.war com.liferay.faces.demo.alloy.applicant.portlet.war icefaces4-portlet.war com.liferay.faces.demo.icefaces.applicant.portlet.war jsf2-portlet.war com.liferay.faces.demo.jsf.applicant.portlet.war jsf2-cdi-portlet.war com.liferay.faces.demo.jsf.cdi.applicant.portlet.war jsf2-export-pdf-portlet.war com.liferay.faces.demo.jsf.export.pdf.portlet.war jsf2-ipc-pub-render-params-portlet.war jsf2-ipc-events-bookings-portlet.war jsf2-ipc-events-customers-portlet.war primefaces5-portlet.war com.liferay.faces.demo.primefaces.applicant.portlet.war primefaces5-users-portlet.war com.liferay.faces.demo.primefaces.users.portlet.war richfaces4-portlet.war com.liferay.faces.demo.richfaces.applicant.portlet.war

Finally, we have updated the official Liferay documentation titled Liferay Faces Version Scheme for Releases After Liferay Faces GA6.

Neil Griffin 2016-05-13T23:01:40Z
Categories: CMS, ECM

Liferay Portal CMS Concepts for Non-Technical Users

Liferay - Thu, 05/12/2016 - 11:33

I recently presented this to a group of non-technical users. The feedback was positive, and made me think this may be useful to others.

Why did I make this presentation?

I put this little presentation together because a lot of our users, who were being trained to contribute content, had trouble distinguishing a web content item from an instance of the Web Content Display portlet. The solid red line between a Web Content Display portlet and the journal article that it is configured to point at is more blurred to end users than you think. Furthermore, some folks could not appreciate the need for structures and templates, often viewing them as unnecessary overhead. 

In less than fifteen minutes, I address the above at a level high enough to make a techie gasp for oxygen.

Take note that:

  • This presentation is intended for non-technical business users. It is not for developers.
  • Developers interested in learning about Liferay Portal CMS concepts would do better to start with the Liferay Developer Network
    • That being said, if you are a developer and are looking for ideas on how to present some of these CMS concepts to a non-technical team of (say) content editors, then you may find the content of this presentation useful.

Warning! Cheesy analogies abound.

Part 1 (10:00)

Part 2 (3:34)

Javeed Chida 2016-05-12T16:33:24Z
Categories: CMS, ECM

Hoe Enterprise Support voor Open Source Software zich terugbetaald

Liferay - Thu, 05/12/2016 - 06:07

De Panama Papers houden de gemoederen de laatste tijd behoorlijk bezig. De ontkenningen zijn niet van de lucht, koppen rollen en de belasting autoriteiten en trust kantoren hebben hun handen vol met dank aan de onderzoeksjournalisten en een paar slimme hackers. 

De Panama Papers case toont op meerdere vlakken het falen van systemen, regels en procedures. Ik ga hier geen oordeel vellen over de bedrijven en particulieren wiens informatie op straat ligt ik ben nl gen belastingadviseur. 

Veel interessanter vind ik het om te analyseren hoe dit nu eigenlijk kon gebeuren. Een recent artikel op stelt dat ‘Slordige patching en onveilige plug-ins’ als de oorzaak van het lekken van de informatie moet worden gezien.

Kennelijk gebruikte Mossack Fonseca voor haar publieke website Wordpress en voor haar zogenaamde klanten portaal en het delen van ‘gevoelige en vertrouwelijke informatie’ Drupal. Hoewel Mossack Fonseca claimt dat haar mail server werd gehackt staat in ieder geval vast dat zowel de Drupal als Wordpress sites niet up-to-date waren. Een Wordpress security plug-in was minimaal 3 maanden out-of-date en de Drupal site was twee jaar out-of-date. 

Het word nog mooier de webserver stond niet achter een firewall en de website maakte gebruik van Revolution Slider een van de bekende Wordpress kwetsbaarheden.

De Drupal website van Mossaca Fonseca maakte gebruik van een versie waar notabene van bekend was dat er ‘kritische kwetsbaarheden door de Drupal community waren gemeld’. Deze bleken zo erg dat er geautomatiseerde aanvallen op Drupal sites wereldwijd werden gelanceerd op sites die niet waren gepatched en bijwerkt.

De slimme adviseurs van Mossack Fonseca hebben dan misschien verstand van het omzeilen van belastingregels door allerlei (dubieuze) constructies maar van IT en security hebben ze minder kaas gegeten.


Bezuinig niet op support

Je vraagt je af hoe het mogelijk is dat een bedrijf waar de cash flow wel het minste probleem moet zijn zo slordig en onachtzaam is met de vertrouwelijke en hoogst gevoelige informatie van hun klanten. Natuurlijk het bedrijf is gespecialiseerd in het adviseren over en het opzetten van constructies om ‘zo min mogelijk belasting te betalen’. Maar om voor ook voor je websites te kiezen voor ‘goedkope en gratis’ oplossingen en kosten te vermijden is zo blijkt vragen om moeilijkheden.

Voor Enterprise level oplossingen, security en support is PHP niet de juiste keuze, niet voor niets zegt Infoworld ‘PHP ontwikkelaars, vooral zij die werken met Wordpress, Drupal, Joomla etc. het wordt tijd om eens iets te gaan doen aan de security van de software waar zoveel websites op vertrouwen.’ De lage drempel die de PHP scripting taal met zich meebrengt heeft een duidelijke keerzijde. In de PHP wereld wordt veel geknutseld en ‘geforkt’, ontbreekt het in veel gevallen aan governance, en viert volgens sommigen amateurisme hoogtij.


PHP, nee bedankt

Ik raad iedereen aan om zeer kritisch te zijn en te blijven op organisaties die hun publieke websites en/of hun klant portalen op basis van PHP technologie ontwikkelen. Ik zou het wel weten als ik kon kiezen, dan toch liever een bedrijf (of organisatie) die security serieus neemt en haar klant portaal bouwt op bewezen enterprise technologie. Hoewel ik niets te verbergen heb beslis ik nl graag zelf wie er toegang heeft tot persoonlijke en vertrouwelijke informatie. Ik verwacht ook van de eigenaar van het klant portaal dat hij de juiste keuze maakt en maatregelen heeft genomen om mijn gegevens afdoende te beschermen. 


Velen van u die deze blog post lezen zijn ondernemer. In die zin kan ik u gerust stellen, als u inlogt op Mijn RVO, Rijksdienst voor Ondernemend Nederland, dan maakt u gebruik van een supported open source java platform.

Gelukkig zie ik in de markt dat voor klant portalen steeds vaker wordt gekozen voor echte robuuste  java portal enterprise platformen en de daarbij behorende support. Supported Open Source, security en enterprise oplossingen gaan heel goed samen zoals wij al jaren bewijzen. Niet voor niets is Liferay Portal o.a. in de financiële sector, bij overheden etc. aan een heel stevige opmars bezig.

Ruud Kluivers 2016-05-12T11:07:56Z
Categories: CMS, ECM

EVP China 2016: Hope Harvest Trip

Liferay - Thu, 05/12/2016 - 02:42

Thanks for the Employee Volunteer Program, I got chance for my third volunteer trip and luckily, to be able to serve at Hope Harvest International (HHI) for an amazing week.

The therapy center there is called “The Starting Line”, like its name and our new EVP logo imply, it does light hope for many local families, and the love people receive and give is infinite, and it never ends.

The Starting Line is mainly targeting on special need children. With the help of HHI, it managed to take care of dozens of them, build up community for their parents to encourage and support each other, and connect to local orphanage to make consistent and positive influence. Something I did not expect before this trip is that most local young people get married at around 20, so it's interesting and meanwhile shocking for us to know a teacher there who just turned 19 got a fiancee, and we have to call 40-year-old aunties grandma. What surprised us even more is that they commit themselves and serve full time at their early age. In some way, they are teachers for us too, as they literarily demonstrate love, patience and faith without saying much.

The kids here are all unique, Hanhan is one of them. He is a 4-year-old strong buddy, and this buddy sometimes talks like a grown-up. Few weeks back, Hanhan moved back to the home village with his grandma, as they need to resume working in summer time to support family. To make sure Hanhan can keep up with the therapy while he is off, grandma spared a whole room and built a "Rehabilitation Center" at home!!! She told us with tears in eyes, "Hanhan always tell me to take a good rest after a day's work. When we are in the middle of therapy, Hanhan said to me: Grandma, you can just rest there and watch me, OK? You only need to come and hold me up when I fall down. I never feel tired every time I hear that". Our heart was touched too by this caring and strong little man’s words.


Thursday is an outdoor activities day, which is a day-off for all parents. Zhang Jie, who is one of the chief organizers, finished this artwork with flowers and leaves together with some families. Zhang Jie said: Did you see the girl there, whose one leg is a bit shorter than the other. That’s one of the special need kids we want to care for, our kids! My dream is to build up an environment for these kids. They can live there well without harm and discrimination from outside world. They grow up, get married and can have their own babies. I know it is hard, but we are getting closer."

We started missing there already on our bus back. This trip has been such a blessing. We served there, we learnt from them, and we are really grateful and proud of that. 

Right before we left, we got to know that with the help of Liferay Foundation and rest of the society, now they are about to move to a new house in very near future. How fantastic!

Vincent Liu 2016-05-12T07:42:15Z
Categories: CMS, ECM

Liferay DXP発表!

Liferay - Tue, 05/10/2016 - 01:34

こんにちは! 日本ライフレイでマーケティングを担当しています、梅野です。今回の飛び石ゴールデンウィーク、どのようにお過ごしでしたか? 私は5日に外を2時間ほど歩いていたため、首の後ろが見事に日焼けしてしまいました。盲点でした!

さて、本日はプレスリリースのご案内です。米国では5月3日に発表しましたLiferay Digital Experience Platform の日本語プレスリリースを本日行いました。(^-^)//""パチパチ!!

Liferayデジタル・エクスペリエンス・プラットフォーム(だと長くなるので、通称Liferay DXP)は、LIFERAY PORTALの次世代製品です。どうしても「ポータル」となると、サイロ化されたWebサイトへの入り口や、社内のみで利用するような雰囲気を醸し出している感じがします。今回「プラットフォーム」と明言することで、複数のサイロ化されたプロセスやシステムからの情報をうまく統合し、一貫したカスタマー・エクスペリエンスを提供するための必須アイテムとして生まれ変わったことを示したかったのです。


またLiferay DXPは、サービスを受けるお客様が、どの顧客ライフサイクルフェーズにいて、どのようなサービスを今欲しがっているかを把握し、一番必要とされている情報へ的確にアクセスできるシステムを構築するお手伝いをします。これは、本製品がさまざまなバックエンドシステムとのインテグレーションを容易にし、システムに埋もれている情報へ適切に導くことで実現します。


Until next time!

Emiko Umeno 2016-05-10T06:34:02Z
Categories: CMS, ECM

Gadget/Widget in Liferay

Liferay - Mon, 05/09/2016 - 07:37
    We hear about widget/gadget in daily life like we can add gadgets on Windows-7's desktop. Widget is an application or icon which performs a specific functions on desktop or website. For example, if you want to add counter or social site icons, you can add a script in your page and that widget available on your page. So a widget is a piece of reusable code that you can plug into virtually any website. A gadget is same like widget but it only works on a certain website or a specific set of websites. Gadgets are simple and easy to deploy.   OpenSocial Gadget     OpenSocial is a public specification for creating web applications using standard technologies like HTML, CSS, and JavaScript. OpenSocial applications called gadgets which are similar to portlets because gadgets can be added to portal’s pages like portlets. Figure 1 - OpenSocial Gadget   Share your portlet as widget     Liferay has feature which convert your portlet as standalone widget. You can share your portlet as a widget to any web site or Facebook or OpenSocial gadget. To share your portlet, go to portlet configuration and click on Sharing tab there. Sharing tab has following options: Figure 2 - Portlet Share Configuration
  1. Any Website: It has JavaScript code. You can copy and paste on your website where you want to show portlet. You can also allow your users to add this widget on their websites.
  2. Facebook: It provide ability to add your portlet as an application on Facebook page.
  3. OpenSocial Gadget: Liferay portlet can be used as Open Social Gadgets on any OpenSocial-compatible pages like iGoogle. You can also allow your users to use this OpenSocial Gadget.
  4. Netvibes: You can also share your portlet on Netvibes portal. You can also allow your users to use this Netvibes widget.
  5. Friends: It allows you to give your friends permission to add the application as a widget to another web site.

Figure 3 - User's Share Options

Using OpenSocial Gadget in Liferay

    You can add any Gadget on Liferay page. Liferay Marketplace has OpenSocial Gadget plugin. This plugin can be used in two ways to add gadgets in Liferay pages.

Adhoc Gadget: It is quick way to add Gadget on page. You need to add OpenSocial Widget portlet from Gadget category. Now open portlet configuration and set gadget URL which you want to add on page.

Figure 4 - OpenSocial Gadget Plugin

Portal-wide Gadgets: In this way, you can configure gadget at one place and use that as a portlet on liferay pages. To add gadget, you need to go Control Panel -> Apps -> OpenSocial Admin. There you need to provide Gadget URL and category in which your Gadget will available as portlet. Now a portal admin can add that Gadget on page like we add portlets on page.

Figure 5 - OpenSocial Admin

Liferay also provide possibility to configure oAuth credentials. When we add Twitter Widget, it also ask Consumer Key and Consumer Secret which you can get from

OpenSocial Gadget Editor 

OpenSocial Gadget plugin also provide a gadget editor where you can create your own gadget and publish it. It generate a unique URL which can be used on any OpenSocial-compatible pages to show that gadget. To create new gadget, you need to go Site Administrator  -> Content -> OpenSocial Gadget Editor. It has editor to write OpenSocial Gadget XML. When you publish, it generate public gadget URL.

Figure 6 - OpenSocial Gadget Editor

        Kailash Yadav 2016-05-09T12:37:32Z
Categories: CMS, ECM

Nimróddal beszélgettem - The force is strong with this one

Liferay - Mon, 05/09/2016 - 02:53
For the English version of this interview, please scroll down.   Nimród az egyetemet elvégezve (ELTE IK - Programtervező Informatikus szak) egyből a Liferay-nél helyezkedett el. Azóta is itt dolgozik, most őt kérdeztem a tapasztalatairól.        Mióta és mivel foglalkozol a Liferay-nél? - Közel 4 éve dolgozom a Liferaynél Customer Support Engineerként. Ez azt jelenti, hogy kommunikálok az ügyfelekkel, reprodukálom a bejelentett problémáikat egy általam felépített környezetben, és megoldást biztosítok számukra konfiguráció vagy patch formájában.   Te itt kezdted a pályafutásodat. Miért jó a Liferay első munkahelynek?  - Pályakezdőként mindig nehéz elhelyezkedni. Gyakorlati tapasztalat hiányában én sem voltam tisztában minden képességemmel, hisz az ember nem tudhatja előre, milyen irányban boldogulna jobban: beéri-e kódolással, vagy inkább ember közelibb természetű pozíciót szeretne. Itt a Liferay-nél ideális a helyzet, hiszen CSE-ként mind ügyfél kommunikációs, mind technikai oldalról vannak feladatok, melyekbe fokozatosan tudtam beletanulni. A mindennapos angol nyelvhasználattal nagy mértékben fejlődött a nyelvtudásom, és ügyfeleink sokrétű problémái is arra sarkalltak, hogy újabb és újabb technológiákkal ismerkedjek meg.    Hiába első munkahely, még itt vagy, továbbra is lelkesen. Mi az ami miatt érdemes hosszútávra tervezni a Liferay-vel? - Számomra fontosak a jó munkakörülmények, hogy olyan emberekkel dolgozom együtt akiket kedvelek, és a saját ütememben dolgozhatok anélkül, hogy folyamatos számonkérések miatt kellene stresszelnem. A Liferay-nél nap mint nap új embereket ismerhetek meg, új technológiákat tanulhatok, és gyakran ügyfeleink különböző projectjeibe és vállalati igényeibe is betekintést nyerhetek miközben segítek nekik. Mióta a céghez kerültem elértem a Senior Engineer pozíciót, és továbbra is látok lehetőséget az előrejutásra. Nálunk van mód fejlődésre tudásban, pozícióban, és fizetésben egyaránt, így nem látom szükségét a munkahely váltásnak.   Kérlek mondd el, mi a legjobb része a munkádnak? - Leginkább megosztani szeretem a megszerzett tudást másokkal. Legyen szó egy érdekesebb ügyfél probléma megoldásáról, tudás bázisunk bővítéséről, új kollégák betanításáról, vagy a munkatársaim mindennapos segítéséről, mindig szívesen vállalom az ilyen feladatokat, és jó érzéssel tölt el, hogy hasznos lehetek.    Van e bármi, amit kiemelnél, amit a legjobban szeretsz a Liferay-ben? - Leginkább a csapat összetartását. Nálunk bárkihez odamehetsz ha segítségre van szükséged, és a legjobb tudása szerint segíteni is fog. A közösség építésében szerepet játszik a sok szabadidős tevékenység ahol a vezetőség sem különül el. Ilyen például a keddenkénti foci, a biciklizés, LAN partyk, esetleg egy esti társas, vagy a péntekenkénti pizzanap.   Aki valaha betéved a magyar irodába, rögtön szembesül azzal, hogy nagy népszerűségnek örvend a Star Wars univerzum. A Te asztalod ezt egy új szintre emeli. Mondhatni, hogy véresszájú rajongó vagy?  - Bár nem harapnám le senki fejét aki nincs oda a franchise-ért, én egyértelműen rajongok az egész Star Wars univerzumért, és szeretem, hogy ezt az asztalommal is tudom tükrözni. Most a 7. rész megjelenésével be tudtam szerezni pár poharat és plüsst amik kiválóak erre a célra. :)    Részt vettél a tárgyalók és szerverek Star Wars tematikájú elnevezésében? :) - Nem, de minden tiszteletem azé, akitől az ötlet származik! :) Mondjuk elképzelhető, hogy pár embernek gondot jelent a Kashyyyk tárgyaló nevének fejben tartása. :D        Same in English ;)   When Nimród finished university, he started working at Liferay and is still here. I asked him about his experiences.    Since when and in what position are you working at Liferay?  - I have been with Liferay for almost 4 years, as a Customer Support Engineer. This means that I keep contact with our customers, reproduce the issues they report in an environment I build on our end, and provide a solution in the form of configuration or a patch.    This is your first job. Why is Liferay a good first job experience?  - It is always hard to settle for a job straight out of university. Having no experience, I had no idea of my skillset, and there is no knowing what kind of a direction you want to go in: if coding is enough or if you want a closer relationship with people. The situation at Liferay is ideal because as a CSE, you have tasks that require communication and technical skills which I learned on the go. As I used English day-by-day, my language skills improved greatly as well, and the various nature of our customers' issues inspires me to get familiar with new technologies every day.    First job or not, you are still here, still motivated. What is it that makes Liferay worth the long-term plans?  - Working conditions are important to me, especially that I am working with people that I like, and that I can work at my own pace without being constantly controlled, thus stressed. At Liferay, I get to know new people every day, I get to study new technologies, and by assisting our customers, I am allowed a glimpse into their different projects as well as their business needs. Since I started, I have become a Senior Engineer and I still see opportunities for growth. Here, you have the opportunity to advance academically, position-wise and financially as well, therefore, I see no reason to change jobs.    Tell me what is the best part of your work? - I mostly like to share the acquired knowledge. This ranges from solving a more complex case, adding to our knowledge base, training new colleagues to helping my colleagues on a daily basis. I am always glad to take up such a task, makes me feel useful and as such, happy.    Is there anything you could highlight as the best part of working for Liferay? - The community and the team spirit. Here, you can go up to anyone if you have a question, and they will help you to the best of their knowledge. There are a lot of free time activities that help build the community, where everyone takes part actively, management included. Such are the Tuesday football matches, the bike tours, LAN parties, board game get-togethers and Friday pizzas.    Anyone who visits the Hungarian office will definitely notice that Star Wars is very popular with Liferayers. Your desk takes this concept to a new level. Would it be fair to say that you are a die-hard fan?  - While I wouldn't hit anyone in the face for not liking the franchise, I am definitely a fan of the entire Star Wars universe, and I like to represent this fandom, partially with my desk. With the release of the 7th episode, I was able to acquire some cups and plush toys that are perfect for decoratory purposes. :)   Did you have any part in the fact that our meeting rooms and servers are named after the Star Wars universe?  - No, but big respect to the person who came up with the idea. :) Although it is possible that some people may find it hard to memorize the name of a meeting room such as "Kashyyyk". :D Andrea Tamás 2016-05-09T07:53:07Z
Categories: CMS, ECM

Quick Guide to Liferay Symposium NA

Liferay - Thu, 05/05/2016 - 19:04

Hundreds of innovative minds will gather at Liferay Symposium North America this September to learn about and discuss the importance of digital transformation. If you’ve never been to a Liferay Symposium before, here are some quick tips:

When and Where?

Date: September 26 - 27, 2016 
Venue: Hilton Chicago
Room rate: $269/night. 

Who Should Attend?

Anyone hoping to better engage customers through digital transformation and personalized customer experiences. Join other C-levels, Digital and Marketing Strategists, Enterprise Developers, Customer Experience Managers, IT Managers, and Designers to learn how to transform your business. Come and see what it means to get to the heart of customer experience.

How to Register? 

Register with code LIFERAY250 to save $250 off the standard rate. And be sure to check out the available post-symposium training courses that will be offered by Liferay experts to maximize your conference experience.

Hope to see you in Chicago!

Melanie Chung 2016-05-06T00:04:18Z
Categories: CMS, ECM

使用Liferay IDE 3.0创建支持Service Builder的portlet module

Liferay - Thu, 05/05/2016 - 01:57

Liferay IDE 下载页面:

Liferay IDE 3针对Liferay 7做了很多的改变。其中一项就是在Liferay Blade,Eclipse Gradle和BND tool的基础上完成了创建OSGi module portlle的向导,通过向导就可以简单的创建出portlet module了。在我的客户和培训学院中,所有的技术人员在开始最关心的问题都是在Liferay 7中,怎么创建一个使用Service Builder的MVC portlet。在Liferay IDE 3中,实现起来其实非常简单。


首先需要创建一个Liferay Workspace项目.

Liferay Workspace更像是一个Liferay项目的容器,而不是一个类似于eclipse workspace的工作空间。在Liferay Workspace中可以开发和管理Liferay插件。

接下来点击File -> New -> Liferay Module Project,然后选择servicebuilder为项目模板。

在Liferay Workspace视图模式下

我们可以看到在新建service builder的项目下有两个gradle项目。API项目包括了各种接口和服务定义。在6.2的项目中这些文件通常是在service文件夹下。Service项目中包含了服务的具体实现源码和服务配置。在6.2中是在src文件夹下面。

在service项目中,包含了service.xml。可以根据需求改变。接下来就可以在Gradle Task窗口中,运行service项目中的buildservice任务了,这样就可以生成所需的服务了。



我们可以创建一个mvc portlet类型的Liferay Module Project。然后修改build.gradle文件。按照我们文章中的示例,我们可以添加下列代码来声明依赖。

compile project(":modules:service-builder-project:service-builder-project-api")

这样在mvc portlet项目中就可以引用服务了。如果IDE的编辑器依然报告有依赖的错误,可以右键点击项目,然后gradle -> refreash gradle project,这样编辑器就会重新计算依赖了。

在部署项目的时候,需要部署三个jar,分别是api,service和mvc portlet。

Neil Jin 2016-05-05T06:57:46Z
Categories: CMS, ECM
Syndicate content