How to configure Liferay Developer Studio 2.2.x with Java 7 and LDS 3.x with Java 8 for Mac OS 10.13 (High Sierra)

Technical Blogs May 24, 2018 By Tim Telcik

Scenario

  • You are hosting Liferay Developer Studio with Mac OS 10.13 (High Sierra)
  • You want to use Liferay Developer Studio 2.2.x with Java 7 and Liferay Developer Studio 3.x with Java 8
  • Liferay Developer Studio 2.2.x requires Java 1.7 (7)
  • Liferay Developer Studio 3.x requires Java 1.8 (8)
  • You have Java 1.7 (7) and 1.8 (8) installed on your Mac
  • Java 1.8 (8) is the default Java runtime on your Mac

NOTE: This scenario is also applicable to Mac OS 10.12 (Sierra).


Solution Outline

  • Configure Liferay Developer Studio 2.2.x to use Java 7
    NOTE: Do not configure Liferay Developer Studio 3.x as it will default to using Java 8
  • Configure console to use Java 7 for user profile (optional)
  • Configure Java 7 as the system-wide default for Mac OS (optional)


Configuration


1. Liferay Developer Studio 2.2.x Configuration

This is possibly the simplest and least intrusive approach.


1.1. Locate LDS 2.2.x app using Mac OS Finder

e.g.

/Applications/Liferay-Developer-Studio/Liferay-Developer-Studio-2.2.2-GA3/DeveloperStudio.app


1.2. Show package contents

Right click on file "DeveloperStudio.app" and select menu item "Show package contents"

e.g.

/Applications/Liferay-Developer-Studio/Liferay-Developer-Studio-2.2.2-GA3/DeveloperStudio.app/Contents/MacOS


1.3. Update LDS 2.2 app launch configuration with path to Java 1.7

Edit Developer Studio configuration file and insert "-vm" parameter with path to Java 1.7 home folder.

e.g.

FILE: /Applications/Liferay-Developer-Studio/Liferay-Developer-Studio-2.2.2-GA3/DeveloperStudio.app/Contents/MacOS/DeveloperStudio.ini

...
-vm
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
...


2. Mac OS 10.13 (High Sierra) User Profile Java Console Configuration (Optional)

This configuration is only required if you plan to use the Liferay SDK from the command line console (aka. terminal).

We will configure the command line console to use Java 7 for the active user.

If you need to use a different Liferay SDK, adjust the target Java version and restart the command line console to apply changes.


2.1/ Create or update file $HOME/.bash_profile with the following snippet.

e.g.

if [ -f ~/.bashrc ]; then
   source $HOME/.bashrc
fi


2.2/ Create or update file $HOME/.bashrc with the following snippet

e.g.

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

export PATH=$JAVA_HOME/bin:$PATH


3/ Close and reopen all console (aka. terminal) windows to apply changes


4/ Confirm command line console is using Java version 1.7

e.g.

$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

 

3. Mac OS 10.13 (High Sierra) Global Java Configuration (Optional)

This approach may impact other applications or tools reliant upon a particular Java runtime, hence use with caution.

There are many articles on this topic of setting the global Java version.

Some approaches, using the java_home tool, are outlined in the following stack overflow article:

To identify all Java runtime folders on your Mac, you can use the /usr/libexec/java_home tool to identify all registered Java runtime environments

e.g.

$ /usr/libexec/java_home --verbose
Matching Java Virtual Machines (16):
    1.8.0_171, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
    1.8.0_161, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home
    1.8.0_121, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
    1.8.0_111, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
    1.8.0_45, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
    1.8.0_25, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
    1.8.0_05, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
    1.7.0_79, x86_64:    "Java SE 7"    /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
    1.7.0_71, x86_64:    "Java SE 7"    /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
    1.7.0_55, x86_64:    "Java SE 7"    /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home
    1.7.0_51, x86_64:    "Java SE 7"    /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
    1.7.0_21, x86_64:    "Java SE 7"    /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
    1.6.0_51-b11-457, x86_64:    "Java SE 6"    /Library/Java/JavaVirtualMachines/1.6.0_51-b11-457.jdk/Contents/Home
    1.6.0_51-b11-457, i386:    "Java SE 6"    /Library/Java/JavaVirtualMachines/1.6.0_51-b11-457.jdk/Contents/Home
    1.6.0_35-b10-428, x86_64:    "Java SE 6"    /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home
    1.6.0_35-b10-428, i386:    "Java SE 6"    /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home


Related Articles

How to reindex content search indices in Liferay Portal 6.2

Technical Blogs January 16, 2017 By Tim Telcik

Overview

Sometimes you need to manually reindex some, or all, of the content search indices.

Liferay Portal 6.2 provides search indexing functions for many content types.

e.g.

  • Blog
  • Document
  • Journal Article
  • Wiki

The content reindex functions apply to the registered search engine provider.

e.g.

  • Apache Lucene
  • Apche Solr

Usage

Rebuild search index for all content types

1/ Connect to Liferay Portal

2/ Sign in as portal admin user

3/ Navigate to Control Panel > Server Administration > Resources

4/ Click "Reindex Search" button.

NOTE: The index time can vary greatly depending upon search engine (e.g. Lucene or Solr), CPU, disk speed of document library, volume of content entries etc.

e.g.

Rebuild search index for single content type

1/ Connect to Liferay Portal

2/ Sign in as portal admin user

3/ Navigate to Control Panel > Apps > Liferay Core

4/ Click "Reindex Search" button for target content type.

NOTE: The index time can vary greatly depending upon search engine (e.g. Lucene or Solr), CPU, disk speed of document library, volume of content entries etc.

e.g.

 

How to configure Liferay Portal 6.2 EE as SAML IdP and SAML SP

Technical Blogs April 26, 2016 By Tim Telcik

Overview

According to Wikipedia, the Security Assertion Markup Language (SAML), pronounced "sam-el" is,

"... an XML-based, open-standard data format for exchanging authentication and authorization data between parties,
in particular, between an identity provider and a service provider."


The SAML protocol can be used to implement a SSO authentication service.

This article outlines the steps to configure Liferay Portal 6.2 EE as a SAML Identity Provider (IdP) and a SAML Service Provider (SP).

NOTE: The SAML specification supports using a URL as the SAML IdP and SP entity ID, however, the Liferay SAML 2.0 Provider does not support URLs as the entity ID, it must be a plain label.

 

Scenario

You wish to test the use of SAML as the Single Sign-On (SSO) service for your environment.

You want to configure Liferay Portal 6.2 EE as a SAML IdP and SAML SP.

 

Test Environment

LP SAML IdP

  • Using Liferay Portal 6.2 EE SP10 (6.2.10.11) + Apache Tomcat 7.x bundle
    • NOET: Available from Liferay Customer Portal
    • NOTE: Listening on port 8080 (default)

LP SAML SP

  • Using Liferay Portal 6.2 EE SP10 (6.2.10.11) + Apache Tomcat 7.x bundle
    • NOTE: Available from Liferay Customer Portal
    • NOTE: Listening on port 9080 (custom)

Liferay SAML 2.0 Provider

Web browsers

  • Mozilla Firefox
    • NOTE: This will be the first web browser used for accessing LP SAML IdP (port 8080)
  • Google Chrome (second web browser)
    • NOTE: This will be the second web browser used for accessing LP SAML SP (port 9080)
       

Configuration

Configuration is based on the following articles:

Configuration Tasks

1/ Install Liferay Portal as SAML IdP

  • LP SAML IdP installed under /opt/lportal/saml-idp
  • LP SAML IdP listening on port 8080


2/ Install Liferay Portal as SAML SP

  • LP SAML SP installed under /opt/lportal/saml-sp
  • LP SAML SP listening on port 9080


3/ Configure Liferay Portal as SAML IdP

  • NOTE: LP SAML plugin is configured as SAML IdP
  • NOTE: LP SAML IdP contains references to LP SAML SP

 

4/ Test LP SAML IdP

Add test user to LP SAML IdP.

 

5/ Configure Liferay Portal as SAML SP

  • NOTE: LP SAML plugin is configured as SAML SP
  • NOTE: LP SAML SP contains references to LP SAML IdP


6/ Test LP SAML SP.

Add test user to LP SAML SP.


7/ Test SAML SSO with test user.

Test SAML SSO with test user.

 

Install Liferay Portal 6.2 EE as SAML IdP

PENDING: SAML 2.0 EE plugin UI


1/ Create LP SAML SP installation folder


e.g.

/opt/lportal/saml-idp


2/ Extract LP + TC bundle


e.g.

/opt/lportal/saml-idp/liferay-portal-6.2-ee-sp10


3/ Configure Apache Tomcat


no changes, use defaults


4/ Confirm TC is listening on port 8080 (default)


Review TC log file for warnings or errors.
 


5/ Start portal

 

6/ Connect to portal on port 8080 (default) with first web browser and confirm portal is available.

http://localhost:8080/


7/ Sign in as admin user

e.g. test@liferay.com


8/ Install Liferay SAML 2.0 Provider EE plugin

Install Liferay SAML 2.0 Provider EE plugin (saml-portlet.war)


9/ Confirm SAML plugin installed

Control Panel > Configuration > SAML Admin


10/ Rename default portal site to assist with testing.


Navigate to "Control Panel > Sites > Liferay".

Rename site from "Liferay" to "Liferay SAML IdP".


11/ Configure SAML portal logging

How to trace the Liferay SAML 2.0 Provider EE plugin


12/ Stop portal

Stop portal.


Install Liferay Portal 6.2 EE as SAML SP

TODO: Update steps with GUI configuration in SAML 2.0 EE plugin.


1/ Create LP SAML SP installation folder


e.g.

/opt/lportal/saml-sp/liferay-portal-6.2-ee-sp10


2/Configure Apache Tomcat


FILE: /opt/lportal/saml-sp/liferay-portal-6.2-ee-sp10/tomcat/conf/server.xml


3/ Edit server.xml file and update ports


** web server port from 8005 to 9005 (custom)
** connector port from 8080 to 9080 (custom)
** redirect port from 8443 to 9443 (custom)
** AJP connector port from 8009 to 9009 (custom)


4/ Start portal


5/ Confirm TC is listening on port 9080 (custom)


Review TC log file for warnings or errors.


6/ Connect to portal on port 9080 (custom) with second web browser and confirm portal is available.


http://localhost:9080/


7/ Sign in as admin user


8/ Install Liferay SAML 2.0 Provider EE plugin

 

9/ Confirm SAML plugin installed


Control Panel > Configuration > SAML Admin


10/ Rename default portal site to assist with testing.


Navigate to "Control Panel > Sites > Liferay".

Rename site from "Liferay" to "Liferay SAML SP".


11/ Configure SAML portal logging
 

 

Configure LP SAML IdP

1/ Connect to LP SAML IdP


http://localhost:8080/


2/ Sign in as admin ussr

 

3/ Navigate to SAML admin console


Control Panel > Configuration > SAML Admin


4/ Select General tab (default)


5/ Select "Identity Provider" for SAML Role

 

6/ Enter "samlidp" for SAML Entity ID


7/ Click Save button

 

8/ Update Certificate and Private Key details

In the Certificate and Private Key section, enter the following:

  • Common Name: samlidp
  • Organization: samlidp
  • Organization Unit: {leave blank}
  • Locality: {leave blank}
  • State: {leave blank}
  • Country: USA
  • Validity (days) (Required): 356
  • Key Algorithm: RSA
  • Key Length (Bits): 2048
  • Key Password (Required): samlidp

    

9/ Configure SAML SP

 

  • Name : samlsp
  • Entity ID : samlsp
    • NOTE: SAML SP entity name must be a plan text label.
    • NOTE: Liferay Portal 6.2 SAML 2.0 EE Provider does not support URLs for entity name.
  • Metadata URL : http://localhost:9080/c/portal/saml/metadata   (NOTE: SAML SP listening on port 9080)


10/ Add SAML test user

NOTE: Manual user creation required when LDAP disabled to ensure user exists in LP SAML IdP and LP SAML SP

  • Email Address : saml.user@permeance.com.au
  • First Name : SAML
  • Last Name : User
  • Password : test

 

Configure LP SAML SP

1/ Connect to LP SAML SP

e.g .


http://localhost:9080/
 

2/ Sign in as admin ussr

Control Panel > Configuration > SAML Admin


3/ Select General tab (default)


4/ Select "Identity Provider" for SAML Role


5/ Enter "samlsp" for SAML Entity ID


6/ Click Save button

 

7/ Update Certificate and Private Key details


In the Certificate and Private Key section, enter the following:

  • Common Name: samlsp
  • Organization: samlsp
  • Organization Unit: {leave blank}
  • Locality: {leave blank}
  • State: {leave blank}
  • Country: AU
  • Validity (days)(Required): 356
  • Key Algorithm: RSA
  • Key Length (Bits): 2048
  • Key Password (Required): samlsp    


8/ Add SAML test user


NOTE: Manual user creation required when LDAP disabled to ensure user exists in LP SAML IdP and LP SAML SP

  • Email Address : saml.user@permeance.com.au
  • First Name : SAML
  • Last Name : User
  • Password : test

 

Testing

Test Case - Test login to LP SAML SP as SAML user

Scenario

We wish to test the SAML SSO for LP SAML SP using the SAML user.

We expect the SAML user can authenticate using password "samlidp".

NOTE: SAML user password "samlidp" is registered with LP SAML IdP, hence it is valid for authentication with LP SAML IdP.

Steps

1/ Connect to LP SAML SP

e.g.

http://localhost:9080/

2/ Sign in as SAML ussr (saml.user@liferay.com) via sign in link (top right of page)

3/ Expected outcome : Authentication passes

4/ Actual outcome : Authentication passes

5/ Test outcome : PASS

* NOTE: Portal users registered with LP SAML SP can still sign in via Sign In Portlet, which authenticates using portal database, not SSO.

 

Test Case - Test login to LP SAML SP as SAML SP user (samlsp)

Scenario

We wish to test the SAML SSO for LP SAML SP using the SAML SP user.

We expect the SAML user cannot authenticate using password "samlsp".

NOTE: SAML user password "samlsp" is registered with LP SAML SP, hence it is invalid for authentication with LP SAML IdP.

Steps

1/ Connect to LP SAML SP

e.g.

http://localhost:9080/

2/ Sign in as SAML SP ussr (samlsp) via sign in link (top right of page)

3/ Expected outcome : authentication fails

4/ Actual outcome : authentication fails

5/ Test outcome : PASS

Summary

Only valid portal user registered with SAML IdP can sign in via sign in link

* NOTE: Portal users registered with LP SAML SP can still sign in via Sign In Portlet, which authenticates using portal database, not SSO.

 

Known Liferay Portal SAML 2.0 EE Provider Limitations

Liferay SAML 2.0 EE Provider does not support URLs for Entity ID

Issue

The SAML 2.0 specification recommends using URLs as the SAML Entity ID

8.3.6 Entity Identifier

URI: urn:oasis:names:tc:SAML:2.0:nameid-format:entity
Indicates that the content of the element is the identifier of an entity that provides SAML-based services
(such as a SAML authority, requester, or responder) or is a participant in SAML profiles (such as a service
provider supporting the browser SSO profile). Such an identifier can be used in the <Issuer> element to
identify the issuer of a SAML request, response, or assertion, or within the <NameID> element to make
assertions about system entities that can issue SAML requests, responses, and assertions. It can also be
used in other elements and attributes whose purpose is to identify a system entity in various protocol
exchanges.
The syntax of such an identifier is a URI of not more than 1024 characters in length. It is
RECOMMENDED that a system entity use a URL containing its own domain name to identify itself.
The NameQualifier, SPNameQualifier, and SPProvidedID attributes MUST be omitted.

The Liferay SAML 2.0 EE Provider does not support URLs for Entity ID.

If you attempt to use a URL, the SAML plugin will throw a Null Pointer Exeception (NPE).

Workaround

Use a plain text label (URI) as the SAML Entity ID.

 

LRDOCS-1918 - Add SAML plugin troubleshooting documentation to Liferay Portal 6.2 User Guide

Issue

Liferay Portal documentation is missing details to assist users with tracing SAML plugin issues.

A documentation request is pending, as per ticket LRDOCS-1918 - Add SAML plugin troubleshooting documentation to Liferay Portal 6.2 User Guide

 

References

 

 

 

How to check patching info in Liferay Portal Enterprise Edition

Technical Blogs January 21, 2016 By Tim Telcik

Overview

Patching info for the Liferay Portal Enterprise Edition (EE) may be identified using the Liferay Portal patching tool natively or via the Patching Tool Info plugin in the Control Panel.

NOTE: The patching tool is only available for the Liferay Portal Enterprise Edition (EE). It is not available for the Community Edition (CE).

Using the Patching Tool via the command line

The Patching Tool is typically run from the command line

eg. using patching tool from Unix, Linux or Mac OS X

% cd $LIFERAY_HOME/patching-tool
% ./patching-tool.sh  info 

eg. using the patching tool from MS Windows

> cd %LIFERAY_HOME%/patching-tool
> patching-tool.bat  info

 

Additional details for using the patching tool natively are available at

Using the Patching Tool via the Patching Tool Info plugin in the Liferay Portal or DXP Control Panel

You may also access the patching tool information from the Control Panel using the Patching Tool Info plugin available from the Liferay Marketplace.

Additional details for the Patching Tool Info plugin are available at

 

Related Articles

 

How to trace mail in Liferay Portal

Technical Blogs January 12, 2016 By Tim Telcik

Overview

Sometimes ... things do not go to plan when using mail (email) in Liferay Portal.

However you can quickly find the cause by logging the outbound mail message.

You can enable additional logging to help trace inbound and outbound mail.

NOTE: This article was extracted from article How to configure Google Mail in Liferay Portal

Test Environments

The following configuration has been tested with these products:

  • Liferay Portal 6.0 EE
  • Liferay Portal 6.1 EE
  • Liferay Portal 6.2 EE

The configuration may also be suitable for these products:

  • Liferay Portal 6.0 CE
  • Liferay Portal 6.1 CE
  • Liferay Portal 6.2 CE

Liferay Portal Mail Logging Configuration

Enable ALL (TRACE) Log Levels

Enable logging via Control Panel or Log4j configuration file.

See below for Control Panel configuration.

See appendix for sample Log4j configuration file.

Enable ALL (TRACE) Log Levels (Liferay Portal 6.0 and 6.1)

Enable logging level ALL (TRACE) for one or more of the following categories using "Control Panel > Server Administration > Log Levels"

  • com.liferay.mail.messaging
  • com.liferay.mail.service
  • com.liferay.mail.service.impl
  • com.liferay.mail.service.impl.MailServiceImpl
  • com.liferay.mail.messaging
  • com.liferay.portal.util.SubscriptionSender
  • com.liferay.portlet.announcements.messaging.CheckEntryMessageListener
  • com.liferay.portlet.announcements.service
  • com.liferay.portlet.announcements.service.impl.AnnouncementsEntryLocalServiceImpl
  • com.liferay.portlet.mail
  • com.liferay.util.mail
  • com.liferay.util.mail.MailEngine

Enable ALL (TRACE) Log Levels (Liferay Portal 6.2)

Enable logging level ALL (TRACE) for one or more of the following categories using "Dockbar > Admin > Control Panel > Server Administration > Log Levels"

  • com.liferay.mail.messaging
  • com.liferay.mail.messaging.MailMessageListener
  • com.liferay.mail.service
  • com.liferay.mail.service.impl
  • com.liferay.mail.service.impl.MailServiceImpl
  • com.liferay.mail.messaging
  • com.liferay.portal.kernel.messaging
  • com.liferay.portal.kernel.messaging.DefaultMessageBus
  • com.liferay.portal.kernel.messaging.config.AbstractMessagingConfigurator
  • com.liferay.portal.kernel.messaging.proxy.ProxyMessageListener
  • com.liferay.portal.util.SubscriptionSender
  • com.liferay.portlet.announcements.messaging.CheckEntryMessageListener
  • com.liferay.portlet.announcements.service
  • com.liferay.portlet.announcements.service.impl.AnnouncementsEntryLocalServiceImpl
  • com.liferay.util.mail
  • com.liferay.util.mail.MailEngine
  • com.liferay.webform.portlet.WebFormPortlet

JavaMail Session Logging Configuration

The JavaMail API supporta a "debug" mode in which mail messages are logged to standard output (stdout).

This can be useful when tracing message headers and/or content.

To enable the JavaMail debug mode, configure the DEBUG (or ALL) logging level for either of these logging (categoriy) entries :

  • com.liferay.util.mail
  • com.liferay.util.MailEngine

This loggig configuration is equivalent to the following JavaMail API code:

java.util.Properties properties = ...
javax.mail.Session session = Session.getInstance(properties);
session.setDebug(true);

For the curious, the Liferay Portal 6.2 mail debug logic in class com.liferay.util.MailEngine.

References

Appendix - Sample Log4j Configuration File

FILE: TOMCAT/lib/ext/META-INF/portal-log4j-ext.xml

NOTE: Adapt the following sample porta log4j configuration file to suit your testing requirements.

NOTE: Change the timezone definition from {Australia/Perth} to your local timezone, or remove entry to default to GMT/UTC.

e.g.

<?xml version="1.0"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" WARN="true" debug="true">

        <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
                <layout class="org.apache.log4j.EnhancedPatternLayout">
                        <param name="ConversionPattern" value="%d{ISO8601}{Australia/Perth} %-5p [%t][%c{1}:%L] %m%n" />
                </layout>
        </appender>

        <appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
                <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
                        <param name="FileNamePattern" value="@liferay.home@/logs/liferay@spi.id@.%d{yyyy-MM-dd}.log" />
                </rollingPolicy>

                <layout class="org.apache.log4j.EnhancedPatternLayout">
                        <param name="ConversionPattern" value="%d{ISO8601}{Australia/Perth} %-5p [%t][%c{1}:%L] %m%n" />
                </layout>
        </appender>
        
        <category name="com.liferay.mail.messaging">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.mail.service">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.mail.service.impl">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.mail.service.impl.MailServiceImpl">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.portal.util.SubscriptionSender">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.portlet.mail">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.portlet.announcements.messaging.CheckEntryMessageListener">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.portlet.announcements.service">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.portlet.announcements.service.impl.AnnouncementsEntryLocalServiceImpl">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.util.mail">
                <priority value="ALL" />
        </category>

        <category name="com.liferay.util.mail.MailEngine">
                <priority value="ALL" />
        </category>

</log4j:configuration>

 

How to resolve Liferay Portal patch collisions with custom plugins

Technical Blogs November 11, 2015 By Tim Telcik

Overview

This article outlines a process to resolve Liferay Portal patch collisions with custom portal plugins

Background

The Liferay Patching Tool can be used to patch a Liferay Portal 6.1 or 6.2 Enterprise Edition (EE) installation (binary mode) or source code tree (source mode).

The patching tool can also report collisions between Liferay Portal runtime resource files and custom plugin resource files (eg. JSP).

To resolve Liferay Portal patch plugin collisions with custom portal plugins, we can use this approach :

1/ Patch Liferay Portal source code using patching tool.

2/ Merge Liferay Portal patched source code with custom portal plugin source code.

Please refer to the resolution steps and references below.

Patch Collision Resolution Steps

1/ Patch Liferay Portal source code using Liferay Patching Tool and current patches

Refer to following article Using Liferay Portal 6.2 - Patching Liferay

patching.mode: This can be binary (the default) or source, if you’re patching the source tree you’re working with.
Liferay patches contain both binary and source patches.
If your development team is extending Liferay, you’ll want to provide the patches you install to your development team
so they can patch their source tree.

Also refer to article Permeance Blog - How to patch Liferay Portal 6.1 EE source

2/ Identify Liferay Portal collisions with custom plugins

eg.

./patching-tool.sh list-collisions
Listing collisions (file, plugin, patch):
  html/portlet/users_admin/view_tree.jspf, My Login Hook, hotfix-260
  WEB-INF/ext-impl/ext-impl.jar/com/liferay/portlet/usersadmin/action/EditUserAction.class, cust-portal Ext, core-2
  WEB-INF/ext-impl/ext-impl.jar/com/liferay/portal/util/PropsValues.class, cust-portal Ext, security-hotfix-lsv-175
  WEB-INF/ext-impl/ext-impl.jar/com/liferay/portal/service/impl/UserLocalServiceImpl.class, cust-portal Ext, security-hotfix-5
  WEB-INF/ext-impl/ext-impl.jar/com/liferay/portal/service/impl/UserLocalServiceImpl$1.class, cust-portal Ext, security-hotfix-5

 

3/ Merge patched Liferay Portal 6.1 source code with your custom plugins

Use your favourite text file diff tool to perform a two-way or three-way merge.
 

4/ Build and package custom plugins

Rebuild custom plugins using Liferay Apache Ant SDK and/or Liferay Maven SDK.


5/ Deploy revised custom plugins

Deploy revised custom plugins to portal.


6/ Repeat steps 3 to 5 as required

Rinse, lather and repeat.

 

References

Tim Telcik Blogs and Apps

General Blogs October 13, 2015 By Tim Telcik

Links

 

How to configure Liferay SAML 2.0 Provider plugin in a Liferay Portal cluster environment behind a load balancer

Technical Blogs September 22, 2015 By Tim Telcik

Overview

This brief article outlines a high level solution for using the Liferay SAML 2.0 EE Provider plugin as the SAML SP in a clustered node environment.

The solution extends from using Liferay SAML 2.0 EE Provider plugin as the SAML SP in a single node environment and assumes the reader is already familiar with the SAML protocol and configuring the Liferay SAML 2.0 EE Provider plugin. Refer to references (below).

NOTE: This article was submitted to Liferay as per change request ticket LRDOCS-1531 and was  merged with the Liferay Portal 6.2 User Guide as topic Setting Up Liferay as a SAML Service Provider in a Clustered Environment (effective Wed 07 Oct 2015).

Scenario

You wish to use SAML as the Single Sign-On (SSO) solution for your environment.

You have a Liferay Portal cluster with multiple nodes behind a load balancer (e.g. F5 BigIP). Liferay Portal node 1 (LP node 1) and Liferay Portal node 2 (LP node 2).

You have a third-party product participating as the SAML Identity Provider (IdP), such as F5 BigIP.
 
The Liferay Portal nodes will participate as SAML Service Providers (SPs).
 

High Level Solution

Step 1/ Configure SAML IdP and Liferay Portal node 1 as SAML SP as per other instructions

NOTE: See references (below) for Liferay Portal SAML IdP and/or SP configuration.

NOTE: Ensure LP node 1 is using the fully qualified name of the load balancer (FQN.LB.HOST) as the web.server.host in portal-ext.properties.

{code}
    #
    # Set the hostname that will be used when the portlet generates URLs.
    # Leaving this blank will mean the host is derived from the servlet
    # container.
    #
    web.server.host=FQN.LB.HOST
{code}


Step 2/ Repeat SAML SP config for Liferay Portal node 2 as per node 1

See step 1 (above).


Step 3/ Copy keystore file from LP node 1 to LP node 2 (for filesystem keystore manager only)

This step is only required if you have not changed the keystore manager property (saml.keystore.manager) and hence are using the default filesystem-based keystore manager.

The keystore file contains the valid or self-signed certificate managed by the SAML 2.0 EE Provider plugin.

The keystore file is stored according to the keystore manager defined by portal property "saml.keystore.manager.impl".

saml.keystore.manager.impl=com.liferay.saml.credential.FileSystemKeyStoreManagerImpl

 

The default location for the keystore file is at location

LIFERAY_HOME/data/keystore.jks

To ensure the Liferay Portal nodes are using the same certificate, copy file “LIFERAY_HOME/data/keystore.jks” from LP node 1 to LP node 2

The keystore file storage location can be changed using a different keystore manager.

Refer to the SAML section of article Integrating Existing Users into Liferay for more details.

If you configure the keystore manager to use a different storage mechanism (eg. Document Library), you do not need to copy the keystore file between portal nodes.


Step 4/ Review

At this stage, the LP nodes have the same SAML SP configuration and either can respond to web requests and handle the SAML SP <> IdP protocol.


Step 5/ Test

Test SAML as SSO solution by signing into LP via load balancer, navigating sites and pages then signing out.

 

References

 

How to trace Liferay Portal data sync in a clustered environment

Technical Blogs July 22, 2015 By Tim Telcik

Overview

A problem we someetimes face with our Liferay Portal enterprise (EE) customers is configuring and resolving data sync issues across nodes in a cluster.

Thsi article provides some tips and configuration for tracing Liferay Portal data sync issues in a clustered environment.

NOTE: There is no "one size fits all" solution to resolving data sync issues.

Scenario

You are using Liferay Portal 6.2 EE and have installed the Liferay Ehcache Cluster EE plugin from the Liferay Marketplace.

You have configured the Liferay Portal clustering and caching portal properties, but are not seeing data replicated across nodes in the cluster.

In some environments, multicast simply does not work. Packets are lost. Gone, gone, gone. A workaround is to use point-to-point unicast to ensure packets are delivered to each node in the network.

 

Tips

Cluster Tracing Tips

  • Review Liferay Portal messages on Liferay channel as mbeans via JMX
  • Review ehcache cluster config
  • Review cluster event send/receive messages in portal log(s). Refer to Configuration (below).
  • Review cluster event send/receive messages using IEEE Cluster Utility.

 

Configuration

Portal Configuration

Enable cluster link and replication in portal properties

Update file "LIFERAY_HOME/portal-ext.properties" with the following portal properties.

Sample Configuration

e.g.

##
## Cluster Link
##

    #
    # Set this to true to enable the cluster link. This is required if you want
    # to cluster indexing and other features that depend on the cluster link.
    #
    #cluster.link.enabled=false
    cluster.link.enabled=true

    # https://www.liferay.com/group/customer/knowledge/kb/-/knowledge_base/article/37840259
    #ehcache.cluster.link.replication.enabled=false
    ehcache.cluster.link.replication.enabled=true


##
## Cluster Executor
##

    # Set this to true to enable the cluster executor debugging. This will
    # attach a debugging listener which will log every cluster event it
    #cluster.executor.debug.enabled=false
    cluster.executor.debug.enabled=true

Logging Configuration

The following logging configuration will enable logging of cache events and cache replication.

NOTE: Also define portal property "cluster.executor.debug.enabled=true".

Define some, or all, of the following logging categories to assist with monitoring cache events and cache replication

 

Logging Configuration via Liferay Portal Control Panel

  • Sign into Liferay Portal as admin user.
  • Navigate to "Control Panel > Server Administration > Log Levels".
  • Add/update the folllowing logging entries.

Sample Configuration

e.g.

com.liferay.portal.cache.cluster = ALL

com.liferay.portal.cache.cluster.clusterlink = ALL

com.liferay.portal.cache.cluster.clusterlink.ClusterLinkPortalCacheClusterChannelFactory = ALL

com.liferay.portal.cache.cluster.clusterlink.messaging.ClusterLinkPortalCacheClusterListener = ALL

com.liferay.portal.cache.ehcache = ALL

com.liferay.portal.cluster = ALL

com.liferay.portal.cluster.DebuggingClusterEventListenerImpl = ALL

com.liferay.portal.deploy.hot.PluginPackageHotDeployListener = ALL

com.liferay.portal.kernel.cache = ALL

com.liferay.portal.kernel.cache.cluster = ALL

com.liferay.portal.kernel.cache.cluster.PortalCacheClusterLink = ALL

com.liferay.portal.kernel.cluster = ALL

com.liferay.portal.kernel.cluster.messaging = ALL

net.sf.ehcache = ALL

org.jgroups.protocols.pbcast = ALL

Logging Configuration via portal-log4j-ext.xml file

FILE: LIFERAY_HOME/tomcat/lib/ext/META-INF/portal-log4j-ext.xml

Sample Configuration

e.g.

<category name="com.liferay.portal.cache.cluster">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.cache.cluster.clusterlink">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.cache.cluster.clusterlink.ClusterLinkPortalCacheClusterChannelFactory">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.cache.cluster.clusterlink.messaging.ClusterLinkPortalCacheClusterListener">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.cache.ehcache">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.cluster">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.cluster.DebuggingClusterEventListenerImpl">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.deploy.hot.PluginPackageHotDeployListener">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.kernel.cache">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.kernel.cache.cluster">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.kernel.cache.cluster.PortalCacheClusterLink">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.kernel.cluster">
   <priority value="ALL" />
</category>

<category name="com.liferay.portal.kernel.cluster.messaging">
   <priority value="ALL" />
</category>

<category name="net.sf.ehcache">
   <priority value="ALL" />
</category>

<category name="org.jgroups.protocols.pbcast">
   <priority value="ALL" />
</category>

 

References

Liferay

Misc

 

How to find the company ID or portal instance ID for a Liferay Portal environment

Technical Blogs May 12, 2015 By Tim Telcik

Overview

Liferay Portal uses many internal (Spring) services and equivalent web services (SOAP, Rest/JSON) to implement many functions.

Many of these services require passing a company ID or portal instance ID parameter during the local or remote method invokation.

A common questions is ... where do I find the company ID or portal instance ID ?

The follow steps may be of assistance.

Steps

The company ID is synonymous with the portal instance ID. The terminology is historical.

To find the company ID (aka. portal instance ID), follow these steps:

1/ Sign into portal as admin user

2/ Navigation the Portal Instances admin page

Navigation Path is "Docklbar > Admin > Control Panel > (Configuration) Portal Instances

3/ Review first column  "Instance ID"

The instance ID is the company ID.

How to trace the Liferay SAML 2.0 Provider EE plugin

Technical Blogs December 18, 2014 By Tim Telcik

Overview

The article outlines configuration for tracing the Liferay SAML 2.0 Provider EE plugin (SAML plugin).

The SAML plugin enables Liferay Portal 6.2 EE to act as a SAML Service Provider (SP) or Identity Provider (IdP).

It is common to experience some bumps when initially configuring the SAML plugin for the role of SP or IdP.

The following logging configuration may assist with tracing SAML protocol (behaviour) and/or SAML XML requests and responses between the SP and IdP.

The author has used this logging configuration to assist with tracing SAML XML messages in these scenarios:

S1/ Tracing between F5 BIG-IP Policy Access Manager (PAM) (acting as SAML IdP) and Liferay Portal (acting as SAML SP).

S2/ Tracing between Microsoft Active Directory Federation Services (ADFS) (acting as SAML IdP) and Liferay Portal (acting as SAML SP).

NOTE: Configuring the Liferay SAML 2.0 Provider EE plugin is outside the scope of this article.

NOTE: The Liferay SAML EE plugin uses the OpenSAML framework to process messages.
 

Logging Configuration

The following log4j logging configuration enables verbose logging of the SAML plugin and SAML XML request and response messages.

The log levels can be configured using the portal-log4j-ext.xml file and/or portal control panel.

NOTE: The log4j logging level ALL can result in very verbose log entries and large log files. Scale the logging level back to DEBUG or INFO to reduce the volume of log entries.

Portal Logging Configuration File

FILE: LIFERAY_HOME/tomcat/lib/ext/META-INF/portal-log4j-ext.xml

<?xml version="1.0"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

. . . 

        <!-- Enable verbose logging for Liferay SAML EE plugin ->
        <category name="com.liferay.saml">
                <priority value="ALL" />
        </category>

        <!-- Enable verbose logging for OpenSAML framework ->
        <category name="org.opensaml">
                <priority value="ALL" />
        </category>

        <!-- Enable verbose logging for OpenSAML XML parsing -->
        <category name="PROTOCOL_MESSAGE">
                <priority value="ALL" />
        </category>

. . .

</log4j:configuration>

Portal Control Panel Logging Configuration

Sign into portal as admin user.

Navigate to Control Panel > (Configuration) Server Administration > Log Levels

Add or update the following log entries

com.liferay.saml  = ALL

org.opensaml = ALL

PROTOCOL_MESSAGE = ALL

Usage

Assuming we are using a Liferay Portal + Apache Tomcat bundle, we can monitor the SAML plugin (deployed to Liferay Portal) as follows:

% cd LIFERAY_HOME
% tail -f tomcat/logs/catalina.out

 

References

How to configure user session timeout in Liferay Portal

Technical Blogs August 29, 2014 By Tim Telcik

Overview

The Liferay Portal user session timeout is defined by the session timeout value.

The article outlines potential solutions for configuring the user session timeout (see Solutions below).

Background

The session timeout is loaded by method "checkWebSettings" in Liferay Portal Java class  com.liferay.portal.servlet.MainServlet.

The session timeout property value is loaded in the following order:

1/ Property “session.timeout” in property file “portal.properties”.

NOTE: The default path for the “portal.properties” file in a Liferay Portal + Apache Tomcat bundle is “LIFERAY_HOME/tomcat/webapps/ROOT/WEB-INF/portal-impl.jar”.

2/ Property “session.timeout” in property file "LIFERAY_HOME/portal-ext.properties”.

NOTE: The default path for the “portal-ext.properties” file in a Liferay Portal + Apache Tomcat bundle is “LIFERAY_HOME”.

{code}
    #
    # Specify the number of minutes before a session expires. 
    # This value is always overridden by the value set in web.xml.
    #
    session.timeout=30
{code}

NOTE: The “session.timeout” property is always overridden by the value set in web.xml.

3/ Web config element “session-timeout” in file “web.xml”.

NOTE: The default path for the “portal.properties” file in a Liferay Portal + Apache Tomcat bundle is “LIFERAY_HOME/tomcat/webapps/ROOT/WEB-INF/web.xml”.

{code}
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
{code}


NOTE: The session timeout is loaded by the MainServlet. Refer to Java class  “com.liferay.portal.servlet.MainServlet#checkWebSettings”

Solutions

Following are potential solutions for configuring the user session timeout.

Solution 1 - Over-ride web.xml in deployed Liferay Portal web app

FILE: LIFERAY_HOME/tomcat/webapps/WEB-INF/web.xml

{code}
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
{code}

NOTE: This approach is not recommended as the web.xml file can be over-ridden when applying Liferay Portal patches using the Liferay Portal patching tool.

Solution 2 - Over-ride session timeout value in web.xml using portal EXT plugin

NOTE: This approach may not work due to the Liferay Portal patching process (TBC).

Update session timeout value in <session-timeout> element

eg. 2 hours = 480 minutes

{code}
    <session-config>
        <session-timeout>480</session-timeout>
    </session-config>
{code}

Solution 3 - Remove session timeout value in web.xml using portal EXT plugin

NOTE: This approach may not work due to the Liferay Portal patching process (TBC).

Remove session timeout value and <session-timeout> element from parent <session-config> element

{code}
    <session-config>
    </session-config>
{code}

 

NOTE: This approach will ensure the value defined in portal-ext.properties is retained.
 

References

Related LPS Tickets

Links

 

How to check the active permission algorithm in Liferay Portal 6.x

Technical Blogs May 21, 2014 By Tim Telcik

Overview

Liferay Portal 5 and 6 support different permission algorithms.

Liferay Portal 5.2.x and 6.0.x supported permission algorithm 5. In addition, Liferay Portal 6.0.x introduced permission algorithm 6.

Brian Chan states, "Algorithm 6 is an improved version of Algorithm 5. It provides the exact same functionality, but reduces database size by 66%."

Please refer to the References section (below) for related links on permission algorithm 5 and 6.

If you are using Liferay Portal 5.2.x, you will be using permission algorithm 5.

But, if you are using Liferay Portal 6.0.x, you could be using permission algorithm 5 or 6.

How do you check which permission algorithm is active in Liferay Portal 6.0.x ?

Permission Algorithm Checks

Check 1 - Check Active Permission Algorithm Using System Admin Control Panel

  1. Navigate to "Control Panel > Server Administration > Properties > Portal Properties"
  2. Find property "permissions.user.check.algorithm" and confirm the value is 6.

Check 2 - Review Liferay Portal Database Tables

Permission algorithm 6 relies upon different tables and data in the database schema.

Review the row counts for the "Permission_" and "Resource_" tables.

Liferay Portal 6.0.x Permission Database Tables
Table Name LP 5.2.x Row Count LP 6.0.x Row Count
Permission_ 31+ 0
Resource_ 20+ 0

If permission algorithm 6 is active, the row count for the "Permission_" and "Resource_" tables will be 0 (empty).

References

 

How to enable or disable logging on a live Liferay Portal server

Technical Blogs August 14, 2013 By Tim Telcik

Overview

As an administrator of a Liferay Portal server, you may be required to trace the behaviour of one or more services for a live instance.

This article outlines the steps for enabling or disabling logging categories which typically represent a component or service within Liferay Portal.

The output from the logging system (i.e. Apache Log4j) is typically written to standard output, which is normally routed to the web or app server's log files

e.g.

  • LIFERAY_HOME/logs/liferay.log
  • LIFERAY_HOME/tomcat-xxx/logs/catalina.out

Enable Logging

To enable logging on a live Liferay Portal server, follow these steps :

1/ Navigate to Control Panel > Server Administration as admin user

2/ Select "Log Level" tab

3/ Select "Add Category" tab

4/ Enter category name in text field

eg.

com.liferay.portlet.InvokerPortletImpl

5/ Select required logging level from pick list

eg.

DEBUG, INFO, WARN, ERROR or FATAL

6/ Click Save button

Disable Logging

To disable logging on a live Liferay Portal server, follow these steps :

1/ Navigate to Control Panel > Server Administration as admin user

2/ Select "Log Level" tab

3/ Select "Update Category" tab

4/ Enter category name in text field and click search

eg.

com.liferay.portlet.InvokerPortletImpl


5/ Find matching categories in results list

6/ Select required logging level from pick list for each category

eg.

DEBUG, INFO, WARN, ERROR or FATAL


7/ Click Save button

Related Articles

References

 

How to undeploy a Liferay Portal 6 EXT Plugin

Technical Blogs July 30, 2013 By Tim Telcik

Overview

Liferay Portal 6 supports six plugin types for customizing and extending the base product :

  • Portlets
  • Hooks
  • Themes
  • Layouts
  • EXT
  • Web

For many extension cases, portlets, hooks, themes and layouts are sufficient to help you customize Liferay Portal.

However, occassionally you will need to extend or replace one or more pieces of core functionality, which is only possible using an EXT (extension) plugin.

One issue that arises when using EXT plugins is removing them to ensure a clean re-deployment or removing them when no longer required.

Unfortunately, undeploying an EXT plugin is not as simple as undeploying a portlet or hook plugin. The EXT plugin affects multiple runtime files during deployment.

Loutilities posted a very simple and effective MS DOS-based script for undeploying EXT plugins which I have used and am sharing here.

Please refer to the references section below for links to details on EXT plugin development.

Please refer to the appendix for a BASH-based script for undeploying EXT plugins.

References

Appendix - Clean My EXT Plugin BASH Script

#!/bin/sh

####
##
## Purpose: Simple script to purge EXT plugin resources from Liferay Portal 6.x installation.
##
## Caveats: This script comes with no warranty whatsoever. 
##          Review before using and use at your own risk.
##
## Usage: clean-my-ext-plugin.sh 
##
## @author Loutilities "http://en.gravatar.com/loutilities"
## @author Tim Telcik "tim.telcik@permeance.com.au"
##
## @created: 31-July-2013
##
## @see http://loutilities.wordpress.com/2010/12/06/how-to-undeploy-liferay-6-ee-ext-plugin/
##
####

if [ $# -ne 1 ]; then
 echo "Usage: clean-my-ext [ext-name]"
 exit 1
fi

tomcat_home="./tomcat"
app_name="$1"

rm -rf $tomcat_home/temp/*
rm -rf $tomcat_home/work/*
rm -rf $tomcat_home/webapps/$app_name-ext
rm -rf $tomcat_home/webapps/ROOT/html/portlet/ext
rm -f $tomcat_home/lib/ext/ext-$app_name-ext-service.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-bridges.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-taglib.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-util-java.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/lib/ext-$app_name-ext-impl.jar
rm -f $tomcat_home/webapps/ROOT/WEB-INF/ext-$app_name-ext.xml
rm -f $tomcat_home/webapps/ROOT/WEB-INF/tiles-defs-ext.xml

 

How do I configure Apache HTTPD and Liferay Portal to use SSL

Technical Blogs July 30, 2013 By Tim Telcik

Overview

This article outlines the steps for configuring Apache HTTPD and Liferay Portal with SSL.

This article should be used in conjunction with the following articles:

Configuration

Liferay Portal Properties

Add/update file "LIFERAY_HOME/portal-ext.properties" with the following properties :

  • company.security.auth.requires.https=true
  • web.server.protocol=https
  • session.enable.phishing.protection=false


Sample Configuration

Add/update the following properties in "portal-ext.properties" file :

##
## Company
##

    #company.default.name=Liferay
    company.default.name=My Site Name

    #
    # This sets the default web id. Omniadmin users must belong to the company
    # with this web id.
    #
    #company.default.web.id=liferay.com
    company.default.web.id=mysite.mydomain.com.au

    #
    # Set this to true to ensure users login with https. If this is set to true
    # and you want your HTTP session to contain your credentials after logging
    # in, then the property "session.enable.phishing.protection" must be set to
    # false or your credentials will only be available in the HTTPS session.
    #
    #company.security.auth.requires.https=false
    company.security.auth.requires.https=true


##
## Web Server
##

    #
    # Set the HTTP and HTTPs ports when running the portal in a J2EE server that
    # is sitting behind another web server like Apache. Set the values to -1 if
    # the portal is not running behind another web server like Apache.
    #
    #web.server.http.port=-1
    #web.server.https.port=-1

    #
    # Set the hostname that will be used when the portlet generates URLs.
    # Leaving this blank will mean the host is derived from the servlet
    # container.
    #
    #web.server.host=
    web.server.host=mysite.mydomain.com.au

    #
    # Set the preferred protocol.
    #
    #web.server.protocol=http
    web.server.protocol=https


##
## Session
##

    #
    # Set this to true to invalidate the session when a user logs into the
    # portal. This helps prevents phishing. Set this to false if you need the
    # guest user and the authenticated user to have the same session.
    #
    # Set this to false if the property "company.security.auth.requires.https"
    # is set to true and you want to maintain the same credentials across HTTP
    # and HTTPS sessions.
    #
    #session.enable.phishing.protection=true
    session.enable.phishing.protection=false


Apache HTTPD Configuration

Add/update file "/etc/httpd/conf/httpd.conf" :

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context

 

References

How to configure Google Mail in Liferay Portal

Technical Blogs July 30, 2013 By Tim Telcik

Overview

Configuring Liferay Portal to use Google Mail is relatively easy.

The key is to enable SSL socket connections.

The following article provides steps to enable Liferay Portal to send email via Google Mail.

To assist with tracing mail issue, please refer to related article How to trace mail in Liferay Portal.

Test Environments

The following mail configuration has been tested with these products:

  • Liferay Portal 6.0 EE
  • Liferay Portal 6.1 EE 
  • Liferay Portal 6.2 EE

The configuration may also be suitable for these products:

  • Liferay Portal 6.0 CE
  • Liferay Portal 6.1 CE
  • Liferay Portal 6.2 CE

Mail Configuration

Configure mail settings in Liferay Portal using one of these approaches :

  1. Portal properties
  2. Portal properties and JNDI
  3. Control Panel > Server Administration > Mail

Background - Secure Mail Configuration

Establishing an email session with the Google Mail service requires a secure connection.

The default Liferay Portal 6.x mail configuration properties do not show how to establish a secure connection using additional mail SSL properties.

The mail SMTP properties "mail.session.mail.smtp.socketFactory" and "mail.session.mail.smtp.starttls.enable" are not defined in the default portal properties file "portal-impl.jar!portal.properties".

For the curious, the secure (SSL) and TLS properties are defined at runtime by Liferay Portal class com.liferay.util.mail.MailEngine

Configure using Portal Properties

Add/update file "LIFERAY_HOME/portal-ext.properties" with the following mail session properties :

FILE: LIFERAY_HOME/portal-ext.properties

mail.session.mail.pop3.host=pop.gmail.com
mail.session.mail.pop3.password=PASSWORD
mail.session.mail.pop3.port=110
mail.session.mail.pop3.user=USER
mail.session.mail.imap.host=imap.gmail.com
mail.session.mail.imap.port=993
mail.session.mail.store.protocol=imap
mail.session.mail.transport.protocol=smtp
mail.session.mail.smtp.host=smtp.gmail.com
mail.session.mail.smtp.password=PASSWORD
mail.session.mail.smtp.user=USER
mail.session.mail.smtp.port=465
mail.session.mail.smtp.auth=true
mail.session.mail.smtp.starttls.enable=true
mail.session.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

NOTE: Replace USER and PASSWORD with required user and password for Google Mail account.

Configure using Portal Properties and JNDI

Configure Portal Properties

Add/update file "LIFERAY_HOME/portal-ext.properies" with the following mail session properties :

FILE: LIFERAY_HOME/portal-ext.properties

mail.session.jndi.name=mail/MailSession

Configure Tomcat Context

Add/update file "LIFERAY_HOME/tomcat-xxx/conf/Catalina/localhost/ROOT.xml" with the following "Resource" element :

<Resource
   name="mail/MailSession"
   auth="Container"
   type="javax.mail.Session"
   mail.imap.host="imap.gmail.com"
   mail.imap.port="993"
   mail.pop.host="pop.gmail.com"
   mail.store.protocol="imap"
   mail.transport.protocol="smtp"
   mail.smtp.host="smtp.gmail.com"
   mail.smtp.port="465"
   mail.smtp.auth="true"
   mail.smtp.starttls.enable="true"
   mail.smtp.user=USER
   password=PASSWORD
   mail.smtp.socketFactory.class="javax.net.ssl.SSLSocketFactory"
/>

NOTE: Replace USER and PASSWORD with required user and password for Google Mail account.

Configure using Control Panel > Server Administration > Mail

Sign in to Liferay Portal as admin user.

Navigate to "Control Panel > Server Administration > Mail"

Edit POP and SMTP mail settings.

eg.

Incoming POP Settings

  • Incomding POP Server:  pop.gmail.com
  • Incoming Port:  110
  • Use a Secure Network Connection:  YES
  • User Name:  POP-EMAIL-USER
  • Password:  POP-EMAIL-PASSWORD

Outgoing SMTP Server Settings

  • Outgoing SMTP Server:  smtp.gmail.com
  • Outgoing Port:  465
  • Use a Secure Network Connection:  YES
  • User Name:  SMTP-EMAIL-USER
  • Password:  SMTP-EMAIL-PASSWORD

Troubleshooting

The contents of this section have moved to article How to trace mail in Liferay Portal

References

How to clear Firefox favourite (aka. shortcut) web site icons

Technical Blogs July 22, 2013 By Tim Telcik

Overview

Firefox can be quite obstinate when it comes to clearing favourite (aka. shortcut) web site icons from it's cache.

This short article wil outline the steps for clearing favourite icons in Firefox, based on the original article Clearing All Favicons From Firefox 3 Cache by Rich Menga.

Steps

1/ Install Firefox add-on SQLite Manager

2/ Select Firefox favourites database "places.sqlite"

3/ Review matching favourite web site icons (eg. "permeance")

eg.

SELECT * FROM  "main"."moz_favicons" where url like '%permeance%';


4/ Delete matching favourite web site icons (eg. "permeance")

eg.

DELETE FROM  "main"."moz_favicons" where url like '%permeance%';


References

How do I change Liferay Portal web context path from ROOT to portal

Technical Blogs July 15, 2013 By Tim Telcik

Overview

The article outlines the steps to change the default Liferay Portal web context from "/" to "/portal" ?

Steps

Step 1 - Over-ride property "portal.ctx"

Over-ride the property "portal.ctx" in file "LIFERAY_HOME/portal-ext.properties".

Add (or over-ride) the following property :

    portal.ctx=/portal

Step 2 - Deploy (or redeploy) the Liferay portal web app to the new context path.

Step 2.1 - Example using Liferay Portal 6.1 + Tomcat bundle

If you are using a Liferay Portal 6.1 + Tomcat bundle, you can change the Liferay Portal web app context path to "/portal" as follows :

  • Move/rename folder "TOMCAT/webapps/ROOT" to "TOMCAT/webapps/portal".
  • Move/rename context file "TOMCAT/conf/Catalina/localhost/ROOT.xml" to "TOMCAT/conf/Catalina/localhost/portal.xml"


Liferay Portal will now rewrite all paths relative to "/portal". Hence "/web/guest' will become "/portal/web/guest".
 
NOTE: If you are using a different Java web application server, or a non-LP+Tomcat bundle, the configuration process may vary.
 

References

How to patch Liferay Portal 6.1 EE source

Technical Blogs July 7, 2013 By Tim Telcik

Overview

The follow document outlines high level steps for patching Liferay Portal 6.1 source.

NOTE: This approach also works with Liferay Portal 6.2

Patching Steps

Show installed and available patch details

% cd LIFERAY_HOME/patching-tool 

% ./patching-tool info

Currently installed patches: announcements-1-6120, core-5-6120, 
documents-and-media-2-6120, dynamic-data-lists-1-6120, hotfix-1319-6120, 
hotfix-1324-6120, hotfix-55-6120, hotfix-56-6120, message-boards-1-6120, 
plugin-deployment-1-6120, security-hotfix-3-6120, service-builder-1-6120, 
tags-and-categories-1-6120, upgrade-2-6120

Available patches: 
  [ D] security-hotfix-1-6120 :: Currently not installed; 
       Won't be installed: the same issues were fixed in the following patches(s): core-5-6120
  [*I] plugin-deployment-1-6120 :: Installed; Will be installed.
  [*I] service-builder-1-6120 :: Installed; Will be installed.
  [*I] hotfix-55-6120 :: Installed; Will be installed.
  [*I] hotfix-56-6120 :: Installed; Will be installed.
  [*I] documents-and-media-2-6120 :: Installed; Will be installed.
  [ D] security-hotfix-2-6120 :: Currently not installed; 
       Won't be installed: the same issues were fixed in the following patches(s): core-5-6120
  [*I] security-hotfix-3-6120 :: Installed; Will be installed.
  [*I] upgrade-2-6120 :: Installed; Will be installed.
  [*I] message-boards-1-6120 :: Installed; Will be installed.
  [*I] dynamic-data-lists-1-6120 :: Installed; Will be installed.
  [*I] tags-and-categories-1-6120 :: Installed; Will be installed.
  [*I] announcements-1-6120 :: Installed; Will be installed.
  [ -] core-4-6120 :: Currently not installed; 
       Won't be installed: core-5 contains the fixes included in this one
  [*I] core-5-6120 :: Installed; Will be installed.
  [*I] hotfix-1319-6120 :: Installed; Will be installed.
  [*I] hotfix-1324-6120 :: Installed; Will be installed.

Show installed patches

$ ./patching-tool.sh info | grep Installed

  [*I] plugin-deployment-1-6120 :: Installed; Will be installed.
  [*I] service-builder-1-6120 :: Installed; Will be installed.
  [*I] hotfix-55-6120 :: Installed; Will be installed.
  [*I] hotfix-56-6120 :: Installed; Will be installed.
  [*I] documents-and-media-2-6120 :: Installed; Will be installed.
  [*I] security-hotfix-3-6120 :: Installed; Will be installed.
  [*I] upgrade-2-6120 :: Installed; Will be installed.
  [*I] message-boards-1-6120 :: Installed; Will be installed.
  [*I] dynamic-data-lists-1-6120 :: Installed; Will be installed.
  [*I] tags-and-categories-1-6120 :: Installed; Will be installed.
  [*I] announcements-1-6120 :: Installed; Will be installed.
  [*I] core-5-6120 :: Installed; Will be installed.
  [*I] hotfix-1319-6120 :: Installed; Will be installed.
  [*I] hotfix-1324-6120 :: Installed; Will be installed.

Clone Liferay Portal source folder (Optional/Recommended)

% cd LIFERAY_HOME
% cp  -r  liferay-portal-src-6.1.10-ee-ga1  liferay-portal-src-6.1.10-ee-ga1-patched

Configure patching tool source profile

Create/update patch-source profile properties file "LIFERAY_HOME/patching-tools/patch-source.properties".

patching.mode=source
jdk.version=jdk6
source.path=../portal-src/liferay-portal-src-6.1.10-ee-ga1-patched

 

NOTE: The default patchin tool binary profile is named "default.properties".

Install patched source files

% cd LIFERAY_HOME/patching-tool
% ./patching-tool patch-source  install

Update Eclipse Project file (Optional/Recommended)

If you are using the Eclipse IDE, revise the Eclipse project name for the patched source folder to distinguish it from the baseline source.

One approach is to suffix the project name with "-patched".

Hence, project "portal-master" becomes "portal-trunk-patched".

<?xml version="1.0" encoding="UTF-8"?>

<projectDescription>       
<name>portal-master-patched</name>       
</projectDescription>

Appendix

Liferay Patch Kit Package Structure

Liferay Portal patches are packaged as ZIP files.

eg. liferay-fix-pack-announcements-1-6120.zip

Root ZIP Folder List

  • backup
  • diffs
  • fixpack_documentation.xml
  • jdk5
  • jdk6
  • src

Full ZIP Folder List

$ unzip -l patches/liferay-fix-pack-announcements-1-6120.zip 

Archive:  patches/liferay-fix-pack-announcements-1-6120.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  12-15-12 01:58   backup/
        0  12-15-12 01:58   backup/WAR_PATH/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/impl/
     4245  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/impl/AnnouncementsEntryServiceImpl.class
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/
     5087  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceHttp.class
     3201  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceSoap.class
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/action/
     1471  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/action/ActionUtil.class
        0  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/META-INF/
    46779  12-15-12 01:58   backup/WAR_PATH/WEB-INF/lib/portal-impl.jar/META-INF/MANIFEST.MF
        0  12-15-12 01:58   backup/GLOBAL_LIB_PATH/
        0  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/
        0  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/com/
        0  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/
        0  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/
        0  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/
        0  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/
     1233  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryService.class
     2998  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceUtil.class
     3463  12-15-12 01:58   backup/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceWrapper.class
        0  12-15-12 01:56   diffs/
        0  12-15-12 01:56   diffs/portal-impl/
        0  12-15-12 01:56   diffs/portal-impl/src/
        0  12-15-12 01:56   diffs/portal-impl/src/com/
        0  12-15-12 01:56   diffs/portal-impl/src/com/liferay/
        0  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/
        0  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/
        0  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/service/
        0  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/service/impl/
     1058  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/service/impl/AnnouncementsEntryServiceImpl.java.diff
        0  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/service/http/
     1240  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceSoap.java.diff
     3031  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceHttp.java.diff
        0  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/action/
     1077  12-15-12 01:56   diffs/portal-impl/src/com/liferay/portlet/announcements/action/ActionUtil.java.diff
        0  12-15-12 01:56   diffs/portal-service/
        0  12-15-12 01:56   diffs/portal-service/src/
        0  12-15-12 01:56   diffs/portal-service/src/com/
        0  12-15-12 01:56   diffs/portal-service/src/com/liferay/
        0  12-15-12 01:56   diffs/portal-service/src/com/liferay/portlet/
        0  12-15-12 01:56   diffs/portal-service/src/com/liferay/portlet/announcements/
        0  12-15-12 01:56   diffs/portal-service/src/com/liferay/portlet/announcements/service/
     1567  12-15-12 01:56   diffs/portal-service/src/com/liferay/portlet/announcements/service/AnnouncementsEntryService.java.diff
     1045  12-15-12 01:56   diffs/portal-service/src/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceUtil.java.diff
     1072  12-15-12 01:56   diffs/portal-service/src/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceWrapper.java.diff
      607  12-15-12 01:58   fixpack_documentation.xml
        0  12-15-12 01:58   jdk5/
        0  12-15-12 01:58   jdk5/WAR_PATH/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/impl/
     4696  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/impl/AnnouncementsEntryServiceImpl.class
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/
     5609  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceHttp.class
     3505  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceSoap.class
        0  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/action/
     1466  12-15-12 01:58   jdk5/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/action/ActionUtil.class
        0  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/
        0  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/
        0  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/com/
        0  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/
        0  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/
        0  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/
        0  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/
     1449  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryService.class
     3163  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceUtil.class
     3639  12-15-12 01:58   jdk5/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceWrapper.class
        0  12-15-12 01:56   jdk6/
        0  12-15-12 01:56   jdk6/WAR_PATH/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/impl/
     4696  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/impl/AnnouncementsEntryServiceImpl.class
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/
     5609  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceHttp.class
     3505  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceSoap.class
        0  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/action/
     1466  12-15-12 01:56   jdk6/WAR_PATH/WEB-INF/lib/portal-impl.jar/com/liferay/portlet/announcements/action/ActionUtil.class
        0  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/
        0  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/
        0  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/com/
        0  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/
        0  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/
        0  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/
        0  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/
     1449  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryService.class
     3163  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceUtil.class
     3639  12-15-12 01:56   jdk6/GLOBAL_LIB_PATH/portal-service.jar/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceWrapper.class
        0  12-15-12 01:56   src/
        0  12-15-12 01:56   src/portal-impl/
        0  12-15-12 01:56   src/portal-impl/src/
        0  12-15-12 01:56   src/portal-impl/src/com/
        0  12-15-12 01:56   src/portal-impl/src/com/liferay/
        0  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/
        0  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/
        0  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/service/
        0  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/service/impl/
     5272  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/service/impl/AnnouncementsEntryServiceImpl.java
        0  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/service/http/
     5593  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceSoap.java
     8760  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/service/http/AnnouncementsEntryServiceHttp.java
        0  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/action/
     1496  12-15-12 01:56   src/portal-impl/src/com/liferay/portlet/announcements/action/ActionUtil.java
        0  12-15-12 01:56   src/portal-service/
        0  12-15-12 01:56   src/portal-service/src/
        0  12-15-12 01:56   src/portal-service/src/com/
        0  12-15-12 01:56   src/portal-service/src/com/liferay/
        0  12-15-12 01:56   src/portal-service/src/com/liferay/portlet/
        0  12-15-12 01:56   src/portal-service/src/com/liferay/portlet/announcements/
        0  12-15-12 01:56   src/portal-service/src/com/liferay/portlet/announcements/service/
     4536  12-15-12 01:56   src/portal-service/src/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceWrapper.java
     4864  12-15-12 01:56   src/portal-service/src/com/liferay/portlet/announcements/service/AnnouncementsEntryServiceUtil.java
     4012  12-15-12 01:56   src/portal-service/src/com/liferay/portlet/announcements/service/AnnouncementsEntryService.java
 --------                   -------
   160761                   134 files

References

 

Showing 1 - 20 of 25 results.
Items 20
of 2