Author: smumford
Date: 2011-12-07 20:29:19 -0500 (Wed, 07 Dec 2011)
New Revision: 8207
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/Book_Info.xml
epp/docs/branches/5.2/Reference_Guide/en-US/Revision_History.xml
epp/docs/branches/5.2/Reference_Guide/en-US/extras/Authentication_Identity_BackendConfiguration/default96.xml
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default163.java
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default164.java
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default170.java
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/handle.java
epp/docs/branches/5.2/Reference_Guide/en-US/modules/Advanced/Foundations/Configuring_Services.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/AuthenticationAndIdentity/LDAP.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/AuthenticationAndIdentity/SSO.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/LocalizationConfiguration.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/NavigationController.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/PortalLifecycle.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortletDevelopment/Global_Portlet.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/WSRP.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/db-configuration-hibernate.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/organization-service.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/spring-security-integration.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/faq/jcr-faq.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/backup/backup-client.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/backup/exojcr-backup-service.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/configuration/jdbc-data-container-config.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/data-container.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/jca.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/lock-manager-config.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/other/acl-ext.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/other/link-producer.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/protocols/ftp.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/protocols/webdav.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/query-handler-config.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/repository-creation-service.xml
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/ws/framework-for-cross-domain-ajax.xml
Log:
Import GateIn WSRP content. Spellcheck corrections.
Modified: epp/docs/branches/5.2/Reference_Guide/en-US/Book_Info.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide/en-US/Book_Info.xml 2011-12-08 00:39:06 UTC (rev
8206)
+++ epp/docs/branches/5.2/Reference_Guide/en-US/Book_Info.xml 2011-12-08 01:29:19 UTC (rev
8207)
@@ -9,7 +9,7 @@
<productname>JBoss Enterprise Portal Platform</productname>
<productnumber>5.2</productnumber>
<edition>5.2.0</edition>
- <pubsnumber>14</pubsnumber>
+ <pubsnumber>15</pubsnumber>
<abstract>
<para>
This Reference Guide is a high-level usage document. It deals with more
advanced topics than the Installation and User Guides, adding new content or taking
concepts discussed in the earlier documents further. It aims to provide supporting
documentation for advanced users of the JBoss Enterprise Portal Platform product. Its
primary focus is on advanced use of the product and it assumes an intermediate or advanced
knowledge of the technology and terms.
Modified: epp/docs/branches/5.2/Reference_Guide/en-US/Revision_History.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide/en-US/Revision_History.xml 2011-12-08 00:39:06
UTC (rev 8206)
+++ epp/docs/branches/5.2/Reference_Guide/en-US/Revision_History.xml 2011-12-08 01:29:19
UTC (rev 8207)
@@ -8,6 +8,20 @@
<simpara>
<revhistory>
<revision>
+ <revnumber>5.2.0-15</revnumber>
+ <date>Thu Dec 8 2011</date>
+ <author>
+ <firstname>Scott</firstname>
+ <surname>Mumford</surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Import GateIn WSRP content.</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ <revision>
<revnumber>5.2.0-14</revnumber>
<date>Wed Dec 7 2011</date>
<author>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/extras/Authentication_Identity_BackendConfiguration/default96.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/extras/Authentication_Identity_BackendConfiguration/default96.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/extras/Authentication_Identity_BackendConfiguration/default96.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -42,16 +42,16 @@
<value>war:/conf/organization/picketlink-idm/picketlink-idm-config.xml</value>
<!--Sample LDAP config-->
-
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-ldap-config.xml</value>-->
+
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-LDAP-config.xml</value>-->
<!--Read Only "ACME" LDAP Example-->
-
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-ldap-acme-config.xml</value>-->
+
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-LDAP-acme-config.xml</value>-->
<!--OpenLDAP LDAP config-->
-
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-openldap-config.xml</value>-->
+
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-openLDAP-config.xml</value>-->
<!--OpenLDAP ReadOnly "ACME" LDAP Example-->
-
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-openldap-acme-config.xml</value>-->
+
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-openLDAP-acme-config.xml</value>-->
<!--MSAD LDAP Example-->
<!--<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-msad-config.xml</value>-->
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default163.java
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default163.java 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default163.java 2011-12-08
01:29:19 UTC (rev 8207)
@@ -1,7 +1,7 @@
/**
* This method first calls the super.onInit() of the WebuiApplication. That super
method parse the XML
* file and stores its content in the ConfigurationManager object. It also set up he
StateManager and
- * init the application lifecycle phases.
+ * init the application life-cycle phases.
*
* Then we get all the properties file that will be used to create ResourceBundles
*/
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default164.java
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default164.java 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default164.java 2011-12-08
01:29:19 UTC (rev 8207)
@@ -9,18 +9,18 @@
<ui-component-root>org.exoplatform.portal.webui.workspace.UIPortalApplication</ui-component-root>
<state-manager>org.exoplatform.portal.application.PortalStateManager</state-manager>
- <application-lifecycle-listeners>
+ <application-life-cycle-listeners>
<listener>org.exoplatform.portal.application.PortalStatisticLifecycle</listener>
<listener>org.exoplatform.portal.application.PortalApplicationLifecycle</listener>
<listener>org.exoplatform.webui.application.MonitorApplicationLifecycle</listener>
- </application-lifecycle-listeners>
+ </application-life-cycle-listeners>
<events>
<event>
- <event-name>portal.application.lifecycle.event</event-name>
+ <event-name>portal.application.life-cycle.event</event-name>
<listener>org.exoplatform.webui.event.ConsoleEventMonitorListener</listener>
</event>
<event>
- <event-name>portal.execution.lifecycle.event</event-name>
+ <event-name>portal.execution.life-cycle.event</event-name>
<listener>org.exoplatform.webui.event.ConsoleEventMonitorListener</listener>
</event>
</events>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default170.java
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default170.java 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/default170.java 2011-12-08
01:29:19 UTC (rev 8207)
@@ -1,12 +1,12 @@
@ComponentConfigs({
@ComponentConfig (
- lifecycle = UIPortalApplicationLifecycle.class,
+ life-cycle = UIPortalApplicationLifecycle.class,
template =
"system:/groovy/portal/webui/workspace/UIPortalApplication.gtmpl",
initParams = @ParamConfig(name = "public.showControlWorkspace", value =
"true" )
),
@ComponentConfig (
id = "office" ,
- lifecycle = UIPortalApplicationLifecycle.class,
+ life-cycle = UIPortalApplicationLifecycle.class,
template =
"system:/groovy/portal/webui/workspace/UIPortalApplication.gtmpl",
initParams = @ParamConfig( name = "public.showControlWorkspace", value =
"false" )
)
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/handle.java
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/handle.java 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/extras/PortalDevelopment_PortalLifecycle/handle.java 2011-12-08
01:29:19 UTC (rev 8207)
@@ -41,9 +41,9 @@
PortalApplication app =
controller.getApplication(PortalApplication.PORTAL_APPLICATION_ID) ;
WebuiRequestContext context = new PortalRequestContext(app, req, res) ; ;
WebuiRequestContext.setCurrentInstance(context) ;
- List<ApplicationLifecycle> lifecycles = app.getApplicationLifecycle();
+ List<ApplicationLifecycle> life-cycles = app.getApplicationLifecycle();
try {
- for(ApplicationLifecycle lifecycle : lifecycles) lifecycle.onStartRequest(app,
context) ;
+ for(ApplicationLifecycle life-cycle : life-cycles) life-cycle.onStartRequest(app,
context) ;
UIApplication uiApp = app.getStateManager().restoreUIRootComponent(context) ;
if(context.getUIApplication()!images/= uiApp) context.setUIApplication(uiApp) ;
@@ -60,7 +60,7 @@
log.error("Error while handling request",ex);
} finally {
try {
- for(ApplicationLifecycle lifecycle : lifecycles) lifecycle.onEndRequest(app,
context) ;
+ for(ApplicationLifecycle life-cycle : life-cycles) life-cycle.onEndRequest(app,
context) ;
} catch (Exception exception){
log.error("Error while ending request on all
ApplicationLifecycle",exception);
}
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/Advanced/Foundations/Configuring_Services.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/Advanced/Foundations/Configuring_Services.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/Advanced/Foundations/Configuring_Services.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -613,14 +613,14 @@
</para>
<programlisting language="XML"
role="XML"><component>
- <key>org.exoplatform.services.ldap.LDAPService</key>
-
<type>org.exoplatform.services.ldap.impl.LDAPServiceImpl</type>
+ <key>org.exoplatform.services.LDAP.LDAPService</key>
+
<type>org.exoplatform.services.LDAP.impl.LDAPServiceImpl</type>
<init-params>
<object-param>
- <name>ldap.config</name>
- <description>Default ldap config</description>
- <object
type="org.exoplatform.services.ldap.impl.LDAPConnectionConfig">
- <field
name="providerURL"><string>ldaps://10.0.0.3:636</string></field>
+ <name>LDAP.config</name>
+ <description>Default LDAP config</description>
+ <object
type="org.exoplatform.services.LDAP.impl.LDAPConnectionConfig">
+ <field
name="providerURL"><string>LDAPs://10.0.0.3:636</string></field>
<field
name="rootdn"><string>CN=Administrator,CN=Users,DC=exoplatform,DC=org</string></field>
<field
name="password"><string>exo</string></field>
<field
name="version"><string>3</string></field>
@@ -639,22 +639,22 @@
Here you see how the service accesses the object:
</para>
-<programlisting language="Java" role="Java">package
org.exoplatform.services.ldap.impl;
+<programlisting language="Java" role="Java">package
org.exoplatform.services.LDAP.impl;
public class LDAPServiceImpl implements LDAPService {
...
public LDAPServiceImpl(InitParams params) {
- LDAPConnectionConfig config = (LDAPConnectionConfig)
params.getObjectParam("ldap.config")
+ LDAPConnectionConfig config = (LDAPConnectionConfig)
params.getObjectParam("LDAP.config")
.getObject();
...</programlisting>
<para>
The passed object is LDAPConnectionConfig which is a classic
<emphasis role="bold">java bean</emphasis>. It contains all fields
and also the appropriate getters and setters (not listed here). You also can provide
default values. The container creates a new instance of your bean and calls all setters
whose values are configured in the configuration file.
</para>
-<programlisting language="Java" role="Java">package
org.exoplatform.services.ldap.impl;
+<programlisting language="Java" role="Java">package
org.exoplatform.services.LDAP.impl;
public class LDAPConnectionConfig {
- private String providerURL = "ldap://127.0.0.1:389";
+ private String providerURL = "LDAP://127.0.0.1:389";
private String rootdn;
private String password;
private String version;
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/AuthenticationAndIdentity/LDAP.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/AuthenticationAndIdentity/LDAP.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/AuthenticationAndIdentity/LDAP.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -319,7 +319,7 @@
Uncomment the line under "<emphasis>Read Only
"ACME" LDAP Example</emphasis>":
</para>
<programlisting language="XML"
role="XML"><![CDATA[<!--Read Only "ACME" LDAP Example-->
-<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-ldap-acme-config.xml</value>
+<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-LDAP-acme-config.xml</value>
]]></programlisting>
</step>
@@ -391,7 +391,7 @@
Uncomment the line under "<emphasis>OpenLDAP
ReadOnly "ACME" LDAP Example</emphasis>":
</para>
<programlisting language="XML"
role="XML"><![CDATA[<!--OpenLDAP ReadOnly "ACME" LDAP
Example-->
-<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-openldap-acme-config.xml</value>
+<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-openLDAP-acme-config.xml</value>
]]></programlisting>
</step>
<step>
@@ -523,7 +523,7 @@
Expose the entry under "<emphasis>Sample LDAP
config</emphasis>":
</para>
<programlisting language="XML"
role="XML"><![CDATA[<!--Sample LDAP config-->
-<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-ldap-config.xml</value>
+<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-LDAP-config.xml</value>
]]></programlisting>
</step>
<step>
@@ -579,7 +579,7 @@
Expose the entry under "<emphasis>OpenLDAP
LDAP config</emphasis>":
</para>
<programlisting language="XML"
role="XML"><![CDATA[<!--OpenLDAP LDAP config-->
-<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-openldap-config.xml</value>
+<value>war:/conf/organization/picketlink-idm/examples/picketlink-idm-openLDAP-config.xml</value>
]]></programlisting>
</step>
<step>
@@ -648,9 +648,9 @@
One of the three example configuration files discussed in
<xref
linkend="proc-Reference_Guide-LDAP_Integration-LDAP_in_Read-only_mode-Set_up_LDAP_read-only_Mode"/>:
</para>
<simplelist>
-
<member><filename>picketlink-idm-ldap-acme-config.xml</filename></member>
+
<member><filename>picketlink-idm-LDAP-acme-config.xml</filename></member>
<member><filename>picketlink-idm-msad-readonly-config.xml</filename></member>
-
<member><filename>picketlink-idm-openldap-acme-config.xml</filename></member>
+
<member><filename>picketlink-idm-openLDAP-acme-config.xml</filename></member>
</simplelist>
</listitem>
<listitem>
@@ -698,10 +698,10 @@
<term>providerURL</term>
<listitem>
<para>
- The LDAP server connection URL. Formatted as
"ldap://localhost:<replaceable><PORT></replaceable>".
The default setting is: <emphasis>ldap://localhost:1389</emphasis>.
+ The LDAP server connection URL. Formatted as
"LDAP://localhost:<replaceable><PORT></replaceable>".
The default setting is: <emphasis>LDAP://localhost:1389</emphasis>.
</para>
<para>
- <emphasis
role="bold">MSAD</emphasis>: Should use SSL connection
(ldaps://xxx:636) for password update or creation to work.
+ <emphasis
role="bold">MSAD</emphasis>: Should use SSL connection
(LDAPs://xxx:636) for password update or creation to work.
</para>
</listitem>
</varlistentry>
@@ -762,7 +762,7 @@
The <parameter>groupTypeMappings</parameter> exposed
in the <filename>idm-configuration.xml</filename> file correspond to
<parameter>identity-object-type</parameter> values defined in the DS-specific
configuration file (referenced in <emphasis>Sub-step 3a</emphasis> of the
DS-specific procedure above).
</para>
<para>
- For RHDS, OpenDS and OpenLDAP the
<filename>picketlink-idm-ldap-acme-config.xml</filename> and
<filename>picketlink-idm-openldap-acme-config.xml</filename> files contain the
following values:
+ For RHDS, OpenDS and OpenLDAP the
<filename>picketlink-idm-LDAP-acme-config.xml</filename> and
<filename>picketlink-idm-openLDAP-acme-config.xml</filename> files contain the
following values:
</para>
<programlistingco>
<areaspec>
@@ -816,7 +816,7 @@
<area coords="14 40"
id="area-Reference_Guide-LDAP_Integration-Examples-Default_groupTypeMappings-config-2"
/>
</areaset>
</areaspec>
-<programlisting language="XML" role="XML"><xi:include
href="../../extras/Authentication_Identity_LDAP/default-ldap.xml"
parse="text"
xmlns:xi="http://www.w3.org/2001/XInclude"
/></programlisting>
+<programlisting language="XML" role="XML"><xi:include
href="../../extras/Authentication_Identity_LDAP/default-LDAP.xml"
parse="text"
xmlns:xi="http://www.w3.org/2001/XInclude"
/></programlisting>
<calloutlist>
<!--#1-->
<callout
arearefs="area-Reference_Guide-LDAP_Integration-Examples-Default_groupTypeMappings-config">
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/AuthenticationAndIdentity/SSO.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/AuthenticationAndIdentity/SSO.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/AuthenticationAndIdentity/SSO.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -1016,7 +1016,7 @@
</step>
<step>
<para>
- Click on <guilabel>ldapService</guilabel> (at the
bottom in the <guilabel>Authentication chaining</guilabel> section).
+ Click on <guilabel>LDAPService</guilabel> (at the
bottom in the <guilabel>Authentication chaining</guilabel> section).
</para>
</step>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/LocalizationConfiguration.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/LocalizationConfiguration.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/LocalizationConfiguration.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -240,10 +240,10 @@
The <literal>LocalePolicy</literal> framework is enabled for portlets by
configuring <literal>LocalizationLifecycle</literal> class in portal's
webui configuration file:
<filename><replaceable>JBOSS_HOME</replaceable>/server/<replaceable><PROFILE></replaceable>/deploy/gatein.ear/02portal.war/WEB-INF/webui-configuration.xml</filename>:
</para>
-<programlisting language="XML"
role="XML"><application-lifecycle-listeners>
+<programlisting language="XML"
role="XML"><application-life-cycle-listeners>
...
<listener>org.exoplatform.portal.application.localization.LocalizationLifecycle</listener>
-</application-lifecycle-listeners>
+</application-life-cycle-listeners>
</programlisting>
<para>
The default <literal>LocalePolicy</literal> implementation is installed
as an eXo Kernel portal service via
<filename><replaceable>JBOSS_HOME</replaceable>/server/<replaceable><PROFILE></replaceable>/deploy/gatein.ear/lib/exo.portal.webui.portal-VERSION.jar/conf/portal/configuration.xml</filename>.
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/NavigationController.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/NavigationController.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/NavigationController.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -374,7 +374,7 @@
</listitem>
<listitem>
<para>
- a <code>value-mapping</code> attribute with the
possible values <code>canonical</code>, <code>never-empty</code>,
<code>never-null</code> can be used to filter filter values after matching is
done. For instance a parameter configured with
<code>value-mapping="never-empty"</code> and matching the empty
string value will not put the empty string in the map.
+ a <code>value-mapping</code> attribute with the
possible values <code>canonical</code>, <code>never-empty</code>,
<code>never-null</code> can be used to filter values after matching is done.
For instance a parameter configured with
<code>value-mapping="never-empty"</code> and matching the empty
string value will not put the empty string in the map.
</para>
</listitem>
@@ -601,7 +601,7 @@
</listitem>
<listitem>
<para>
- ajax: the optional ajax option allowing an ajax invocation of
the URL
+ ajax: the optional Ajax option allowing an Ajax invocation of
the URL
</para>
</listitem>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/PortalLifecycle.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/PortalLifecycle.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortalDevelopment/PortalLifecycle.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -275,7 +275,7 @@
</para> --><!-- <programlisting language="Java"
role="Java"><xi:include parse="text"
href="../../extras/PortalDevelopment_PortalLifecycle/default163.java"
xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
--><!-- <programlisting>/**
* This method first calls the super.onInit() of the WebuiApplication. That super method
parse the XML
* file and stores its content in the ConfigurationManager object. It also set up he
StateManager and
-* init the application lifecycle phases.
+* init the application life-cycle phases.
*
* Then we get all the properties file that will be used to create ResourceBundles
*/
@@ -303,18 +303,18 @@
</init-params>
<ui-component-root>org.exoplatform.portal.webui.workspace.UIPortalApplication</ui-component-root>
<state-manager>org.exoplatform.portal.application.PortalStateManager</state-manager>
-<application-lifecycle-listeners>
+<application-life-cycle-listeners>
<listener>org.exoplatform.portal.application.PortalStatisticLifecycle</listener>
<listener>org.exoplatform.portal.application.PortalApplicationLifecycle</listener>
<listener>org.exoplatform.webui.application.MonitorApplicationLifecycle</listener>
-</application-lifecycle-listeners>
+</application-life-cycle-listeners>
<events>
<event>
-<event-name>portal.application.lifecycle.event</event-name>
+<event-name>portal.application.life-cycle.event</event-name>
<listener>org.exoplatform.webui.event.ConsoleEventMonitorListener</listener>
</event>
<event>
-<event-name>portal.execution.lifecycle.event</event-name>
+<event-name>portal.execution.life-cycle.event</event-name>
<listener>org.exoplatform.webui.event.ConsoleEventMonitorListener</listener>
</event>
</events>
@@ -419,10 +419,10 @@
The goal of the
<code><strong>StateManager</strong></code>
is to abstract the way
<code><strong>UIApplication</strong></code>
are stored and restored for all the user session lifetime. The expire method is called
from the listener we have introduced before in this chapter.
</para>
<para>
-1.1.1 The application-lifecycle-listeners
+1.1.1 The application-life-cycle-listeners
</para>
<para>
-There are 2 lifecycle listeners in the Portal, one for the real business logic
(<code><strong>PortalApplicationLifecycle</strong></code>),
the other one for some monitoring issues. They both implement the interface
<code><strong>ApplicationLifecycle<E extends
RequestContext></strong></code>.
+There are 2 life-cycle listeners in the Portal, one for the real business logic
(<code><strong>PortalApplicationLifecycle</strong></code>),
the other one for some monitoring issues. They both implement the interface
<code><strong>ApplicationLifecycle<E extends
RequestContext></strong></code>.
</para> --><!-- <programlisting language="Java"
role="Java"><xi:include parse="text"
href="../../extras/PortalDevelopment_PortalLifecycle/default165.java"
xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
--><!-- <programlisting>public interface ApplicationLifecycle<E
extends RequestContext> {
public void onInit(Application app) throws Exception ;
public void onStartRequest(Application app, E context) throws Exception ;
@@ -430,7 +430,7 @@
public void onDestroy(Application app) throws Exception ;
}
</programlisting> --><!-- <para>
-Each registered lifecycle listener will then be able to get events when several states of
the portal lifecycle are reached.
+Each registered life-cycle listener will then be able to get events when several states
of the portal life-cycle are reached.
</para>
<para>
1.1 The Request Handler
@@ -587,9 +587,9 @@
PortalApplication app =
controller.getApplication(PortalApplication.PORTAL_APPLICATION_ID) ;
WebuiRequestContext context = new PortalRequestContext(app, req, res) ; ;
WebuiRequestContext.setCurrentInstance(context) ;
-List<ApplicationLifecycle> lifecycles = app.getApplicationLifecycle();
+List<ApplicationLifecycle> life-cycles = app.getApplicationLifecycle();
try {
-for(ApplicationLifecycle lifecycle : lifecycles) lifecycle.onStartRequest(app, context)
;
+for(ApplicationLifecycle life-cycle : life-cycles) life-cycle.onStartRequest(app,
context) ;
UIApplication uiApp = app.getStateManager().restoreUIRootComponent(context) ;
if(context.getUIApplication()!images/= uiApp) context.setUIApplication(uiApp) ;
if(uiApp!images/= null) app.processDecode(uiApp, context) ;
@@ -602,7 +602,7 @@
log.error("Error while handling request",ex);
} finally {
try {
-for(ApplicationLifecycle lifecycle : lifecycles) lifecycle.onEndRequest(app, context) ;
+for(ApplicationLifecycle life-cycle : life-cycles) life-cycle.onEndRequest(app, context)
;
} catch (Exception exception){
log.error("Error while ending request on all ApplicationLifecycle",exception);
}
@@ -782,13 +782,13 @@
The ConfigurationManager method getComponentConfig() returns the Component object filled,
it is a wrapper that contains all the information on the parameters for the class.
Annotations are used to configure the instance as shown here:
</para> --><!-- <programlisting language="Java"
role="Java"><xi:include parse="text"
href="../../extras/PortalDevelopment_PortalLifecycle/default170.java"
xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
--><!-- <programlisting>@ComponentConfigs({
@ComponentConfig (
-lifecycle = UIPortalApplicationLifecycle.class,
+life-cycle = UIPortalApplicationLifecycle.class,
template = "system:/groovy/portal/webui/workspace/UIPortalApplication.gtmpl",
initParams = @ParamConfig(name = "public.showControlWorkspace", value =
"true" )
),
@ComponentConfig (
id = "office" ,
-lifecycle = UIPortalApplicationLifecycle.class,
+life-cycle = UIPortalApplicationLifecycle.class,
template = "system:/groovy/portal/webui/workspace/UIPortalApplication.gtmpl",
initParams = @ParamConfig( name = "public.showControlWorkspace", value =
"false" )
)
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortletDevelopment/Global_Portlet.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortletDevelopment/Global_Portlet.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/PortletDevelopment/Global_Portlet.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -91,14 +91,14 @@
<programlisting language="XML"
role="XML"><filter>
<filter-name>org.exoplatform.portal.application.ApplicationMonitoringFilter</filter-name>
<filter-class>org.exoplatform.portal.application.ApplicationMonitoringFilter</filter-class>
- <lifecycle>ACTION_PHASE</lifecycle>
- <lifecycle>RENDER_PHASE</lifecycle>
- <lifecycle>EVENT_PHASE</lifecycle>
- <lifecycle>RESOURCE_PHASE</lifecycle>
+ <life-cycle>ACTION_PHASE</life-cycle>
+ <life-cycle>RENDER_PHASE</life-cycle>
+ <life-cycle>EVENT_PHASE</life-cycle>
+ <life-cycle>RESOURCE_PHASE</life-cycle>
</filter>
</programlisting>
<para>
- <emphasis role="bold">Application Monitoring
Filter</emphasis> supports four lifecycle phases in the order below:
+ <emphasis role="bold">Application Monitoring
Filter</emphasis> supports four life-cycle phases in the order below:
</para>
<orderedlist>
<listitem>
Modified: epp/docs/branches/5.2/Reference_Guide/en-US/modules/WSRP.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide/en-US/modules/WSRP.xml 2011-12-08 00:39:06 UTC
(rev 8206)
+++ epp/docs/branches/5.2/Reference_Guide/en-US/modules/WSRP.xml 2011-12-08 01:29:19 UTC
(rev 8207)
@@ -4,7 +4,7 @@
%BOOK_ENTITIES;
]>
<chapter id="wsrp">
- <title>Web Services for Remote Portlets (WSRP)</title>
+ <title><remark>Web Services for Remote Portlets
(WSRP)</remark></title>
<section>
<title>Introduction</title>
@@ -221,8 +221,8 @@
to end users, but also requires that the producer and consumer use the
same credentials. This means
that the username and password must be the same and valid on both
servers.
</para>
- <para>The recommended approach for this situation would be to use a common
ldap configuration. Please
- see the user guide on how to configure ldap for use with JBoss Enterprise
Portal Platform
+ <para>The recommended approach for this situation would be to use a common
LDAP configuration. Please
+ see the user guide on how to configure LDAP for use with JBoss Enterprise
Portal Platform
</para>
</important>
<para>The GateIn Wiki article, <ulink
url="http://community.jboss.org/wiki/GateInWSRPAndWebServiceSecurity...
@@ -233,7 +233,7 @@
<title>WS-Security Configuration</title>
<para>JBoss Enterprise Portal Platform uses JBossWS Native to handle
ws-security. Please see the WS-Security section of the
<ulink
url="http://www.jboss.org/jbossas/docs/5-x">JBoss
AS 5 Administration and Configuration Guide
- </ulink> for indepth configuration options. Please note that since
the consumer passes its credentials
+ </ulink> for in-depth configuration options. Please note that since
the consumer passes its credentials
to the producer, the consumer will act as the wss client and the producer
will act as the wss server.
</para>
<para> The following are the JBossWS Native configuration files which
need to be configure for WSRP:
@@ -685,7 +685,7 @@
establish a proper connection to the remote producer.
</para>
- <para>One such optional configuration concerns caching. To prevent
useless roundtrips between the local
+ <para>One such optional configuration concerns caching. To prevent
useless round-trips between the local
consumer and the remote producer, it is possible to cache some of the
information sent by the producer
(such as the list of offered portlets) for a given duration. The rate at
which the information is
refreshed is
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/db-configuration-hibernate.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/db-configuration-hibernate.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/db-configuration-hibernate.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -84,7 +84,7 @@
<section
id="sect-Reference_Guide-Database_Configuration_for_Hibernate-Registering_custom_Hibernate_XML_files_into_the_service">
<title>Registering custom Hibernate XML files into the service</title>
<para>
- It is possible to use the eXo hibernate service and register your hibernate hbm.xml
files to leverage some add-on features of the service such as the table automatic creation
as well as the cache of the hibernate session in a ThreadLocal object during all the
request lifecycle. To do so, you just have to add a plugin and indicate the location of
your files.
+ It is possible to use the eXo hibernate service and register your hibernate hbm.xml
files to leverage some add-on features of the service such as the table automatic creation
as well as the cache of the hibernate session in a ThreadLocal object during all the
request life-cycle. To do so, you just have to add a plugin and indicate the location of
your files.
</para>
<programlisting language="XML" role="XML"><?xml
version="1.0" encoding="ISO-8859-1"?>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/organization-service.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/organization-service.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/organization-service.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -4,193 +4,193 @@
%BOOK_ENTITIES;
]>
<section id="sect-Reference_Guide-Organization_Service">
- <title>Organization Service</title>
- <section id="sect-Reference_Guide-Organization_Service-Overview">
- <title>Overview</title>
- <para>
- OrganizationService is the service that allows to access the Organization model. This
model is composed of :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Users
- </para>
+ <title>Organization Service</title>
+ <section id="sect-Reference_Guide-Organization_Service-Overview">
+ <title>Overview</title>
+ <para>
+ OrganizationService is the service that allows to access the Organization
model. This model is composed of :
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Users
+ </para>
- </listitem>
- <listitem>
- <para>
- Groups
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Groups
+ </para>
- </listitem>
- <listitem>
- <para>
- Memberships
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Memberships
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- It is the basis of eXo personalization and authorizations in eXo and is used to all
over the platform. The model is abstract and does not rely on any specific storage.
Multiple implementations exist in eXo :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Hibernate : for storage into a RDBMS
- </para>
+ </itemizedlist>
+ <para>
+ It is the basis of eXo personalization and authorizations in eXo and is used
to all over the platform. The model is abstract and does not rely on any specific storage.
Multiple implementations exist in eXo :
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Hibernate : for storage into a RDBMS
+ </para>
- </listitem>
- <listitem>
- <para>
- Jndi : for storage into a directory such as an LDAP or MS Active Directory
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Jndi : for storage into a directory such as an LDAP or MS Active
Directory
+ </para>
- </listitem>
- <listitem>
- <para>
- Jcr : for storage inside a Java Content Repository
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Jcr : for storage inside a Java Content Repository
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </section>
-
- <section
id="sect-Reference_Guide-Organization_Service-Organizational_Model">
- <title>Organizational Model</title>
- <section id="sect-Reference_Guide-Organizational_Model-User">
- <title>User</title>
- <itemizedlist>
- <listitem>
- <para>
- Username used as the identified
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-Organization_Service-Organizational_Model">
+ <title>Organizational Model</title>
+ <section id="sect-Reference_Guide-Organizational_Model-User">
+ <title>User</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Username used as the identified
+ </para>
- </listitem>
- <listitem>
- <para>
- Profile (identity and preferences)
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Profile (identity and preferences)
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </section>
-
- <section id="sect-Reference_Guide-Organizational_Model-Group">
- <title>Group</title>
- <para>
- Gather a set of users
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Applicative or business
- </para>
+ </section>
+
+ <section id="sect-Reference_Guide-Organizational_Model-Group">
+ <title>Group</title>
+ <para>
+ Gather a set of users
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Applicative or business
+ </para>
- </listitem>
- <listitem>
- <para>
- Tree structure
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Tree structure
+ </para>
- </listitem>
- <listitem>
- <para>
- No inheritance
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ No inheritance
+ </para>
- </listitem>
- <listitem>
- <para>
- Expressed as /group/subgroup/subsubgroup
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Expressed as /group/subgroup/subsubgroup
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </section>
-
- <section id="sect-Reference_Guide-Organizational_Model-Membership">
- <title>Membership</title>
- <itemizedlist>
- <listitem>
- <para>
- Qualifies the group belonging
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-Organizational_Model-Membership">
+ <title>Membership</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Qualifies the group belonging
+ </para>
- </listitem>
- <listitem>
- <para>
- "Member of group as XXX"
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "Member of group as XXX"
+ </para>
- </listitem>
- <listitem>
- <para>
- Expressed as : manager:/organization/hr, *:/partners
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Expressed as : manager:/organization/hr, *:/partners
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </section>
-
+ </section>
+
- </section>
-
- <section
id="sect-Reference_Guide-Organization_Service-Related_articles_and_how_tos">
- <title>Related articles and how-tos</title>
- <itemizedlist>
- <listitem>
- <para>
- <ulink
url="http://wiki.exoplatform.org/xwiki/bin/view/JCR/Organization+Ser...
Organization Service</ulink>
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-Organization_Service-Related_articles_and_how_tos">
+ <title>Related articles and HOWTOs</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <ulink
url="http://wiki.exoplatform.org/xwiki/bin/view/JCR/Organization+Ser...
Organization Service</ulink>
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para>
- <ulink
url="http://wiki.exoplatform.org/xwiki/bin/view/Core/Update+Conversa...
ConversationState when user's Membership changed</ulink>
- </para>
+ </itemizedlist>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <ulink
url="http://wiki.exoplatform.org/xwiki/bin/view/Core/Update+Conversa...
ConversationState when user's Membership changed</ulink>
+ </para>
- </listitem>
- <listitem>
- <para>
- <ulink url="Organization Service Initializer">Organization Service
Initializer</ulink>
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ulink url="Organization Service
Initializer">Organization Service Initializer</ulink>
+ </para>
- </listitem>
- <listitem>
- <para>
- <ulink
url="http://wiki.exoplatform.org/xwiki/bin/view/Portal/Accessing+Use...
to Access User Profile in your code</ulink>
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ulink
url="http://wiki.exoplatform.org/xwiki/bin/view/Portal/Accessing+Use...
to Access User Profile in your code</ulink>
+ </para>
- </listitem>
- <listitem>
- <para>
- <ulink url="CoreOrganizationListener">How to create your own
Organization Listener</ulink>
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ulink url="CoreOrganizationListener">How to create
your own Organization Listener</ulink>
+ </para>
- </listitem>
- <listitem>
- <para>
- <ulink url="How to manipulate Users and Memberships
Programmatically">How to manipulate Users and Memberships
Programmatically</ulink>
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ulink url="How to manipulate Users and Memberships
Programmatically">How to manipulate Users and Memberships
Programmatically</ulink>
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </section>
-
+ </section>
+
</section>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/spring-security-integration.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/spring-security-integration.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core/spring-security-integration.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -4,73 +4,73 @@
%BOOK_ENTITIES;
]>
<section id="sect-Reference_Guide-Spring_Security_Integration">
- <title>Spring Security Integration</title>
- <section
id="sect-Reference_Guide-Spring_Security_Integration-Introduction">
- <title>Introduction</title>
- <para>
- How to Integrate the spring security framework in the eXo portal?
- </para>
- <para>
- This tutorial will guide you through a few steps and show you how easy it is to
integrate spring security (or the Spring framework in general) in eXo portal. We will
create a login portlet example as a support all along the document reading. The login
portlet example has been developed and deployed using the eXo WCM product running on the
application server JBoss 4.2.3. But it can easily be adapted to another eXo product (such
as ECM) and to other servers such as tomcat. Moreover, the example, claiming to be a real
world example, is implemented using JSF 1.2, the JBoss portlet bridge and Spring and can
serve as a example project from where you can start your own portlet development targeting
the eXo platform.
- </para>
+ <title>Spring Security Integration</title>
+ <section
id="sect-Reference_Guide-Spring_Security_Integration-Introduction">
+ <title>Introduction</title>
+ <para>
+ How to Integrate the spring security framework in the eXo portal?
+ </para>
+ <para>
+ This tutorial will guide you through a few steps and show you how easy it is
to integrate spring security (or the Spring framework in general) in eXo portal. We will
create a login portlet example as a support all along the document reading. The login
portlet example has been developed and deployed using the eXo WCM product running on the
application server JBoss 4.2.3. But it can easily be adapted to another eXo product (such
as ECM) and to other servers such as tomcat. Moreover, the example, claiming to be a real
world example, is implemented using JSF 1.2, the JBoss portlet bridge and Spring and can
serve as a example project from where you can start your own portlet development targeting
the eXo platform.
+ </para>
- </section>
-
- <section
id="sect-Reference_Guide-Spring_Security_Integration-Installation">
- <title>Installation</title>
- <para>
- This tutorial assumes that you have a working eXo WCM installation running under JBoss
4.2.x.
- </para>
- <para>
- Download the spring framework: <ulink
url="http://s3.amazonaws.com/dist.springframework.org/release/SPR/sp...
- </para>
- <para>
- Download spring-security: <ulink
url="http://sourceforge.net/project/showfiles.php?group_id=73357&...
- </para>
- <para>
- Unzip the 02portal.war file in the jboss server/default/deploy/exoplatform.sar
directory and copy the following jars in WEB-INF/lib:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- spring.jar
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-Spring_Security_Integration-Installation">
+ <title>Installation</title>
+ <para>
+ This tutorial assumes that you have a working eXo WCM installation running
under JBoss 4.2.x.
+ </para>
+ <para>
+ Download the spring framework: <ulink
url="http://s3.amazonaws.com/dist.springframework.org/release/SPR/sp...
+ </para>
+ <para>
+ Download spring-security: <ulink
url="http://sourceforge.net/project/showfiles.php?group_id=73357&...
+ </para>
+ <para>
+ Unzip the 02portal.war file in the jboss
server/default/deploy/exoplatform.sar directory and copy the following jars in
WEB-INF/lib:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ spring.jar
+ </para>
- </listitem>
- <listitem>
- <para>
- spring-security-core.jar
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ spring-security-core.jar
+ </para>
- </listitem>
- <listitem>
- <para>
- aspectjrt-1.5.4.jar
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ aspectjrt-1.5.4.jar
+ </para>
- </listitem>
- <listitem>
- <para>
- exo-spring.jar (contains the filters and event handlers described in this tutorial -
see the attachment section of this page)
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ exo-spring.jar (contains the filters and event handlers described in
this tutorial - see the attachment section of this page)
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </section>
-
- <section
id="sect-Reference_Guide-Spring_Security_Integration-Configuration">
- <title>Configuration</title>
- <para>
- To enable spring security in exo we need to go through a few configuration steps:
- </para>
- <section id="sect-Reference_Guide-Configuration-JAAS_disabling">
- <title>JAAS disabling</title>
- <para>
- First, we need to disable the JAAS security which is the default authentication
mechanism in exo. Edit 02portal.war web.xml file and comment out the JAAS configuration
related lines:
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-Spring_Security_Integration-Configuration">
+ <title>Configuration</title>
+ <para>
+ To enable spring security in exo we need to go through a few configuration
steps:
+ </para>
+ <section
id="sect-Reference_Guide-Configuration-JAAS_disabling">
+ <title>JAAS disabling</title>
+ <para>
+ First, we need to disable the JAAS security which is the default
authentication mechanism in exo. Edit 02portal.war web.xml file and comment out the JAAS
configuration related lines:
+ </para>
+
<programlisting language="XML" role="XML">...
<session-config>
<session-timeout>15</session-timeout>
@@ -108,14 +108,14 @@
</security-role>
...</programlisting>
- </section>
-
- <section
id="sect-Reference_Guide-Configuration-Enabling_spring_security">
- <title>Enabling spring security</title>
- <para>
- To enable spring and set the spring security filter, add the following lines:
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-Configuration-Enabling_spring_security">
+ <title>Enabling spring security</title>
+ <para>
+ To enable spring and set the spring security filter, add the following
lines:
+ </para>
+
<programlisting language="XML" role="XML">...
<context-param>
<param-name>contextConfigLocation</param-name>
@@ -131,10 +131,10 @@
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
...</programlisting>
- <para>
- Activate the spring security filter at the right position, i.e. just after the filter
responsible of exo container initialization.
- </para>
-
+ <para>
+ Activate the spring security filter at the right position, i.e. just
after the filter responsible of exo container initialization.
+ </para>
+
<programlisting language="XML" role="XML">...
<filter-mapping>
<filter-name>PortalContainerInitializedFilter</filter-name>
@@ -152,14 +152,14 @@
</filter-mapping>
...</programlisting>
- </section>
-
- <section
id="sect-Reference_Guide-Configuration-security_context.xml">
- <title>security-context.xml</title>
- <para>
- We need to configure the spring security filter chain for our purposes. Create a file
named security-context.xml in 02portal.war WEB-INF directory containing the following
lines:
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-Configuration-security_context.xml">
+ <title>security-context.xml</title>
+ <para>
+ We need to configure the spring security filter chain for our purposes.
Create a file named security-context.xml in 02portal.war WEB-INF directory containing the
following lines:
+ </para>
+
<programlisting language="XML" role="XML"><?xml
version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
@@ -180,29 +180,29 @@
</authentication-provider>
</beans:beans></programlisting>
- <para>
- The file contains two elements. The http node which is responsible of configuring the
filter chain. The auto-config mode set to true allows us to do just a minimal
configuration, everything else being smartly initialized by default. We just set an
intercept URL pointing to '/private/**' with the ROLE_USER authority which
corresponds to secured resources in exo. In case of successful auhentication, the user
will be redirected to the specified default target URL.
- </para>
- <para>
- The second element defines a simple authentication provider based on the spring
security InMemoryDaoImpl implementation of the UserDetailsService. Note that we define the
exo root user in the configuration which will allow us to log in with admin privileges in
the exo portal.
- </para>
+ <para>
+ The file contains two elements. The http node which is responsible of
configuring the filter chain. The auto-config mode set to true allows us to do just a
minimal configuration, everything else being smartly initialized by default. We just set
an intercept URL pointing to '/private/**' with the ROLE_USER authority which
corresponds to secured resources in exo. In case of successful authentication, the user
will be redirected to the specified default target URL.
+ </para>
+ <para>
+ The second element defines a simple authentication provider based on the
spring security InMemoryDaoImpl implementation of the UserDetailsService. Note that we
define the exo root user in the configuration which will allow us to log in with admin
privileges in the exo portal.
+ </para>
- </section>
-
+ </section>
+
- </section>
-
- <section
id="sect-Reference_Guide-Spring_Security_Integration-Login_portlet_example">
- <title>Login portlet example</title>
- <para>
- Now that we have successfully installed and configured spring security in exo, we need
a login portlet example to capture user credentials and serve as an entry point in the
authentication process. The login portlet itself is based on JSF 1.2, Jboss portlet bridge
and the spring framework, but you can obviously use whatever web framework you want to
achieve the same.
- </para>
- <section
id="sect-Reference_Guide-Login_portlet_example-Building_the_portlet">
- <title>Building the portlet</title>
- <para>
- So we need a login form to capture user credentials inputs. The portlet login form
consists of the following lines of xml:
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-Spring_Security_Integration-Login_portlet_example">
+ <title>Login portlet example</title>
+ <para>
+ Now that we have successfully installed and configured spring security in
exo, we need a login portlet example to capture user credentials and serve as an entry
point in the authentication process. The login portlet itself is based on JSF 1.2, Jboss
portlet bridge and the spring framework, but you can obviously use whatever web framework
you want to achieve the same.
+ </para>
+ <section
id="sect-Reference_Guide-Login_portlet_example-Building_the_portlet">
+ <title>Building the portlet</title>
+ <para>
+ So we need a login form to capture user credentials inputs. The portlet
login form consists of the following lines of xml:
+ </para>
+
<programlisting><f:view
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ice="http://www.icesoft.com/icefaces/component"
@@ -241,10 +241,10 @@
</div>
</h:form>
</f:view></programlisting>
- <para>
- The interesting part resides in the backing bean which implements the login action
triggered when the user clicks the login form submit button.
- </para>
-
+ <para>
+ The interesting part resides in the backing bean which implements the
login action triggered when the user clicks the login form submit button.
+ </para>
+
<programlisting language="Java" role="Java">package
org.exoplatform.loginportlet;
import org.springframework.context.annotation.Scope;
@@ -266,53 +266,53 @@
...
}</programlisting>
- <para>
- The login action simply sends a HTTP redirect to the spring security login URL
passing the user login and password as parameters. This URL informs the filter to try to
authenticate the supplied user credentials. This is the Spring security authentication
process entry point.
- </para>
+ <para>
+ The login action simply sends a HTTP redirect to the spring security
login URL passing the user login and password as parameters. This URL informs the filter
to try to authenticate the supplied user credentials. This is the Spring security
authentication process entry point.
+ </para>
- </section>
-
- <section
id="sect-Reference_Guide-Login_portlet_example-Setting_up_the_login_portal_page">
- <title>Setting up the login portal page</title>
- <para>
- Now that we have a login portlet available we need to set it up into a portal page.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Log in as root in exo portal.
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-Login_portlet_example-Setting_up_the_login_portal_page">
+ <title>Setting up the login portal page</title>
+ <para>
+ Now that we have a login portlet available we need to set it up into a
portal page.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Log in as root in exo portal.
+ </para>
- </listitem>
- <listitem>
- <para>
- Go to application registry and import the loginportlet
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Go to application registry and import the loginportlet
+ </para>
- </listitem>
- <listitem>
- <para>
- Add a new hidden page named 'Login' under the portal classic's
navigation (read more on page creation <ulink
url="here>WCM.Tutorial">here>WCM.Tutorial</ulink>). Make
sure that the visible flag is unchecked to hide the page. Also declare the page as public
so that everyone can access it without being authenticated for obvious reasons.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a new hidden page named 'Login' under the portal
classic's navigation (read more on page creation <ulink
url="here>WCM.Tutorial">here>WCM.Tutorial</ulink>). Make
sure that the visible flag is unchecked to hide the page. Also declare the page as public
so that everyone can access it without being authenticated for obvious reasons.
+ </para>
- </listitem>
- <listitem>
- <para>
- Finally, drag & drop the login portlet in the page with the desired
layout.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Finally, drag & drop the login portlet in the page with
the desired layout.
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </section>
-
- <section
id="sect-Reference_Guide-Login_portlet_example-Customization_of_portal_login_and_logout_urls">
- <title>Customization of portal login and logout urls</title>
- <para>
- In the portal header, there is a login or logout action displayed depending whether
you are already logged in or not. We need to customize those actions so that when the user
clicks on it she or he will be redirected either to our login page or to the spring
security logout url. Edit the article, go to the default.js tab and apply the following
changes to the code:
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-Login_portlet_example-Customization_of_portal_login_and_logout_urls">
+ <title>Customization of portal login and logout URLs</title>
+ <para>
+ In the portal header, there is a login or logout action displayed
depending whether you are already logged in or not. We need to customize those actions so
that when the user clicks on it she or he will be redirected either to our login page or
to the spring security logout url. Edit the article, go to the default.js tab and apply
the following changes to the code:
+ </para>
+
<programlisting language="Java" role="Java">function
validateUser() {
var user = eXo.env.portal.userName;
@@ -345,63 +345,63 @@
}
eXo.core.Browser.addOnLoadCallback("validateUser",
validateUser);</programlisting>
- <para>
- As you can see, the two onclick event handler function bodies have been changed to a
simple redirect to the login page or the logout URL.
- </para>
+ <para>
+ As you can see, the two onclick event handler function bodies have been
changed to a simple redirect to the login page or the logout URL.
+ </para>
- </section>
-
- <section
id="sect-Reference_Guide-Login_portlet_example-A_look_at_the_login_page">
- <title>A look at the login page</title>
- <para>
- Once you are done with all this, just click on the login action and you should be
redirect to the login page looking something like that:
- </para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/eXoJCR/login-page.jpg" width="444"
/>
- </imageobject>
+ </section>
+
+ <section
id="sect-Reference_Guide-Login_portlet_example-A_look_at_the_login_page">
+ <title>A look at the login page</title>
+ <para>
+ Once you are done with all this, just click on the login action and you
should be redirect to the login page looking something like that:
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/eXoJCR/login-page.jpg"
width="444" />
+ </imageobject>
- </mediaobject>
+ </mediaobject>
- </section>
-
+ </section>
+
- </section>
-
- <section
id="sect-Reference_Guide-Spring_Security_Integration-Integration_strategies">
- <title>Integration strategies</title>
- <para>
- Until now we haven't discussed about any integration strategies concerning a
potential existing security realm outside of the eXo platform. To address this problem we
have the choice between at least two different strategies:
- </para>
- <para>
- 1.1.1 <emphasis role="bold">Direct integration</emphasis> We can
directly integrate eXo with the external realm. Everything related to organisation and
user management in exo is cleanly separated in its own abstraction accessible through the
OrganisationService. The authentication process itself is encapsulated in the
Authenticator abstraction which sits on top of the organization service. eXo provides
several implementations of both. So whether your realm is based on LDAP or JDBC and
because the default implementations are generic enough, you will be able to use them and
fits them to your needs with a matter of a little configuration. You can even develop a
custom implementation to meet your more specific needs.
- </para>
- <section
id="sect-Reference_Guide-Integration_strategies-Replication">
- <title>Replication</title>
- <para>
- Or we can go through a replication process between the external realm and the eXo
platform realm. This is the strategy that we are going to use to build our login portlet
example. Furthermore, the replication will occur dynamically on any user authentication
attempt.
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-Spring_Security_Integration-Integration_strategies">
+ <title>Integration strategies</title>
+ <para>
+ Until now we haven't discussed about any integration strategies
concerning a potential existing security realm outside of the eXo platform. To address
this problem we have the choice between at least two different strategies:
+ </para>
+ <para>
+ 1.1.1 <emphasis role="bold">Direct
integration</emphasis> We can directly integrate eXo with the external realm.
Everything related to organisation and user management in exo is cleanly separated in its
own abstraction accessible through the OrganisationService. The authentication process
itself is encapsulated in the Authenticator abstraction which sits on top of the
organization service. eXo provides several implementations of both. So whether your realm
is based on LDAP or JDBC and because the default implementations are generic enough, you
will be able to use them and fits them to your needs with a matter of a little
configuration. You can even develop a custom implementation to meet your more specific
needs.
+ </para>
+ <section
id="sect-Reference_Guide-Integration_strategies-Replication">
+ <title>Replication</title>
+ <para>
+ Or we can go through a replication process between the external realm and
the eXo platform realm. This is the strategy that we are going to use to build our login
portlet example. Furthermore, the replication will occur dynamically on any user
authentication attempt.
+ </para>
- </section>
-
+ </section>
+
- </section>
-
- <section
id="sect-Reference_Guide-Spring_Security_Integration-Integration_with_eXo_portal">
- <title>Integration with eXo portal</title>
- <para>
- Being successfully authenticated against an external realm is not sufficient by
itself. We also need to propagate the newly created security context to the portal own
security mechanism. In eXo portal terminology, it means we have to create an Identity
object for the user and register it into the Identity Registry.
- </para>
- <para>
- Spring framework provides a simple notification model where a bean can listen to
application events published by other beans. Fortunately, spring security uses this
mechanism and publishes an InteractiveAuthenticationSuccessEvent in case of successful
authentication. That will allow us to hook up custom code to that event.
- </para>
- <para>
- Furthermore, we need to replicate the user details from the external realm to the eXo
portal one according to the integration strategy defined above.
- </para>
- <para>
- We create a SpringSecurityEventHandler bean that implements the ApplicationListener
interface and listens to the InteractiveAuthenticationSuccessEvent event.
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-Spring_Security_Integration-Integration_with_eXo_portal">
+ <title>Integration with eXo portal</title>
+ <para>
+ Being successfully authenticated against an external realm is not sufficient
by itself. We also need to propagate the newly created security context to the portal own
security mechanism. In eXo portal terminology, it means we have to create an Identity
object for the user and register it into the Identity Registry.
+ </para>
+ <para>
+ Spring framework provides a simple notification model where a bean can listen
to application events published by other beans. Fortunately, spring security uses this
mechanism and publishes an InteractiveAuthenticationSuccessEvent in case of successful
authentication. That will allow us to hook up custom code to that event.
+ </para>
+ <para>
+ Furthermore, we need to replicate the user details from the external realm to
the eXo portal one according to the integration strategy defined above.
+ </para>
+ <para>
+ We create a SpringSecurityEventHandler bean that implements the
ApplicationListener interface and listens to the InteractiveAuthenticationSuccessEvent
event.
+ </para>
+
<programlisting language="Java" role="Java">package
org.exoplatform.spring.security.web;
...
@@ -460,30 +460,30 @@
...
}</programlisting>
- <para>
- Basically the bean retrieves user login and password from the
InteractiveAuthenticationSuccessEvent object and tries to get the user from the
organization service. In case he cannot find it in the repository, he simply creates it on
the fly. In this example the user is created with just a few details, but you can put some
custom integration code with the external realm here, and create the user with all the
details (email, birth date, roles, etc.) it seems appropriate to you. After that, the bean
creates an Identity object with the help of the authenticator service, populates it with a
subject containing the user credentials and registers it. That's all we have to do to
make the portal aware of the user logging in.
- </para>
- <para>
- Registering our bean is done the usual way in security-context.xml file:
- </para>
-
+ <para>
+ Basically the bean retrieves user login and password from the
InteractiveAuthenticationSuccessEvent object and tries to get the user from the
organization service. In case he cannot find it in the repository, he simply creates it on
the fly. In this example the user is created with just a few details, but you can put some
custom integration code with the external realm here, and create the user with all the
details (email, birth date, roles, etc.) it seems appropriate to you. After that, the bean
creates an Identity object with the help of the authenticator service, populates it with a
subject containing the user credentials and registers it. That's all we have to do to
make the portal aware of the user logging in.
+ </para>
+ <para>
+ Registering our bean is done the usual way in security-context.xml file:
+ </para>
+
<programlisting language="XML" role="XML">...
<beans:bean id="myEventHandler"
class="org.exoplatform.spring.security.web.SpringSecurityEventHandler"
/>
...</programlisting>
- </section>
-
- <section
id="sect-Reference_Guide-Spring_Security_Integration-Security_context_propagation_to_portlets">
- <title>Security context propagation to portlets</title>
- <para>
- Part of the problem is the question of security context propagation between on one
side the portal webapp and at the other side the portlets webapps. This means that the
security context has to be available in the portlet side allowing the application logic to
deal the with current user principal and granted authorities. By default, Spring security
uses a thread local variable to partially achieve this. But a problem may arise due to the
fact that the portal invokes the portlet through a webapp cross context call. This means
that it can lead to a class cast exceptions (two different classloaders involved), or that
the security context is simply not propagated at all. To accommodate this, we will need to
set up two request filters, one at the portal webapp side and the other at the portlet
webapp side and use the http request to propagate the context in between.
- </para>
- <section
id="sect-Reference_Guide-Security_context_propagation_to_portlets-Portal_side_filter">
- <title>Portal side filter</title>
- <para>
- We will use the spring security extensible filter chain to plug in our filter.
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-Spring_Security_Integration-Security_context_propagation_to_portlets">
+ <title>Security context propagation to portlets</title>
+ <para>
+ Part of the problem is the question of security context propagation between
on one side the portal webapp and at the other side the portlets webapps. This means that
the security context has to be available in the portlet side allowing the application
logic to deal the with current user principal and granted authorities. By default, Spring
security uses a thread local variable to partially achieve this. But a problem may arise
due to the fact that the portal invokes the portlet through a webapp cross context call.
This means that it can lead to a class cast exceptions (two different classloaders
involved), or that the security context is simply not propagated at all. To accommodate
this, we will need to set up two request filters, one at the portal webapp side and the
other at the portlet webapp side and use the http request to propagate the context in
between.
+ </para>
+ <section
id="sect-Reference_Guide-Security_context_propagation_to_portlets-Portal_side_filter">
+ <title>Portal side filter</title>
+ <para>
+ We will use the spring security extensible filter chain to plug in our
filter.
+ </para>
+
<programlisting language="Java" role="Java">package
org.exoplatform.spring.security.web;
...
@@ -508,27 +508,27 @@
return 0;
}
}</programlisting>
- <para>
- The PortalSideSecurityContextFilter simply fills the request with the security
context and security last exception using the
HttpSessionContextIntegrationFilter.SPRING_SECURITY_CONTEXT_KEY and
AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY attribute names. The portlet
can have a look to the AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY
attribute to check if a security exception has occurred.
- </para>
- <para>
- The following lines in the security-context file register our custom filter in the
chain at the last position.
- </para>
-
+ <para>
+ The PortalSideSecurityContextFilter simply fills the request with the
security context and security last exception using the
HttpSessionContextIntegrationFilter.SPRING_SECURITY_CONTEXT_KEY and
AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY attribute names. The portlet
can have a look to the AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY
attribute to check if a security exception has occurred.
+ </para>
+ <para>
+ The following lines in the security-context file register our custom
filter in the chain at the last position.
+ </para>
+
<programlisting language="XML" role="XML">...
<beans:bean id="myCustomFilter"
class="org.exoplatform.spring.security.web.PortalSideSecurityContextFilter">
<custom-filter after="LAST" />
</beans:bean>
...</programlisting>
- </section>
-
- <section
id="sect-Reference_Guide-Security_context_propagation_to_portlets-Portlet_side_filter">
- <title>Portlet side filter</title>
- <para>
- In the portlet webapp we create a regular filter named
PortletSideSecurityContextFilter.
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-Security_context_propagation_to_portlets-Portlet_side_filter">
+ <title>Portlet side filter</title>
+ <para>
+ In the portlet webapp we create a regular filter named
PortletSideSecurityContextFilter.
+ </para>
+
<programlisting language="Java" role="Java">package
org.exoplatform.spring.security.web;
...
@@ -574,13 +574,13 @@
}
}</programlisting>
- <para>
- The PortletSideSecurityContextFilter retrieves the security context from the request
and proceeds to a serialization de-serialization of it to avoid a potential class cast
exception that may occur when propagating an object across webapps. Then the context is
simply set or cleared whether the context is null or not.
- </para>
- <para>
- To register your filter simply add the following lines to your portlet webapp web.xml
file.
- </para>
-
+ <para>
+ The PortletSideSecurityContextFilter retrieves the security context from
the request and proceeds to a serialization deserialization of it to avoid a potential
class cast exception that may occur when propagating an object across webapps. Then the
context is simply set or cleared whether the context is null or not.
+ </para>
+ <para>
+ To register your filter simply add the following lines to your portlet
webapp web.xml file.
+ </para>
+
<programlisting language="XML" role="XML">...
<filter>
<filter-name>portletSideSecurityContextFilter</filter-name>
@@ -596,19 +596,19 @@
</filter-mapping>
...</programlisting>
- </section>
-
+ </section>
+
- </section>
-
- <section
id="sect-Reference_Guide-Spring_Security_Integration-Conclusion">
- <title>Conclusion</title>
- <para>
- We are done! Now we know how to integrate the spring security framework in the eXo
portal. Thanks to the the great integration capabilities of both eXo portal and Spring
framework. You can have a look to the attachment section on this page and get the source
code of this tutorial.
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-Spring_Security_Integration-Conclusion">
+ <title>Conclusion</title>
+ <para>
+ We are done! Now we know how to integrate the spring security framework in
the eXo portal. Thanks to the great integration capabilities of both eXo portal and Spring
framework. You can have a look to the attachment section on this page and get the source
code of this tutorial.
+ </para>
- </section>
-
+ </section>
+
</section>
Modified: epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++ epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/core.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -15,7 +15,7 @@
<xi:include href="core/conversationstate-when-membership-changed.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="core/db-schema-creator-service.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="core/db-configuration-hibernate.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="core/ldap-configuration.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="core/LDAP-configuration.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="core/tika-document-reader-service.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="core/digest-auth.xml"
xmlns:xi="http://www.w3.org/2001/XInclude" />
</section>
Modified: epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/faq/jcr-faq.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/faq/jcr-faq.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++ epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/faq/jcr-faq.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -4,213 +4,213 @@
%BOOK_ENTITIES;
]>
<section id="sect-Reference_Guide-JCR_FAQ">
- <title>JCR FAQ</title>
- <section id="sect-Reference_Guide-JCR_FAQ-Kernel">
- <title>Kernel</title>
- <variablelist>
- <title></title>
- <varlistentry>
- <term>What is the best, standardized way to get the instance of a service
?</term>
- <listitem>
- <para>
-
+ <title>JCR FAQ</title>
+ <section id="sect-Reference_Guide-JCR_FAQ-Kernel">
+ <title>Kernel</title>
+ <variablelist>
+ <title></title>
+ <varlistentry>
+ <term>What is the best, standardized way to get the instance of a
service ?</term>
+ <listitem>
+ <para>
+
<programlisting language="Java"
role="Java">container.getComponentInstanceOfType(ServiceName.class);</programlisting>
- </para>
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
+ </varlistentry>
- </variablelist>
+ </variablelist>
- </section>
-
- <section id="sect-Reference_Guide-JCR_FAQ-JCR_core">
- <title>JCR core</title>
- <variablelist>
- <title></title>
- <varlistentry>
- <term>Is it better to use Session.getNodeByUUID or
Session.getItem?</term>
- <listitem>
- <para>
- <literal>Session.getNodeByUUID()</literal> is about 2.5 times faster
than <literal>Session.getItem(String)</literal> and 25% faster than
<literal>Node.getNode(String)</literal>. See the daily tests results for such
comparisons, e.g.
- </para>
- <para>
- <ulink
url="http://tests.exoplatform.org/JCR/1.12.2-GA/rev.2442/daily-perfo...
- </para>
+ </section>
+
+ <section id="sect-Reference_Guide-JCR_FAQ-JCR_core">
+ <title>JCR core</title>
+ <variablelist>
+ <title></title>
+ <varlistentry>
+ <term>Is it better to use Session.getNodeByUUID or
Session.getItem?</term>
+ <listitem>
+ <para>
+ <literal>Session.getNodeByUUID()</literal> is about
2.5 times faster than <literal>Session.getItem(String)</literal> and 25%
faster than <literal>Node.getNode(String)</literal>. See the daily tests
results for such comparisons, e.g.
+ </para>
+ <para>
+ <ulink
url="http://tests.exoplatform.org/JCR/1.12.2-GA/rev.2442/daily-perfo...
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Does it make sense to have all the node referenceable to use
<literal>getNodeByUUID</literal> all the time?</term>
- <listitem>
- <para>
- Until it's applicable for a business logic it can be. But take in account the
paths are human readable and lets you think in hierarchy. If it's important a location
based approach is preferable.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>Does it make sense to have all the node referenceable to use
<literal>getNodeByUUID</literal> all the time?</term>
+ <listitem>
+ <para>
+ Until it's applicable for a business logic it can be. But
take in account the paths are human readable and lets you think in hierarchy. If it's
important a location based approach is preferable.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>What should I use to check if an Item exists before getting the
Value?</term>
- <listitem>
- <para>
- Use <literal>Session.itemExists(String absPath)</literal>,
<literal>Node.hasNode(StringrelPath)</literal> or
<literal>Property.hasProperty(String name)</literal>. It is also is possible
to check <literal>Node.hasNodes()</literal> and
<literal>Node.hasProprties()</literal>.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>What should I use to check if an Item exists before getting
the Value?</term>
+ <listitem>
+ <para>
+ Use <literal>Session.itemExists(String
absPath)</literal>, <literal>Node.hasNode(StringrelPath)</literal> or
<literal>Property.hasProperty(String name)</literal>. It is also is possible
to check <literal>Node.hasNodes()</literal> and
<literal>Node.hasProprties()</literal>.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How to use Observation properly?</term>
- <listitem>
- <para>
- JCR Observation's a way to listen on persistence changes of a Repository. It
provides several options to configure the listener for an interesting only changes. To use
properly, it's important to understand concept of events filtering for a registered
EventListener.
- </para>
- <para>
- An often confusing part is the <emphasis
role="bold">absPath</emphasis>, it's an associated parent of a
location you want to observe events on. I.e. it's a parent of child node(s) or this
parent property(ies); if <emphasis role="bold">isDeep</emphasis> is
true then you'll get events of all the subtree of child nodes also. The same actual
for <emphasis role="bold">uuid</emphasis> and <emphasis
role="bold">nodeTypeName</emphasis> parameters of
ObservationManager.addEventListener() method.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>How to use Observation properly?</term>
+ <listitem>
+ <para>
+ JCR Observation's a way to listen on persistence changes of a
Repository. It provides several options to configure the listener for an interesting only
changes. To use properly, it's important to understand concept of events filtering for
a registered EventListener.
+ </para>
+ <para>
+ An often confusing part is the <emphasis
role="bold">absPath</emphasis>, it is an associated parent of a
location you want to observe events on. That is to say it is a parent of child node(s) or
this parent property(ies); if <emphasis
role="bold">isDeep</emphasis> is true then you'll get events of all
the subtree of child nodes also. The same actual for <emphasis
role="bold">uuid</emphasis> and <emphasis
role="bold">nodeTypeName</emphasis> parameters of
ObservationManager.addEventListener() method.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Is it better to use queries that to access the data by the JCR
API?</term>
- <listitem>
- <para>
- No, direct access to items via JCR API is more efficient. Search will consume
additional resources for index querying and only then return the items.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>Is it better to use queries that to access the data by the
JCR API?</term>
+ <listitem>
+ <para>
+ No, direct access to items via JCR API is more efficient. Search
will consume additional resources for index querying and only then return the items.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>What is default query ordering?</term>
- <listitem>
- <para>
- By default (if queries do not contain any ordering statements) result nodes are
sorted by document order.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>What is default query ordering?</term>
+ <listitem>
+ <para>
+ By default (if queries do not contain any ordering statements)
result nodes are sorted by document order.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Is ordering by jcr:path or Item name supported?</term>
- <listitem>
- <para>
- No, it is not supported. There are two ways to order results, in which
<emphasis>path</emphasis> may be used as criteria:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Order by property with value type NAME or PATH (supported).
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>Is ordering by jcr:path or Item name supported?</term>
+ <listitem>
+ <para>
+ No, it is not supported. There are two ways to order results, in
which <emphasis>path</emphasis> may be used as criteria:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Order by property with value type NAME or PATH
(supported).
+ </para>
- </listitem>
- <listitem>
- <para>
- Order by jcr:path - sort by exact path of node (not supported.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Order by jcr:path - sort by exact path of node (not
supported.
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- Order by jcr:path
- </para>
- <para>
- If no order specification is supplied in the query statement, implementations may
support document order on the result nodes. And it is sorted by order number.
- </para>
- <para>
- By default, (if a query does not contain any ordering statements) result nodes is
sorted by document order.
- </para>
-
+ </itemizedlist>
+ <para>
+ Order by jcr:path
+ </para>
+ <para>
+ If no order specification is supplied in the query statement,
implementations may support document order on the result nodes. And it is sorted by order
number.
+ </para>
+ <para>
+ By default, (if a query does not contain any ordering statements)
result nodes is sorted by document order.
+ </para>
+
<programlisting>SELECT * FROM nt:unstructured WHERE jcr:path LIKE
'testRoot/%'</programlisting>
- <para>
- For specified jcr:path ordering there is different proceeding in XPath and SQL:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- SQL no matter ascending or descending - query returns result nodes in random
order: {code}SELECT * FROM nt:unstructured WHERE jcr:path LIKE 'testRoot/%' ORDER
BY jcr:path{code}
- </para>
+ <para>
+ For specified jcr:path ordering there is different proceeding in
XPath and SQL:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ SQL no matter ascending or descending - query returns
result nodes in random order: {code}SELECT * FROM nt:unstructured WHERE jcr:path LIKE
'testRoot/%' ORDER BY jcr:path{code}
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para>
- XPath - jcr:path order construction is ignored (so result is not sorted according
path); {code}/testRoot/* <ulink
url="@jcr:primaryType='nt:unstructured'">@jcr:primaryType='nt:unstructured'</ulink>
order by jcr:path{code}
- </para>
+ </itemizedlist>
+ <itemizedlist>
+ <listitem>
+ <para>
+ XPath - jcr:path order construction is ignored (so result
is not sorted according path); {code}/testRoot/* <ulink
url="@jcr:primaryType='nt:unstructured'">@jcr:primaryType='nt:unstructured'</ulink>
order by jcr:path{code}
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How eXo JCR indexer uses content encoding?</term>
- <listitem>
- <para>
- Indexer uses jcr:encoding property of nt:resource node (used as jcr:content child
node of nt:file) 2. if no jcr:encoding property set the Document Service will use the one
configured in the service (defaultEncoding) 3. if nothing is configured a JVM, the default
encoding will be used.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>How eXo JCR indexer uses content encoding?</term>
+ <listitem>
+ <para>
+ Indexer uses jcr:encoding property of nt:resource node (used as
jcr:content child node of nt:file) 2. if no jcr:encoding property set the Document Service
will use the one configured in the service (defaultEncoding) 3. if nothing is configured a
JVM, the default encoding will be used.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Which database server is better for eXo JCR?</term>
- <listitem>
- <para>
- If the question is a performance, it's difficult question, as each database can
be configured to be more (and more) faster for each special case. MySQL with MyISAM engine
will be faster. But MySQL has limitations for indexes for multilingual columns (Item names
actually). So, with long Item names (larger ofOracle or PostgreSQL also are good for
performance. DB2 and MSSQL are slower in default configurations. Default configuration of
Sybase leader of slowness. But in this question, take the database server maintenance in
account. MySQL and PostgreSQL are simple in installation and can work even on limited
hardware. Oracle, DB2, MSSQL or Sybase need more efforts. The same actual for maintenance
during the work. Note for Sybase: "check-sns-new-connection" data container
configuration parameter should be set to "true". For testing purpose, embedded
database such as HSQLDB is the best choice. Apache Derby and H2 also supported. But H2
surprisingly needs "beta" feature enab!
led - MVCC=TRUE in JDBC url.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>Which database server is better for eXo JCR?</term>
+ <listitem>
+ <para>
+ If the question is a performance, it's difficult question, as
each database can be configured to be more (and more) faster for each special case. MySQL
with MyISAM engine will be faster. But MySQL has limitations for indexes for multilingual
columns (Item names actually). So, with long Item names (larger ofOracle or PostgreSQL
also are good for performance. DB2 and MSSQL are slower in default configurations. Default
configuration of Sybase leader of slowness. But in this question, take the database server
maintenance in account. MySQL and PostgreSQL are simple in installation and can work even
on limited hardware. Oracle, DB2, MSSQL or Sybase need more efforts. The same actual for
maintenance during the work. Note for Sybase: "check-sns-new-connection" data
container configuration parameter should be set to "true". For testing purpose,
embedded database such as HSQLDB is the best choice. Apache Derby and H2 also supported.
But H2 surprisingly needs "!
beta" feature enabled - MVCC=TRUE in JDBC url.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How to setup eXo JCR for multilingual content on MySQL?</term>
- <listitem>
- <para>
- To allow multiple character sets to be sent from the client, the UTF-8 encoding
should be used, either by configuring utf8 as the default server character set, or by
configuring the JDBC driver to use UTF-8 through the characterEncoding property. MySQL
database should be created in single-byte encoding, e.g. "latin1":
- </para>
-
+ </varlistentry>
+ <varlistentry>
+ <term>How to setup eXo JCR for multilingual content on
MySQL?</term>
+ <listitem>
+ <para>
+ To allow multiple character sets to be sent from the client, the
UTF-8 encoding should be used, either by configuring utf8 as the default server character
set, or by configuring the JDBC driver to use UTF-8 through the characterEncoding
property. MySQL database should be created in single-byte encoding, e.g.
"latin1":
+ </para>
+
<programlisting>CREATE DATABASE db1 CHARACTER SET latin1 COLLATE
latin1_general_cs;</programlisting>
- <para>
- eXo JCR application (e.g. GateIn) should use JCR dialect "MySQL-UTF8".
- </para>
- <para>
- In other words: MySQL database default encoding and JCR dialect cannot be UTF8
both. Use single-byte encoding (e.g. "latin1") for database and
"mysql-utf8" dialect for eXo JCR.
- </para>
- <para>
- Notice: "MySQL-UTF8" dialect cannot be auto-detected, it should be set
explicitly in configuration.
- </para>
+ <para>
+ eXo JCR application (e.g. GateIn) should use JCR dialect
"MySQL-UTF8".
+ </para>
+ <para>
+ In other words: MySQL database default encoding and JCR dialect
cannot be UTF8 both. Use single-byte encoding (e.g. "latin1") for database and
"mysql-utf8" dialect for eXo JCR.
+ </para>
+ <para>
+ Notice: "MySQL-UTF8" dialect cannot be auto-detected,
it should be set explicitly in configuration.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Does MySQL have limitation affecting on eXo JCR features?</term>
- <listitem>
- <para>
- Index's key length of JCR_SITEM (JCR_MITEM) table for mysql-utf8 dialect is
reduced to 765 bytes (or 255 chars).
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>Does MySQL have limitation affecting on eXo JCR
features?</term>
+ <listitem>
+ <para>
+ Index's key length of JCR_SITEM (JCR_MITEM) table for
mysql-utf8 dialect is reduced to 765 bytes (or 255 chars).
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Does use of Sybase database need special options in eXo JCR
configuration?</term>
- <listitem>
- <para>
- To enable JCR working properly with Sybase, a property
'check-sns-new-connection' with 'false' value is required for each
workspace data container:
- </para>
-
+ </varlistentry>
+ <varlistentry>
+ <term>Does use of Sybase database need special options in eXo JCR
configuration?</term>
+ <listitem>
+ <para>
+ To enable JCR working properly with Sybase, a property
'check-sns-new-connection' with 'false' value is required for each
workspace data container:
+ </para>
+
<programlisting language="XML" role="XML"><container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
<properties>
<property name="source-name" value="jdbcjcr" />
@@ -223,13 +223,13 @@
<property name="check-sns-new-connection" value="false"
/>
</properties></programlisting>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How to open and close a session properly to avoid memory
leaks?</term>
- <listitem>
-
+ </varlistentry>
+ <varlistentry>
+ <term>How to open and close a session properly to avoid memory
leaks?</term>
+ <listitem>
+
<programlisting language="Java" role="Java">Session session =
repository.login(credentials);
try
{
@@ -240,50 +240,50 @@
session.logout();
}</programlisting>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Can I use Session after logging out?</term>
- <listitem>
- <para>
- No. Any instance of Session or Node (acquired through session) shouldn't be
used after logging out anymore. At least, it is highly recommended not to use.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>Can I use Session after logging out?</term>
+ <listitem>
+ <para>
+ No. Any instance of Session or Node (acquired through session)
shouldn't be used after logging out anymore. At least, it is highly recommended not to
use.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How to configure jcr for cluster?</term>
- <listitem>
- <para>
- So we have configured JCR in standalone mode and want to reconfigure it for
clustered environment. First of all, let's check whether all requirements are
satisfied:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Dedicated RDBMS anyone like MySQL, Postges, Oracle and, etc but just not HSSQL;
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>How to configure jcr for cluster?</term>
+ <listitem>
+ <para>
+ So we have configured JCR in standalone mode and want to
reconfigure it for clustered environment. First of all, let's check whether all
requirements are satisfied:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Dedicated RDBMS anyone like MySQL, Postges, Oracle and,
etc but just not HSSQL;
+ </para>
- </listitem>
- <listitem>
- <para>
- Shared storage. The simplest thing is to use shared FS like NFS or SMB mounted in
operation system, but they are rather slow. The best thing is to use SAN (Storage Area
Network);
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Shared storage. The simplest thing is to use shared FS
like NFS or SMB mounted in operation system, but they are rather slow. The best thing is
to use SAN (Storage Area Network);
+ </para>
- </listitem>
- <listitem>
- <para>
- Fast network between JCR nodes.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fast network between JCR nodes.
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- So now, need to configure Container a bit. Check exo-configuration.xml to be sure
that you are using JBossTS Transaction Service and JBossCache Transaction Manager, as
shown below.
- </para>
-
+ </itemizedlist>
+ <para>
+ So now, need to configure Container a bit. Check
exo-configuration.xml to be sure that you are using JBossTS Transaction Service and
JBossCache Transaction Manager, as shown below.
+ </para>
+
<programlisting language="XML"
role="XML"><component>
<key>org.jboss.cache.transaction.TransactionManagerLookup</key>
<type>org.jboss.cache.GenericTransactionManagerLookup</type>
@@ -299,15 +299,15 @@
</value-param>
</init-params>
</component></programlisting>
- <para>
- Next stage is actually the JCR configuration. We need JBossCache configuration
templates for : data-cache, indexer-cache and lock-manager-cache. Later they will be used
to configure JCR's core components. There are pre-bundled templates in EAR or JAR in
conf/standalone/cluster. They can be used as is or re-written if needed. And now,
re-configure a bit each workspace. Actually, a few parameters need changing, e.g.
<cache>, <query-handler> and <lock-manager>.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <cache> configuration should look like this:
- </para>
-
+ <para>
+ Next stage is actually the JCR configuration. We need JBossCache
configuration templates for : data-cache, indexer-cache and lock-manager-cache. Later they
will be used to configure JCR's core components. There are pre-bundled templates in
EAR or JAR in conf/standalone/cluster. They can be used as is or re-written if needed. And
now, re-configure a bit each workspace. Actually, a few parameters need changing, e.g.
<cache>, <query-handler> and <lock-manager>.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <cache> configuration should look like
this:
+ </para>
+
<programlisting language="XML" role="XML"><cache
enabled="true"
class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
<properties>
@@ -318,77 +318,77 @@
</properties>
</cache></programlisting>
- </listitem>
- <listitem>
- <para>
- "jbosscache-configuration" is the path to configuration template;
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "jbosscache-configuration" is the path to
configuration template;
+ </para>
- </listitem>
- <listitem>
- <para>
- "jgroups-configuration" is path to JGroups configuration that is
multiplexer stack is used (default). This file is also pre-bundled with templates and is
recommended for use;
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "jgroups-configuration" is path to JGroups
configuration that is multiplexer stack is used (default). This file is also pre-bundled
with templates and is recommended for use;
+ </para>
- </listitem>
- <listitem>
- <para>
- "jgroups-multiplexer-stack" just simply "true". Strongly
recommended;
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "jgroups-multiplexer-stack" just simply
"true". Strongly recommended;
+ </para>
- </listitem>
- <listitem>
- <para>
- "jbosscache-cluster-name" is the name of cluster group. It should be
different for each workspace and each workspace component. I.e.:
<repository_name>-<ws_name>-<component(cache\|lock\|index)>
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "jbosscache-cluster-name" is the name of
cluster group. It should be different for each workspace and each workspace component.
I.e.:
<repository_name>-<ws_name>-<component(cache\|lock\|index)>
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para>
- <query-handler> configuration
- </para>
- <itemizedlist>
- <listitem>
- <para>
- You must replace or add in <query-handler> block the
"changesfilter-class" parameter equals with:
- </para>
-
+ </itemizedlist>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <query-handler> configuration
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ You must replace or add in
<query-handler> block the "changesfilter-class" parameter equals
with:
+ </para>
+
<programlisting language="XML" role="XML"><property
name="changesfilter-class"
value="org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter"/></programlisting>
- </listitem>
- <listitem>
- <para>
- add JBossCache-oriented configuration:
- </para>
-
+ </listitem>
+ <listitem>
+ <para>
+ add JBossCache-oriented configuration:
+ </para>
+
<programlisting language="XML" role="XML"><property
name="jbosscache-configuration" value="test-jbosscache-indexer.xml"
/>
<property name="jgroups-configuration" value="udp-mux.xml"
/>
<property name="jgroups-multiplexer-stack" value="true"
/>
<property name="jbosscache-cluster-name"
value="JCR-cluster-indexer-db1-ws" />
<property name="max-volatile-time" value="60"
/></programlisting>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- Those properties have the same meaning and restrictions as in the previous block.
The last property "max-volatile-time" is not mandatory but recommended. This
notifies that the latest changes in index will be visible for each cluster node not later
than in 60s.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <lock-manager> configuration
- </para>
- <para>
- Maybe this is the hardest element to configure, because we have to define access
to DB where locks will be stored. Replace existing lock-manager configuration with shown
below.
- </para>
-
+ </itemizedlist>
+ <para>
+ Those properties have the same meaning and restrictions as in the
previous block. The last property "max-volatile-time" is not mandatory but
recommended. This notifies that the latest changes in index will be visible for each
cluster node not later than in 60s.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <lock-manager> configuration
+ </para>
+ <para>
+ Maybe this is the hardest element to configure, because
we have to define access to DB where locks will be stored. Replace existing lock-manager
configuration with shown below.
+ </para>
+
<programlisting language="XML" role="XML">
<lock-manager
class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
<properties>
@@ -409,87 +409,87 @@
</lock-manager>
</programlisting>
- <para>
- First few properties are the same as in the previous components, but here you can
see some strange "jbosscache-cl-cache.jdbc.*" properties. They define access
parameters for database where lock are persisted.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- "jbosscache-cl-cache.jdbc.table.create" - whether to create it or
not. Usually "true";
- </para>
+ <para>
+ First few properties are the same as in the previous
components, but here you can see some strange "jbosscache-cl-cache.jdbc.*"
properties. They define access parameters for database where lock are persisted.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ "jbosscache-cl-cache.jdbc.table.create"
- whether to create it or not. Usually "true";
+ </para>
- </listitem>
- <listitem>
- <para>
- "jbosscache-cl-cache.jdbc.table.drop" - whether to drop on a start or
not. Use "false";
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "jbosscache-cl-cache.jdbc.table.drop" -
whether to drop on a start or not. Use "false";
+ </para>
- </listitem>
- <listitem>
- <para>
- "jbosscache-cl-cache.jdbc.table.primarykey" - the name of column with
pk;
- </para>
+ </listitem>
+ <listitem>
+ <para>
+
"jbosscache-cl-cache.jdbc.table.primarykey" - the name of column with pk;
+ </para>
- </listitem>
- <listitem>
- <para>
- "jbosscache-cl-cache.jdbc.fqn.column" - the name of one more column.
If you are not sure how to use, follow the example above (if much interested, please refer
to JBossCache JDBCCacheLoader documentation)
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "jbosscache-cl-cache.jdbc.fqn.column" -
the name of one more column. If you are not sure how to use, follow the example above (if
much interested, please refer to JBossCache JDBCCacheLoader documentation)
+ </para>
- </listitem>
- <listitem>
- <para>
- "jbosscache-cl-cache.jdbc.node.column" - the name of one more column.
If you are not sure how to use, follow the example above (if much interested, please refer
to JBossCache JDBCCacheLoader documentation)
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "jbosscache-cl-cache.jdbc.node.column"
- the name of one more column. If you are not sure how to use, follow the example above
(if much interested, please refer to JBossCache JDBCCacheLoader documentation)
+ </para>
- </listitem>
- <listitem>
- <para>
- "jbosscache-cl-cache.jdbc.parent.column" - name of one more column.
If you are not sure how to use, follow the example above if you are not sure (if much
interested, please refer to JBossCache JDBCCacheLoader documentation)
- </para>
+ </listitem>
+ <listitem>
+ <para>
+
"jbosscache-cl-cache.jdbc.parent.column" - name of one more column. If you are
not sure how to use, follow the example above if you are not sure (if much interested,
please refer to JBossCache JDBCCacheLoader documentation)
+ </para>
- </listitem>
- <listitem>
- <para>
- "jbosscache-cl-cache.jdbc.datasource" - name of configured in
Container datasource, where you want to store locks. The best idea is to use the same as
for workspace.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ "jbosscache-cl-cache.jdbc.datasource" -
name of configured in Container datasource, where you want to store locks. The best idea
is to use the same as for workspace.
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- That's all. JCR is ready for running in a cluster.
- </para>
+ </itemizedlist>
+ <para>
+ That's all. JCR is ready for running in a cluster.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Is JCR suitable for remote sites\* synchronization?</term>
- <listitem>
- <para>
- Remote sites can be visualized as different buildings separated by a WAN network.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>Is JCR suitable for remote sites\*
synchronization?</term>
+ <listitem>
+ <para>
+ Remote sites can be visualized as different buildings separated
by a WAN network.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How to use lucene spellchecker?</term>
- <listitem>
- <para>
- There is few steps:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Enable lucene spellchecker in jcr QueryHandler configuration:
- </para>
-
+ </varlistentry>
+ <varlistentry>
+ <term>How to use lucene spellchecker?</term>
+ <listitem>
+ <para>
+ There is few steps:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Enable lucene spellchecker in jcr QueryHandler
configuration:
+ </para>
+
<programlisting language="XML" role="XML"><query-handler
class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
<properties>
...
@@ -498,58 +498,58 @@
</properties>
</query-handler></programlisting>
- </listitem>
+ </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para>
- Execute query with rep:spellcheck function and word that is checked:
- </para>
-
+ </itemizedlist>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Execute query with rep:spellcheck function and word that
is checked:
+ </para>
+
<programlisting language="Java" role="Java">Query query =
qm.createQuery("select rep:spellcheck() from nt:base where " + "jcr:path =
'/' and spellcheck('word that is checked')", Query.SQL);
RowIterator rows = query.execute().getRows();</programlisting>
- </listitem>
+ </listitem>
- </itemizedlist>
- <itemizedlist>
- <listitem>
- <para>
- Fetch a result:
- </para>
-
+ </itemizedlist>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Fetch a result:
+ </para>
+
<programlisting language="Java" role="Java">Row r =
rows.nextRow();
Value v = r.getValue("rep:spellcheck()");</programlisting>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- If there are no results, that means there is no suggestion, so word is correct or
spellcheckers dictionary do not contain any words like the checked word.
- </para>
+ </itemizedlist>
+ <para>
+ If there are no results, that means there is no suggestion, so
word is correct or spellcheckers dictionary do not contain any words like the checked
word.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How can I affect to spellchecker results?</term>
- <listitem>
- <para>
- There is two parameters in jcr QueryHandler configuration:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Minimal distance between checked word and proposed suggestion;
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>How can I affect to spellchecker results?</term>
+ <listitem>
+ <para>
+ There is two parameters in jcr QueryHandler configuration:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Minimal distance between checked word and proposed
suggestion;
+ </para>
- </listitem>
- <listitem>
- <para>
- Search for more popular suggestions;
- </para>
-
+ </listitem>
+ <listitem>
+ <para>
+ Search for more popular suggestions;
+ </para>
+
<programlisting language="XML" role="XML"><query-handler
class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
<properties>
...
@@ -560,62 +560,62 @@
</properties>
</query-handler></programlisting>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- Minimal distance is counted as Levenshtein distance between checked word and
spellchecker suggestion.
- </para>
- <para>
- MorePopular paramter affects in next way: If "morePopular" disabled:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- If the proposed word exists in the directory - no suggestion given;
- </para>
+ </itemizedlist>
+ <para>
+ Minimal distance is counted as Levenshtein distance between
checked word and spellchecker suggestion.
+ </para>
+ <para>
+ MorePopular parameter affects in next way: If
"morePopular" disabled:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ If the proposed word exists in the directory - no
suggestion given;
+ </para>
- </listitem>
- <listitem>
- <para>
- If the proposed word doesn't exist in the directory - propose the closed
word;
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ If the proposed word doesn't exist in the directory -
propose the closed word;
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- If "morePopular" enabled:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- No matter word exists or not, checker will propose the closed word that is more
popular than the checked word.
- </para>
+ </itemizedlist>
+ <para>
+ If "morePopular" enabled:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ No matter word exists or not, checker will propose the
closed word that is more popular than the checked word.
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term></term>
- <listitem>
- <para>
+ </varlistentry>
+ <varlistentry>
+ <term></term>
+ <listitem>
+ <para>
- </para>
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
+ </varlistentry>
- </variablelist>
+ </variablelist>
- </section>
-
- <!-- DOC NOTE: Commented as extensions seem out of scope
+ </section>
+
+ <!-- DOC NOTE: Commented as extensions seem out of scope
<section id="sect-Reference_Guide-JCR-JCR_extensions">
<title>JCR extensions</title>
@@ -684,35 +684,35 @@
</variablelist>
</section> --> <section
id="sect-Reference_Guide-JCR_FAQ-WebDAV">
- <title>WebDAV</title>
- <variablelist>
- <title></title>
- <varlistentry>
- <term>I uploaded a file to WebDAV server using Mac OS Finder, but the file size
is '0', what is wrong?</term>
- <listitem>
- <para>
- This is known as a finder bug started from Mac OS v.10.5.3 and not yet fixed, .
- </para>
- <para>
- For more details follow:&nbsp; <ulink
url="http://discussions.apple.com/thread.jspa?threadID=1538882&a...
Discussion thread.</ulink>
- </para>
+ <title>WebDAV</title>
+ <variablelist>
+ <title></title>
+ <varlistentry>
+ <term>I uploaded a file to WebDAV server using Mac OS Finder, but
the file size is '0', what is wrong?</term>
+ <listitem>
+ <para>
+ This is known as a finder bug started from Mac OS v.10.5.3 and
not yet fixed, .
+ </para>
+ <para>
+ For more details follow:&nbsp; <ulink
url="http://discussions.apple.com/thread.jspa?threadID=1538882&a...
Discussion thread.</ulink>
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>Can I manage 'cache-control' value for different media-types from
server configuration?</term>
- <listitem>
- <para>
- Use "cache-control" configuration parameter.
- </para>
- <para>
- The value of this parameter must contain colon-separated pairs
"MediaType:cache-control value"
- </para>
- <para>
- For example, if you need to cache all text/xml and text/plain files for 5 minutes
(300 sec.) and other text/\* files for 10 minutes (600 sec.), use the next configuration:
- </para>
-
+ </varlistentry>
+ <varlistentry>
+ <term>Can I manage 'cache-control' value for different
media-types from server configuration?</term>
+ <listitem>
+ <para>
+ Use "cache-control" configuration parameter.
+ </para>
+ <para>
+ The value of this parameter must contain colon-separated pairs
"MediaType:cache-control value"
+ </para>
+ <para>
+ For example, if you need to cache all text/xml and text/plain
files for 5 minutes (300 sec.) and other text/\* files for 10 minutes (600 sec.), use the
next configuration:
+ </para>
+
<programlisting language="XML"
role="XML"><component>
<type>org.exoplatform.services.jcr.webdav.WebDavServiceImpl</type>
<init-params>
@@ -724,84 +724,84 @@
<component>
</programlisting>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How to perform WebDAV requests using curl?</term>
- <listitem>
- <para>
- Simple Requests
- </para>
- <para>
- For simple request such as: GET, HEAD, MKCOL, COPY, MOVE, DELETE, CHECKIN,
CHECKOUT, UNCHECKOUT, LOCK, UNLOCK, VERSIONCONTROL, OPTIONS
- </para>
- <para>
- perform:
- </para>
-
+ </varlistentry>
+ <varlistentry>
+ <term>How to perform WebDAV requests using curl?</term>
+ <listitem>
+ <para>
+ Simple Requests
+ </para>
+ <para>
+ For simple request such as: GET, HEAD, MKCOL, COPY, MOVE, DELETE,
CHECKIN, CHECKOUT, UNCHECKOUT, LOCK, UNLOCK, VERSIONCONTROL, OPTIONS
+ </para>
+ <para>
+ perform:
+ </para>
+
<programlisting>curl -i -u 'user:pass' -X 'METHOD_NAME'
'resource_url'</programlisting>
- <para>
- for example to create a folder named test perform:
- </para>
-
+ <para>
+ for example to create a folder named test perform:
+ </para>
+
<programlisting>curl -i -u 'root:exo' -X MKCOL
'http://localhost:8080/rest/jcr/repository/production/test</programlisting>
- <para>
- to PUT a test.txt file from your current folder to "test "folder on
server perform:
- </para>
-
+ <para>
+ to PUT a test.txt file from your current folder to "test
"folder on server perform:
+ </para>
+
<programlisting>curl -i -u 'root:exo' -X PUT
'http://localhost:8080/rest/jcr/repository/production/test/test.txt' -d
@test.txt</programlisting>
- <para>
- Requests with XML body
- </para>
- <para>
- For requests which contains xml body such as: ORDER, PROPFIND, PROPPATCH, REPORT,
SEARCH
- </para>
- <para>
- add <emphasis role="bold">-d 'xml_body
text'</emphasis> or <emphasis role="bold">-d
@body.xml</emphasis>
- </para>
- <para>
- (body.xml must contain a valid xml request body.) to you curl-command:
- </para>
-
+ <para>
+ Requests with XML body
+ </para>
+ <para>
+ For requests which contains xml body such as: ORDER, PROPFIND,
PROPPATCH, REPORT, SEARCH
+ </para>
+ <para>
+ add <emphasis role="bold">-d 'xml_body
text'</emphasis> or <emphasis role="bold">-d
@body.xml</emphasis>
+ </para>
+ <para>
+ (body.xml must contain a valid xml request body.) to you
curl-command:
+ </para>
+
<programlisting>curl -i -u 'user:pass' -X 'METHOD_NAME' -H
'Headers' 'resource_url' -d 'xml_body
text'</programlisting>
- <para>
- For example about finding all files containing "test" perform:
- </para>
-
+ <para>
+ For example about finding all files containing "test"
perform:
+ </para>
+
<programlisting>curl -i -u "root:exo" -X "SEARCH"
"http://192.168.0.7:8080/rest/jcr/repository/production/" -d
"<?xml version='1.0' encoding='UTF-8' ?>
<D:searchrequest xmlns:D='DAV:'>
<D:sql>SELECT * FROM nt:base WHERE contains(*,
'text')</D:sql>
</D:searchrequest>"</programlisting>
- <para>
- If you need to add some headers to your request, use \-H key.
- </para>
- <para>
- To have more information about methods parameters, you can find in <ulink
url="http://www.ietf.org/rfc/rfc2518.txt">HTTP Extensions for Distributed
Authoring</ulink> specification.
- </para>
+ <para>
+ If you need to add some headers to your request, use \-H key.
+ </para>
+ <para>
+ To have more information about methods parameters, you can find
in <ulink
url="http://www.ietf.org/rfc/rfc2518.txt">HTTP Extensions for
Distributed Authoring</ulink> specification.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term>How eXo JCR WebDAV server treats content encoding?</term>
- <listitem>
- <para>
- OS client (Windows, Linux etc) doesn't set an encoding in a request. But eXo
JCR WebDAV server looks for an encoding in a Content-Type header and set it to
jcr:encoding. See <ulink
url="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html,"&g...
14.17 Content-Type. e.g. Content-Type: text/html; charset=ISO-8859-4 So, if a client will
set Content-Type header, e.g. JS code from a page, it will works for a text file as
expected.
- </para>
- <para>
- If WebDAV request doesn't contain a content encoding, it's possible to
write a dedicated action in a customer application. The action will set jcr:encoding using
its own logic, e.g. based on IP or user preferences.
- </para>
+ </varlistentry>
+ <varlistentry>
+ <term>How eXo JCR WebDAV server treats content
encoding?</term>
+ <listitem>
+ <para>
+ OS client (Windows, Linux etc) doesn't set an encoding in a
request. But eXo JCR WebDAV server looks for an encoding in a Content-Type header and set
it to jcr:encoding. See <ulink
url="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html,"&g...
14.17 Content-Type. e.g. Content-Type: text/html; charset=ISO-8859-4 So, if a client will
set Content-Type header, e.g. JS code from a page, it will works for a text file as
expected.
+ </para>
+ <para>
+ If WebDAV request doesn't contain a content encoding,
it's possible to write a dedicated action in a customer application. The action will
set jcr:encoding using its own logic, e.g. based on IP or user preferences.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
+ </varlistentry>
- </variablelist>
+ </variablelist>
- </section>
-
+ </section>
+
</section>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/backup/backup-client.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/backup/backup-client.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/backup/backup-client.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -15,7 +15,7 @@
<note>
<title>URI Context</title>
<para>
- JBoss Enterprise Portal Platform uses context <uri>/portal/rest</uri>,
therefore you need to use
<uri>http://<replaceable>host</replaceable>:<replaceable>port</replaceable>/portal/rest/</uri>
instread of
<uri>http://<replaceable>host</replaceable>:<replaceable>port</replaceable>/rest/</uri>
+ JBoss Enterprise Portal Platform uses context <uri>/portal/rest</uri>,
therefore you need to use
<uri>http://<replaceable>host</replaceable>:<replaceable>port</replaceable>/portal/rest/</uri>
instead of
<uri>http://<replaceable>host</replaceable>:<replaceable>port</replaceable>/rest/</uri>
</para>
<para>
JBoss Enterprise Portal Platform uses form authentication, so first you need to login
(<uri>http://<replaceable>host</replaceable>:<replaceable>port</replaceable>/portal/login</uri>)
and then perform requests.
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/backup/exojcr-backup-service.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/backup/exojcr-backup-service.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/backup/exojcr-backup-service.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -720,7 +720,7 @@
BackupScheduler scheduler = backup.getScheduler();
// schedule backup using a ready configuration (Full + Incrementals) to run from
startTime
-// to stopTime. Full backuop will be performed every 24 hours (BackupChain lifecycle),
+// to stopTime. Full backuop will be performed every 24 hours (BackupChain life-cycle),
// incremental will rotate result files every 3 hours.
scheduler.schedule(config, startTime, stopTime, 3600 * 24, 3600 * 3);
@@ -755,7 +755,7 @@
<section
id="sect-Reference_Guide-eXo_JCR_Backup_Service-Restore_existing_workspace_or_repository">
<title>Restore existing workspace or repository</title>
<para>
- The resore of existing workspace or repository is available.
+ The restore of existing workspace or repository is available.
</para>
<para>
For restore will be used special methods:
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/configuration/jdbc-data-container-config.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/configuration/jdbc-data-container-config.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/configuration/jdbc-data-container-config.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -4,107 +4,107 @@
%BOOK_ENTITIES;
]>
<chapter id="chap-Reference_Guide-JDBC_Data_Container_Config">
- <title>JDBC Data Container Config</title>
- <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Introduction">
- <title>Introduction</title>
- <para>
- eXo JCR persistent data container can work in two configuration modes:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <phrase>Multi-database</phrase>: One database for each workspace (used
in standalone eXo JCR service mode)
- </para>
+ <title>JDBC Data Container Config</title>
+ <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Introduction">
+ <title>Introduction</title>
+ <para>
+ eXo JCR persistent data container can work in two configuration modes:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <phrase>Multi-database</phrase>: One database for each
workspace (used in standalone eXo JCR service mode)
+ </para>
- </listitem>
- <listitem>
- <para>
- <phrase>Single-database</phrase>: All workspaces persisted in one
database (used in embedded eXo JCR service mode, e.g. in eXo portal)
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <phrase>Single-database</phrase>: All workspaces
persisted in one database (used in embedded eXo JCR service mode, e.g. in eXo portal)
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <para>
- The data container uses the JDBC driver to communicate with the actual database
software, i.e. any JDBC-enabled data storage can be used with eXo JCR implementation.
- </para>
- <para>
- Currently the data container is tested with the following RDBMS:
- </para>
- <!-- Source Metadata
+ </itemizedlist>
+ <para>
+ The data container uses the JDBC driver to communicate with the actual
database software, i.e. any JDBC-enabled data storage can be used with eXo JCR
implementation.
+ </para>
+ <para>
+ Currently the data container is tested with the following RDBMS:
+ </para>
+ <!-- Source Metadata
URL: NA (email from Nicholas Filetto to jbossexoD(a)googlegroups.com on 10/18/2011
Author [w/email]: Nicholas Filetto: nicolas.filotto(a)exoplatform.com
License: NA
--> <itemizedlist>
- <listitem>
- <para>
- MySQL 5.0.81 Driver: MySQL Connector/J 5.0.8
- </para>
+ <listitem>
+ <para>
+ MySQL 5.0.81 Driver: MySQL Connector/J 5.0.8
+ </para>
- </listitem>
- <listitem>
- <para>
- MySQL 5.1.36 Driver: MYSQL Connector/J 5.1.14
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ MySQL 5.1.36 Driver: MYSQL Connector/J 5.1.14
+ </para>
- </listitem>
- <listitem>
- <para>
- Oracle DB 10g R2 (10.2.0.4) Driver: Oracle 10g R2 (10.2.0.4)
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Oracle DB 10g R2 (10.2.0.4) Driver: Oracle 10g R2 (10.2.0.4)
+ </para>
- </listitem>
- <listitem>
- <para>
- Oracle DB 11g R1 (11.1.0.6.0) Driver: Oracle 11g R1 (11.2.0.1.0)
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Oracle DB 11g R1 (11.1.0.6.0) Driver: Oracle 11g R1 (11.2.0.1.0)
+ </para>
- </listitem>
- <listitem>
- <para>
- Oracle DB 11g R2 (11.2.0.1.0) Driver: Oracle JDBC Driver v11.2.0.1.0
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Oracle DB 11g R2 (11.2.0.1.0) Driver: Oracle JDBC Driver v11.2.0.1.0
+ </para>
- </listitem>
- <listitem>
- <para>
- MS SQL Server 2005 SP1 Driver: JDBC Driver 3.0
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ MS SQL Server 2005 SP1 Driver: JDBC Driver 3.0
+ </para>
- </listitem>
- <listitem>
- <para>
- MS SQL Server 2008 Driver: JDBC Driver 3.0
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ MS SQL Server 2008 Driver: JDBC Driver 3.0
+ </para>
- </listitem>
- <listitem>
- <para>
- PostgresSQL 8.2.4 Driver: JDBC3 Driver, Version 8.2-507
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ PostgresSQL 8.2.4 Driver: JDBC3 Driver, Version 8.2-507
+ </para>
- </listitem>
- <listitem>
- <para>
- PostgresSQL 8.3.7 Driver: JDBC3 Driver, Version 8.3-606
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ PostgresSQL 8.3.7 Driver: JDBC3 Driver, Version 8.3-606
+ </para>
- </listitem>
- <listitem>
- <para>
- IBM DB2 9.7.4 Driver: IBM Data Server Driver for JDBC and SQLJ V9.7
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ IBM DB2 9.7.4 Driver: IBM Data Server Driver for JDBC and SQLJ V9.7
+ </para>
- </listitem>
- <listitem>
- <para>
- Sybase 15.0.3 ASE Driver: Sybase jConnect JDBC driver v6.05
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ Sybase 15.0.3 ASE Driver: Sybase jConnect JDBC driver v6.05
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
- <!-- <itemizedlist>
+ </itemizedlist>
+ <!-- <itemizedlist>
<listitem>
<para>
MySQL 5.1 MYSQL Connector/J 5.1.8
@@ -149,439 +149,439 @@
</listitem>
</itemizedlist> --> <note>
- <title>Isolation Levels</title>
- <para>
- The JCR requires at least the <parameter>READ_COMMITED</parameter>
isolation level and other RDBMS configurations can cause some side-effects and issues. So,
please, make sure proper isolation level is configured on database server side.
- </para>
+ <title>Isolation Levels</title>
+ <para>
+ The JCR requires at least the
<parameter>READ_COMMITED</parameter> isolation level and other RDBMS
configurations can cause some side-effects and issues. So, please, make sure proper
isolation level is configured on database server side.
+ </para>
- </note>
- <note>
- <para>
- One more mandatory JCR requirement for underlying databases is a case sensitive
collation. Microsoft SQL Server both 2005 and 2008 customers must configure their server
with collation corresponding to personal needs and requirements, but obligatorily case
sensitive. For more information please refer to Microsoft SQL Server documentation page
"Selecting a SQL Server Collation" <ulink
url="http://msdn.microsoft.com/en-us/library/ms144250.aspx">...
- </para>
+ </note>
+ <note>
+ <para>
+ One more mandatory JCR requirement for underlying databases is a case
sensitive collation. Microsoft SQL Server both 2005 and 2008 customers must configure
their server with collation corresponding to personal needs and requirements, but
obligatorily case sensitive. For more information please refer to Microsoft SQL Server
documentation page "Selecting a SQL Server Collation" <ulink
url="http://msdn.microsoft.com/en-us/library/ms144250.aspx">...
+ </para>
- </note>
- <note>
- <para>
- Be aware that JCR does not support MyISAM storage engine for the MySQL relational
database management system.
- </para>
+ </note>
+ <note>
+ <para>
+ Be aware that JCR does not support MyISAM storage engine for the MySQL
relational database management system.
+ </para>
- </note>
- <para>
- Each database software supports ANSI SQL standards but also has its own specifics.
Therefore each database has its own configuration setting in the eXo JCR as a database
dialect parameter. More detailed configuration of the database can be set by editing the
metadata SQL-script files.
- </para>
- <para>
- You can find SQL-scripts in <filename>conf/storage/</filename> directory
of the
<filename><replaceable><JBOSS_HOME></replaceable>jboss-as/server/<replaceable><PROFILE></replaceable>/deploy/gatein.ear/lib/exo.jcr.component.core-XXX.XXX.jar</filename>
file .
- </para>
- <para>
- The following tables show the correspondence between the scripts and databases:
- </para>
- <table id="tabl-Reference_Guide-Introduction-Single_database">
- <title>Single-database</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Database
- </entry>
- <entry>
- Script
- </entry>
+ </note>
+ <para>
+ Each database software supports ANSI SQL standards but also has its own
specifics. Therefore each database has its own configuration setting in the eXo JCR as a
database dialect parameter. More detailed configuration of the database can be set by
editing the metadata SQL-script files.
+ </para>
+ <para>
+ You can find SQL-scripts in <filename>conf/storage/</filename>
directory of the
<filename><replaceable><JBOSS_HOME></replaceable>jboss-as/server/<replaceable><PROFILE></replaceable>/deploy/gatein.ear/lib/exo.jcr.component.core-XXX.XXX.jar</filename>
file .
+ </para>
+ <para>
+ The following tables show the correspondence between the scripts and
databases:
+ </para>
+ <table id="tabl-Reference_Guide-Introduction-Single_database">
+ <title>Single-database</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>
+ Database
+ </entry>
+ <entry>
+ Script
+ </entry>
- </row>
+ </row>
- </thead>
- <tbody>
- <row>
- <entry>
- MySQL DB
- </entry>
- <entry>
- <filename>jcr-sjdbc.mysql.sql</filename>
- </entry>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ MySQL DB
+ </entry>
+ <entry>
+ <filename>jcr-sjdbc.mysql.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- MySQL DB with utf-8
- </entry>
- <entry>
- <filename>jcr-sjdbc.mysql-utf8.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ MySQL DB with utf-8
+ </entry>
+ <entry>
+ <filename>jcr-sjdbc.mysql-utf8.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- PostgresSQL
- </entry>
- <entry>
- <filename>jcr-sjdbc.pqsql.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ PostgresSQL
+ </entry>
+ <entry>
+ <filename>jcr-sjdbc.pqsql.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- Oracle DB
- </entry>
- <entry>
- <filename>jcr-sjdbc.ora.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ Oracle DB
+ </entry>
+ <entry>
+ <filename>jcr-sjdbc.ora.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- DB2 9.7
- </entry>
- <entry>
- <filename>jcr-sjdbc.db2.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ DB2 9.7
+ </entry>
+ <entry>
+ <filename>jcr-sjdbc.db2.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- MS SQL Server
- </entry>
- <entry>
- <filename>jcr-sjdbc.mssql.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ MS SQL Server
+ </entry>
+ <entry>
+ <filename>jcr-sjdbc.mssql.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- Sybase
- </entry>
- <entry>
- <filename>jcr-sjdbc.sybase.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ Sybase
+ </entry>
+ <entry>
+ <filename>jcr-sjdbc.sybase.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- HSQLDB
- </entry>
- <entry>
- <filename>jcr-sjdbc.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ HSQLDB
+ </entry>
+ <entry>
+ <filename>jcr-sjdbc.sql</filename>
+ </entry>
- </row>
+ </row>
- </tbody>
+ </tbody>
- </tgroup>
+ </tgroup>
- </table>
- <table id="tabl-Reference_Guide-Introduction-Multi_database">
- <title>Multi-database</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Database
- </entry>
- <entry>
- Script
- </entry>
+ </table>
+ <table id="tabl-Reference_Guide-Introduction-Multi_database">
+ <title>Multi-database</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>
+ Database
+ </entry>
+ <entry>
+ Script
+ </entry>
- </row>
+ </row>
- </thead>
- <tbody>
- <row>
- <entry>
- MySQL DB
- </entry>
- <entry>
- <filename>jcr-mjdbc.mysql.sql</filename>
- </entry>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ MySQL DB
+ </entry>
+ <entry>
+ <filename>jcr-mjdbc.mysql.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- MySQL DB with utf-8
- </entry>
- <entry>
- <filename>jcr-mjdbc.mysql-utf8.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ MySQL DB with utf-8
+ </entry>
+ <entry>
+ <filename>jcr-mjdbc.mysql-utf8.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- PostgresSQL
- </entry>
- <entry>
- <filename>jcr-mjdbc.pqsql.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ PostgresSQL
+ </entry>
+ <entry>
+ <filename>jcr-mjdbc.pqsql.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- Oracle DB
- </entry>
- <entry>
- <filename>jcr-mjdbc.ora.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ Oracle DB
+ </entry>
+ <entry>
+ <filename>jcr-mjdbc.ora.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- DB2 9.7
- </entry>
- <entry>
- <filename>jcr-mjdbc.db2.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ DB2 9.7
+ </entry>
+ <entry>
+ <filename>jcr-mjdbc.db2.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- MS SQL Server
- </entry>
- <entry>
- <filename>jcr-mjdbc.mssql.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ MS SQL Server
+ </entry>
+ <entry>
+ <filename>jcr-mjdbc.mssql.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- Sybase
- </entry>
- <entry>
- <filename>jcr-mjdbc.sybase.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ Sybase
+ </entry>
+ <entry>
+ <filename>jcr-mjdbc.sybase.sql</filename>
+ </entry>
- </row>
- <row>
- <entry>
- HSQLDB
- </entry>
- <entry>
- <filename>jcr-mjdbc.sql</filename>
- </entry>
+ </row>
+ <row>
+ <entry>
+ HSQLDB
+ </entry>
+ <entry>
+ <filename>jcr-mjdbc.sql</filename>
+ </entry>
- </row>
+ </row>
- </tbody>
+ </tbody>
- </tgroup>
+ </tgroup>
- </table>
- <para>
- If a non-ANSI node name is used, you must use a database with MultiLanguage support.
Some JDBC drivers need additional parameters for establishing a Unicode friendly
connection. For example under mysql it is necessary to add an additional parameter for the
JDBC driver at the end of JDBC URL:
- </para>
- <para>
- There are preconfigured configuration files for HSQLDB. Look for these files in
/conf/portal and /conf/standalone folders of the jar-file
<package>exo.jcr.component.core-XXX.XXX.jar</package> or source-distribution
of eXo JCR implementation.
- </para>
- <example id="exam-Reference_Guide-Introduction-Example_Parameter">
- <title>Example Parameter</title>
-
+ </table>
+ <para>
+ If a non-ANSI node name is used, you must use a database with MultiLanguage
support. Some JDBC drivers need additional parameters for establishing a Unicode friendly
connection. For example under mysql it is necessary to add an additional parameter for the
JDBC driver at the end of JDBC URL:
+ </para>
+ <para>
+ There are preconfigured configuration files for HSQLDB. Look for these files
in /conf/portal and /conf/standalone folders of the jar-file
<package>exo.jcr.component.core-XXX.XXX.jar</package> or source-distribution
of eXo JCR implementation.
+ </para>
+ <example
id="exam-Reference_Guide-Introduction-Example_Parameter">
+ <title>Example Parameter</title>
+
<
programlisting><code>jdbc:mysql://exoua.dnsalias.net/portal?char...
- </example>
- <para>
- The configuration files are located in service jars
<filename>/conf/portal/configuration.xml</filename> (eXo services including
JCR Repository Service) and <filename>exo-jcr-config.xml</filename>
(repositories configuration) by default. In JBoss Enterprise Portal Platform, the JCR is
configured in portal web application
<filename>portal/WEB-INF/conf/jcr/jcr-configuration.xml</filename> (JCR
Repository Service and related services) and
<filename>repository-configuration.xml</filename> (repositories
configuration).
- </para>
- <para>
- Read more about <xref linkend="chap-Reference_Guide-JCR_configuration"
/>.
- </para>
+ </example>
+ <para>
+ The configuration files are located in service jars
<filename>/conf/portal/configuration.xml</filename> (eXo services including
JCR Repository Service) and <filename>exo-jcr-config.xml</filename>
(repositories configuration) by default. In JBoss Enterprise Portal Platform, the JCR is
configured in portal web application
<filename>portal/WEB-INF/conf/jcr/jcr-configuration.xml</filename> (JCR
Repository Service and related services) and
<filename>repository-configuration.xml</filename> (repositories
configuration).
+ </para>
+ <para>
+ Read more about <xref
linkend="chap-Reference_Guide-JCR_configuration" />.
+ </para>
- </section>
-
- <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Multi_database_Configuration">
- <title>Multi-database Configuration</title>
- <para>
- You need to configure each workspace in a repository as part of multi-database
configuration. Databases may reside on remote servers as required.
- </para>
- <procedure>
- <title></title>
- <step>
- <para>
- Configure the data containers in the
<literal>org.exoplatform.services.naming.InitialContextInitializer</literal>
service. It's the JNDI context initializer which registers (binds) naming resources
(DataSources) for data containers.
- </para>
- <para>
- For example (two data containers <parameter>jdbcjcr</parameter> - local
HSQLDB, <parameter>jdbcjcr1</parameter> - remote MySQL):
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Multi_database_Configuration">
+ <title>Multi-database Configuration</title>
+ <para>
+ You need to configure each workspace in a repository as part of
multi-database configuration. Databases may reside on remote servers as required.
+ </para>
+ <procedure>
+ <title></title>
+ <step>
+ <para>
+ Configure the data containers in the
<literal>org.exoplatform.services.naming.InitialContextInitializer</literal>
service. It's the JNDI context initializer which registers (binds) naming resources
(DataSources) for data containers.
+ </para>
+ <para>
+ For example (two data containers
<parameter>jdbcjcr</parameter> - local HSQLDB,
<parameter>jdbcjcr1</parameter> - remote MySQL):
+ </para>
+
<programlisting language="XML" role="XML">
<xi:include
href="../../../../extras/Advanced_Development_JCR_Configuration/example-1.xml"
parse="text"
xmlns:xi="http://www.w3.org/2001/XInclude"
/></programlisting>
- <substeps>
- <step>
- <para>
- Configure the database connection parameters:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <parameter>driverliteral</parameter>, e.g.
"org.hsqldb.jdbcDriver", "com.mysql.jdbc.Driver",
"org.postgresql.Driver"
- </para>
+ <substeps>
+ <step>
+ <para>
+ Configure the database connection parameters:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <parameter>driverliteral</parameter>,
e.g. "org.hsqldb.jdbcDriver", "com.mysql.jdbc.Driver",
"org.postgresql.Driver"
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>url</parameter>, e.g.
"jdbc:hsqldb:file:target/temp/data/portal",
"jdbc:mysql://exoua.dnsalias.net/jcr"
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>url</parameter>, e.g.
"jdbc:hsqldb:file:target/temp/data/portal",
"jdbc:mysql://exoua.dnsalias.net/jcr"
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>username</parameter>, e.g. "sa",
"exoadmin"
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>username</parameter>, e.g.
"sa", "exoadmin"
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>password</parameter>, e.g. "",
"exo12321"
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>password</parameter>, e.g.
"", "exo12321"
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </step>
+ </step>
- </substeps>
- <para>
- There can be connection pool configuration parameters
(org.apache.commons.dbcp.BasicDataSourceFactory):
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <parameter>maxActive</parameter>, e.g. 50
- </para>
+ </substeps>
+ <para>
+ There can be connection pool configuration parameters
(org.apache.commons.dbcp.BasicDataSourceFactory):
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <parameter>maxActive</parameter>, e.g. 50
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>maxIdle</parameter>, e.g. 5
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>maxIdle</parameter>, e.g. 5
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>initialSize</parameter>, e.g. 5
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>initialSize</parameter>, e.g. 5
+ </para>
- </listitem>
- <listitem>
- <para>
- and other according to <ulink
url="http://jakarta.apache.org/commons/dbcp/configuration.html"... DBCP
configuration</ulink>
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ and other according to <ulink
url="http://jakarta.apache.org/commons/dbcp/configuration.html"... DBCP
configuration</ulink>
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </step>
- <step>
- <para>
- Configure the repository service. Each workspace will be configured for its own data
container.
- </para>
- <para>
- For example (two workspaces <parameter>ws</parameter> - jdbcjcr,
<parameter>ws1</parameter> - jdbcjcr1):
- </para>
-
+ </step>
+ <step>
+ <para>
+ Configure the repository service. Each workspace will be configured
for its own data container.
+ </para>
+ <para>
+ For example (two workspaces <parameter>ws</parameter> -
jdbcjcr, <parameter>ws1</parameter> - jdbcjcr1):
+ </para>
+
<programlisting language="XML" role="XML">
<xi:include
href="../../../../extras/Advanced_Development_JCR_Configuration/example-2.xml"
parse="text"
xmlns:xi="http://www.w3.org/2001/XInclude"
/></programlisting>
- <itemizedlist>
- <listitem>
- <para>
- <parameter>source-name</parameter>: A javax.sql.DataSource name
configured in InitialContextInitializer component (was
<parameter>sourceName</parameter> prior JCR 1.9);
- </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <parameter>source-name</parameter>: A
javax.sql.DataSource name configured in InitialContextInitializer component (was
<parameter>sourceName</parameter> prior JCR 1.9);
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>dialect</parameter>: A database dialect, one of
<literal>hsqldb</literal>, <literal>mysql</literal>,
<literal>mysql-utf8</literal>, <literal>pgsql</literal>,
<literal>oracle</literal>, <literal>oracle-oci</literal>,
<literal>mssql</literal>, <literal>sybase</literal>,
<literal>derby</literal>, <literal>db2</literal>,
<literal>db2v8</literal> or <literal>auto</literal> for dialect
autodetection;
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>dialect</parameter>: A database
dialect, one of <literal>hsqldb</literal>,
<literal>mysql</literal>, <literal>mysql-utf8</literal>,
<literal>pgsql</literal>, <literal>oracle</literal>,
<literal>oracle-oci</literal>, <literal>mssql</literal>,
<literal>sybase</literal>, <literal>derby</literal>,
<literal>db2</literal>, <literal>db2v8</literal> or
<literal>auto</literal> for dialect autodetection;
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>multi-db</parameter>: Enable multi-database container with
this parameter (set value "true");
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>multi-db</parameter>: Enable
multi-database container with this parameter (set value "true");
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>max-buffer-size: A</parameter> a threshold (in bytes) after
which a <literal>javax.jcr.Value</literal> content will be swapped to a file
in a temporary storage. A swap for pending changes, for example.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>max-buffer-size: A</parameter> a
threshold (in bytes) after which a <literal>javax.jcr.Value</literal> content
will be swapped to a file in a temporary storage. A swap for pending changes, for
example.
+ </para>
- </listitem>
- <listitem>
- <para>
- <parameter>swap-directory</parameter>: A path in the file system used
to swap the pending changes.
- </para>
+ </listitem>
+ <listitem>
+ <para>
+ <parameter>swap-directory</parameter>: A path in
the file system used to swap the pending changes.
+ </para>
- </listitem>
+ </listitem>
- </itemizedlist>
+ </itemizedlist>
- </step>
+ </step>
- </procedure>
-
- <para>
- This procedure configures two workspace which will be persistent in two different
databases (<emphasis>ws</emphasis> in HSQLDB and
<emphasis>ws1</emphasis> in MySQL).
- </para>
+ </procedure>
+
+ <para>
+ This procedure configures two workspace which will be persistent in two
different databases (<emphasis>ws</emphasis> in HSQLDB and
<emphasis>ws1</emphasis> in MySQL).
+ </para>
- </section>
-
- <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Single_database_Configuration">
- <title>Single-database Configuration</title>
- <para>
- Configuring a single-database data container is easier than configuring a
multi-database data container as only one naming resource must be configured.
- </para>
- <example
id="exam-Reference_Guide-Single_database_Configuration-jdbcjcr_Data_Container">
- <title><parameter>jdbcjcr</parameter> Data Container</title>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Single_database_Configuration">
+ <title>Single-database Configuration</title>
+ <para>
+ Configuring a single-database data container is easier than configuring a
multi-database data container as only one naming resource must be configured.
+ </para>
+ <example
id="exam-Reference_Guide-Single_database_Configuration-jdbcjcr_Data_Container">
+ <title><parameter>jdbcjcr</parameter> Data
Container</title>
+
<programlisting language="XML" role="XML">
<xi:include
href="../../../../extras/Advanced_Development_JCR_Configuration/example-3.xml"
parse="text"
xmlns:xi="http://www.w3.org/2001/XInclude"
/></programlisting>
- </example>
- <para>
- Configure repository workspaces with this one database. The
<parameter>multi-db</parameter> parameter must be set as
<literal>false</literal>.
- </para>
- <para>
- For example (two workspaces <parameter>ws</parameter> -
<literal>jdbcjcr</literal>, <parameter>ws1</parameter> -
<literal>jdbcjcr</literal>):
- </para>
- <example
id="exam-Reference_Guide-Single_database_Configuration-Example">
- <title>Example</title>
-
+ </example>
+ <para>
+ Configure repository workspaces with this one database. The
<parameter>multi-db</parameter> parameter must be set as
<literal>false</literal>.
+ </para>
+ <para>
+ For example (two workspaces <parameter>ws</parameter> -
<literal>jdbcjcr</literal>, <parameter>ws1</parameter> -
<literal>jdbcjcr</literal>):
+ </para>
+ <example
id="exam-Reference_Guide-Single_database_Configuration-Example">
+ <title>Example</title>
+
<programlisting language="XML" role="XML">
<xi:include
href="../../../../extras/Advanced_Development_JCR_Configuration/example-4.xml"
parse="text"
xmlns:xi="http://www.w3.org/2001/XInclude"
/></programlisting>
- </example>
- <para>
- This configures two persistent workspaces in one database (PostgreSQL).
- </para>
- <section
id="sect-Reference_Guide-Single_database_Configuration-Configuration_without_DataSource">
- <title>Configuration without DataSource</title>
- <para>
- It is possible to configure the repository without binding
<literal>javax.sql.DataSource</literal> in the JNDI service if you have a
dedicated JDBC driver implementation with special features like XA transactions,
statements/connections pooling etc:
- </para>
- <procedure>
- <title></title>
- <step>
- <para>
- Remove the configuration in
<literal>InitialContextInitializer</literal> for your database and configure a
new one directly in the workspace container.
- </para>
+ </example>
+ <para>
+ This configures two persistent workspaces in one database (PostgreSQL).
+ </para>
+ <section
id="sect-Reference_Guide-Single_database_Configuration-Configuration_without_DataSource">
+ <title>Configuration without DataSource</title>
+ <para>
+ It is possible to configure the repository without binding
<literal>javax.sql.DataSource</literal> in the JNDI service if you have a
dedicated JDBC driver implementation with special features like XA transactions,
statements/connections pooling etc:
+ </para>
+ <procedure>
+ <title></title>
+ <step>
+ <para>
+ Remove the configuration in
<literal>InitialContextInitializer</literal> for your database and configure a
new one directly in the workspace container.
+ </para>
- </step>
- <step>
- <para>
- Remove parameter <parameter>source-name</parameter> and add next lines
instead. Describe your values for a JDBC driver, database UR: and username.
- </para>
+ </step>
+ <step>
+ <para>
+ Remove parameter <parameter>source-name</parameter>
and add next lines instead. Describe your values for a JDBC driver, database UR: and
username.
+ </para>
- </step>
+ </step>
- </procedure>
-
- <warning>
- <title>Connection Pooling</title>
- <para>
- Ensure the JDBC driver provides connection pooling. Connection pooling is strongly
recommended for use with the JCR to prevent a database overload.
- </para>
+ </procedure>
+
+ <warning>
+ <title>Connection Pooling</title>
+ <para>
+ Ensure the JDBC driver provides connection pooling. Connection
pooling is strongly recommended for use with the JCR to prevent a database overload.
+ </para>
- </warning>
-
+ </warning>
+
<programlisting language="XML" role="XML"><workspace
name="ws" auto-init-root-nodetype="nt:unstructured">
<container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
<properties>
@@ -592,72 +592,72 @@
<property name="password" value=""/>
......</programlisting>
- </section>
-
- <section
id="sect-Reference_Guide-Single_database_Configuration-Dynamic_Workspace_Creation">
- <title>Dynamic Workspace Creation</title>
- <para>
- Workspaces can be added dynamically during runtime.
- </para>
- <para>
- This can be performed in two steps:
- </para>
- <procedure>
- <title></title>
- <step>
- <para>
- <literal>ManageableRepository.configWorkspace(WorkspaceEntry
wsConfig)</literal>: Register a new configuration in RepositoryContainer and create
a WorkspaceContainer.
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-Single_database_Configuration-Dynamic_Workspace_Creation">
+ <title>Dynamic Workspace Creation</title>
+ <para>
+ Workspaces can be added dynamically during runtime.
+ </para>
+ <para>
+ This can be performed in two steps:
+ </para>
+ <procedure>
+ <title></title>
+ <step>
+ <para>
+
<literal>ManageableRepository.configWorkspace(WorkspaceEntry
wsConfig)</literal>: Register a new configuration in RepositoryContainer and create
a WorkspaceContainer.
+ </para>
- </step>
- <step>
- <para>
- <literal>ManageableRepository.createWorkspace(String
workspaceName)</literal>: Rreation a new workspace.
- </para>
+ </step>
+ <step>
+ <para>
+ <literal>ManageableRepository.createWorkspace(String
workspaceName)</literal>: Creation a new workspace.
+ </para>
- </step>
+ </step>
- </procedure>
-
+ </procedure>
+
- </section>
-
+ </section>
+
- </section>
-
- <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Simple_and_Complex_queries">
- <title>Simple and Complex queries</title>
- <para>
- eXo JCR provides two ways to interact with the database;
- </para>
- <variablelist>
- <title></title>
- <varlistentry>
- <term><literal>JDBCStorageConnection</literal></term>
- <listitem>
- <para>
- Which uses simple queries. Simple queries do not use sub queries, left or right
joins. They are implemented in such a way as to support as many database dialects as
possible.
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Simple_and_Complex_queries">
+ <title>Simple and Complex queries</title>
+ <para>
+ eXo JCR provides two ways to interact with the database;
+ </para>
+ <variablelist>
+ <title></title>
+ <varlistentry>
+
<term><literal>JDBCStorageConnection</literal></term>
+ <listitem>
+ <para>
+ Which uses simple queries. Simple queries do not use sub queries,
left or right joins. They are implemented in such a way as to support as many database
dialects as possible.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
- <varlistentry>
- <term><literal>CQJDBCStorageConection</literal></term>
- <listitem>
- <para>
- Which uses complex queries. Complex queries are optimized to reduce the number of
database calls.
- </para>
+ </varlistentry>
+ <varlistentry>
+
<term><literal>CQJDBCStorageConection</literal></term>
+ <listitem>
+ <para>
+ Which uses complex queries. Complex queries are optimized to
reduce the number of database calls.
+ </para>
- </listitem>
+ </listitem>
- </varlistentry>
+ </varlistentry>
- </variablelist>
- <para>
- Simple queries will be used if you chose
<literal>org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer</literal>:
- </para>
-
+ </variablelist>
+ <para>
+ Simple queries will be used if you chose
<literal>org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer</literal>:
+ </para>
+
<programlisting language="XML"
role="XML"><workspaces>
<workspace name="ws"
auto-init-root-nodetype="nt:unstructured">
<container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
@@ -665,10 +665,10 @@
</workspace>
</worksapces>
</programlisting>
- <para>
- Complex queries will be used if you chose
<literal>org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer</literal>:
- </para>
-
+ <para>
+ Complex queries will be used if you chose
<literal>org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer</literal>:
+ </para>
+
<programlisting language="XML"
role="XML"><workspaces>
<workspace name="ws"
auto-init-root-nodetype="nt:unstructured">
<container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
@@ -676,73 +676,73 @@
</workspace>
</worksapces></programlisting>
- </section>
-
- <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Force_Query_Hints">
- <title>Force Query Hints</title>
- <para>
- Some databases, such as Oracle and MySQL, support hints to increase query performance.
The eXo JCR has separate Complex Query implementations for the Orcale database dialect,
which uses query hints to increase performance for few important queries.
- </para>
- <para>
- To enable this option, use the following configuration property:
- </para>
-
+ </section>
+
+ <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Force_Query_Hints">
+ <title>Force Query Hints</title>
+ <para>
+ Some databases, such as Oracle and MySQL, support hints to increase query
performance. The eXo JCR has separate Complex Query implementations for the Orcale
database dialect, which uses query hints to increase performance for few important
queries.
+ </para>
+ <para>
+ To enable this option, use the following configuration property:
+ </para>
+
<programlisting language="XML" role="XML"><workspace
name="ws" auto-init-root-nodetype="nt:unstructured">
<container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
<properties>
<property name="dialect" value="oracle"/>
<property name="force.query.hints" value="true"
/>
......</programlisting>
- <para>
- Query hints are only used for Complex Queries with the Oracle dialect. For all other
dialects this parameter is ignored.
- </para>
+ <para>
+ Query hints are only used for Complex Queries with the Oracle dialect. For
all other dialects this parameter is ignored.
+ </para>
- </section>
-
- <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Notes_for_Microsoft_Windows_users">
- <title>Notes for Microsoft Windows users</title>
- <para>
- The current configuration of eXo JCR uses <ulink
url="http://commons.apache.org/dbcp/">Apache DBCP</ulink> connection
pool (<literal>org.apache.commons.dbcp.BasicDataSourceFactory</literal>).
- </para>
- <para>
- It is possible to set a high value for the
<parameter>maxActive</parameter> parameter in the
<filename>configuration.xml</filename> file. This creates a high use of TCP/IP
ports from a client machine inside the pool (the JDBC driver, for example). As a result,
the data container can throw exceptions like "<emphasis>Address already in
use</emphasis>".
- </para>
- <para>
- To solve this problem, you must configure the client's machine networking software
to use shorter timeouts for open TCP/IP ports.
- </para>
- <para>
- This is done by editing two registry keys within the
<parameter>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters</parameter>
node. Both of these keys are unset by default. To set the keys as required:
- </para>
- <procedure>
- <title></title>
- <step>
- <para>
- Set the <parameter>MaxUserPort</parameter> registry key to
<parameter>=dword:00001b58</parameter>. This sets the maximum of open ports to
7000 or higher (the default is 5000).
- </para>
+ </section>
+
+ <section
id="sect-Reference_Guide-JDBC_Data_Container_Config-Notes_for_Microsoft_Windows_users">
+ <title>Notes for Microsoft Windows users</title>
+ <para>
+ The current configuration of eXo JCR uses <ulink
url="http://commons.apache.org/dbcp/">Apache DBCP</ulink> connection
pool (<literal>org.apache.commons.dbcp.BasicDataSourceFactory</literal>).
+ </para>
+ <para>
+ It is possible to set a high value for the
<parameter>maxActive</parameter> parameter in the
<filename>configuration.xml</filename> file. This creates a high use of TCP/IP
ports from a client machine inside the pool (the JDBC driver, for example). As a result,
the data container can throw exceptions like "<emphasis>Address already in
use</emphasis>".
+ </para>
+ <para>
+ To solve this problem, you must configure the client's machine networking
software to use shorter timeouts for open TCP/IP ports.
+ </para>
+ <para>
+ This is done by editing two registry keys within the
<parameter>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters</parameter>
node. Both of these keys are unset by default. To set the keys as required:
+ </para>
+ <procedure>
+ <title></title>
+ <step>
+ <para>
+ Set the <parameter>MaxUserPort</parameter> registry key
to <parameter>=dword:00001b58</parameter>. This sets the maximum of open ports
to 7000 or higher (the default is 5000).
+ </para>
- </step>
- <step>
- <para>
- Set <parameter>TcpTimedWaitDelay</parameter> to
<parameter>=dword:0000001e</parameter>. This sets
<parameter>TIME_WAIT</parameter> parameter to 30 seconds (the default is
240).
- </para>
+ </step>
+ <step>
+ <para>
+ Set <parameter>TcpTimedWaitDelay</parameter> to
<parameter>=dword:0000001e</parameter>. This sets
<parameter>TIME_WAIT</parameter> parameter to 30 seconds (the default is
240).
+ </para>
- </step>
+ </step>
- </procedure>
-
- <example
id="exam-Reference_Guide-Notes_for_Microsoft_Windows_users-Sample_Registry_File">
- <title>Sample Registry File</title>
-
+ </procedure>
+
+ <example
id="exam-Reference_Guide-Notes_for_Microsoft_Windows_users-Sample_Registry_File">
+ <title>Sample Registry File</title>
+
<programlisting>Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:00001b58
"TcpTimedWaitDelay"=dword:0000001e</programlisting>
- </example>
+ </example>
- </section>
-
+ </section>
+
</chapter>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/data-container.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/data-container.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/data-container.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -125,7 +125,7 @@
</varlistentry>
<varlistentry>
- <term>Value storage lifecycle</term>
+ <term>Value storage life-cycle</term>
<listitem>
<para>
Value storage is used from within the container.
<emphasis>Read</emphasis> actions are related to container reads while
<emphasis>write</emphasis> actions are commit-related. The container
(connection) implementation should use transaction capabilities of the storages in the
same way as for other operations.
Modified: epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/jca.xml
===================================================================
--- epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/jca.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++ epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/jca.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -8,7 +8,7 @@
<section id="sect-Reference_Guide-The_JCA_Resource_Adapter-Overview">
<title>Overview</title>
<para>
- eXo JCR supports <emphasis>J2EE Connector Architecture</emphasis> 1.5,
thus If you would like to delegate the JCR Session lifecycle to your application server,
you can use the JCA Resource Adapter for eXo JCR if your application server supports JCA
1.5. This adapter only supports XA Transaction, in other words you cannot use it for local
transactions. Since the JCR Sessions have not been designed to be shareable, the session
pooling is simply not covered by the adapter.
+ eXo JCR supports <emphasis>J2EE Connector Architecture</emphasis> 1.5,
thus If you would like to delegate the JCR Session life-cycle to your application server,
you can use the JCA Resource Adapter for eXo JCR if your application server supports JCA
1.5. This adapter only supports XA Transaction, in other words you cannot use it for local
transactions. Since the JCR Sessions have not been designed to be shareable, the session
pooling is simply not covered by the adapter.
</para>
</section>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/lock-manager-config.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/lock-manager-config.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/lock-manager-config.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -58,7 +58,7 @@
</listitem>
<listitem>
<para>
-The <parameter>cache.jdbc.fqn.type</parameter> and
<parameter>cache.jdbc.node.type</parameter> paramters must be configured
according to the database being used.
+The <parameter>cache.jdbc.fqn.type</parameter> and
<parameter>cache.jdbc.node.type</parameter> parameters must be configured
according to the database being used.
</para>
</listitem>
</itemizedlist> --> <para>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/other/acl-ext.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/other/acl-ext.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/other/acl-ext.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -99,7 +99,7 @@
...
</workspace></programlisting>
<para>
- When implementing <literal>AccessManager</literal>, the
<literal>hasPermission()</literal> method has to be overriden so it uses the
current invocation context at its discretion. For instance, it may get the current
node's metadata and make a decision if the current User has appropriate permissions.
Use Invocation Context's runtime properties to make a decision about current
Session's privileges.
+ When implementing <literal>AccessManager</literal>, the
<literal>hasPermission()</literal> method has to be overridden so it uses the
current invocation context at its discretion. For instance, it may get the current
node's metadata and make a decision if the current User has appropriate permissions.
Use Invocation Context's runtime properties to make a decision about current
Session's privileges.
</para>
<para>
Simplified Sequence diagram for the <literal>Session.getNode()</literal>
method for example:
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/other/link-producer.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/other/link-producer.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/other/link-producer.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -4,93 +4,93 @@
%BOOK_ENTITIES;
]>
<chapter id="chap-Reference_Guide-Link_Producer_Service">
- <title>Link Producer Service</title>
- <para>
- The Link Producer Service is a simple service which generates an file that is
compatible with the Microsoft link file format. It is an extension of the REST Framework
library and is included into the WebDav service. On dispatching a
<literal>GET</literal> request the service generates the content of an
<filename>.lnk</filename> file, which points to a JCR resource via WebDav.
- </para>
- <para>
- Link Producer has a simple configuration which is described below:
- </para>
-
+ <title>Link Producer Service</title>
+ <para>
+ The Link Producer Service is a simple service which generates an file that is
compatible with the Microsoft link file format. It is an extension of the REST Framework
library and is included into the WebDav service. On dispatching a
<literal>GET</literal> request the service generates the content of an
<filename>.lnk</filename> file, which points to a JCR resource via WebDav.
+ </para>
+ <para>
+ Link Producer has a simple configuration which is described below:
+ </para>
+
<programlisting language="XML"
role="XML"><component>
<key>org.exoplatform.services.webdav.lnkproducer.LnkProducer</key>
<type>org.exoplatform.services.webdav.lnkproducer.LnkProducer</type>
</component></programlisting>
- <para>
- When using JCR the resource can be addressed by WebDav reference (href) like
<uri>http://host:port/rest/jcr/repository/workspace/somenode/somefile.extention</uri>
, the link servlet must be called for this resource by several hrefs, like
<uri>http://localhost:8080/rest/lnkproducer/openit.lnk?path=/repository/workspace/somenode/somefile.extention</uri>
- </para>
- <para>
- Please note, that when using the portal mode the REST servlet is available using a
reference (href) like <uri>http://localhost:8080/portal/rest/...</uri>
- </para>
- <para>
- The name of the <filename>.lnk</filename> file can be any. But for the best
compatibility it must be the same as the name of the JCR resource.
- </para>
- <para>
- Here is a step by step sample of a use case of the link producer.
- </para>
- <procedure>
- <title></title>
- <step>
- <para>
- Type valid reference to the resource, using the link producer in your browser's
adress field:
- </para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/eXoJCR/other/lnkproducer1.JPG"
width="444" />
- </imageobject>
+ <para>
+ When using JCR the resource can be addressed by WebDav reference (href) like
<uri>http://host:port/rest/jcr/repository/workspace/somenode/somefile.extension</uri>
, the link servlet must be called for this resource by several hrefs, like
<uri>http://localhost:8080/rest/lnkproducer/openit.lnk?path=/repository/workspace/somenode/somefile.extension</uri>
+ </para>
+ <para>
+ Please note, that when using the portal mode the REST servlet is available using
a reference (href) like <uri>http://localhost:8080/portal/rest/...</uri>
+ </para>
+ <para>
+ The name of the <filename>.lnk</filename> file can be any. But for
the best compatibility it must be the same as the name of the JCR resource.
+ </para>
+ <para>
+ Here is a step by step sample of a use case of the link producer.
+ </para>
+ <procedure>
+ <title></title>
+ <step>
+ <para>
+ Type valid reference to the resource, using the link producer in your
browser's adress field:
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata
fileref="images/eXoJCR/other/lnkproducer1.JPG" width="444" />
+ </imageobject>
- </mediaobject>
+ </mediaobject>
- </step>
- <step>
- <para>
- Internet Explorer will give a dialog window requesting to Open a file or to Save it.
Click on the Open button
- </para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/eXoJCR/other/lnkproducer2.JPG"
width="444" />
- </imageobject>
+ </step>
+ <step>
+ <para>
+ Internet Explorer will give a dialog window requesting to Open a file or
to Save it. Click on the Open button
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata
fileref="images/eXoJCR/other/lnkproducer2.JPG" width="444" />
+ </imageobject>
- </mediaobject>
+ </mediaobject>
- </step>
- <step>
- <para>
- In Windows system an <filename>.lnk</filename> file will be downloaded
and opened with the application which is registered to open the files, which are pointed
to by the <filename>.lnk</filename> file. In case of a .doc file, Windows
opens Microsoft Office Word which will try to open a remote file (test0000.doc). Maybe it
will be necessary to enter USERNAME and PASSWORD.
- </para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/eXoJCR/other/lnkproducer3.JPG"
width="444" />
- </imageobject>
+ </step>
+ <step>
+ <para>
+ In Windows system an <filename>.lnk</filename> file will be
downloaded and opened with the application which is registered to open the files, which
are pointed to by the <filename>.lnk</filename> file. In case of a .doc file,
Windows opens Microsoft Office Word which will try to open a remote file (test0000.doc).
Maybe it will be necessary to enter USERNAME and PASSWORD.
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata
fileref="images/eXoJCR/other/lnkproducer3.JPG" width="444" />
+ </imageobject>
- </mediaobject>
+ </mediaobject>
- </step>
- <step>
- <para>
- Edit the file in Microsoft Word.
- </para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/eXoJCR/other/lnkproducer4.JPG"
width="444" />
- </imageobject>
+ </step>
+ <step>
+ <para>
+ Edit the file in Microsoft Word.
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata
fileref="images/eXoJCR/other/lnkproducer4.JPG" width="444" />
+ </imageobject>
- </mediaobject>
+ </mediaobject>
- </step>
+ </step>
- </procedure>
-
- <para>
- The Link Producer is necessary for opening/editing and then saving the remote files in
Microsoft Office Word, without any further updates.
- </para>
- <para>
- Also the Link Producer can be referenced to from an HTML page. If page contains code
susch as...
- </para>
-
-<programlisting language="HTML" role="HTML"><a
href="http://localhost:8080/rest/lnkproducer/openit.lnk?path=/repository/workspace/somenode/somefile.extention">somefile.extention</a></programlisting>
- <para>
- ...the file "somefile.extention" will open directly.
- </para>
+ </procedure>
+
+ <para>
+ The Link Producer is necessary for opening/editing and then saving the remote
files in Microsoft Office Word, without any further updates.
+ </para>
+ <para>
+ Also the Link Producer can be referenced to from an HTML page. If page contains
code such as...
+ </para>
+
+<programlisting language="HTML" role="HTML"><a
href="http://localhost:8080/rest/lnkproducer/openit.lnk?path=/repository/workspace/somenode/somefile.extension">somefile.extension</a></programlisting>
+ <para>
+ ...the file "somefile.extension" will open directly.
+ </para>
</chapter>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/protocols/ftp.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/protocols/ftp.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/protocols/ftp.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -131,7 +131,7 @@
<value>application/zip</value>
</value-param></programlisting>
<para>
- The mime type of a created file is chosen by using its file
extention. In case, a server cannot find the corresponding mime type, this value is used.
+ The mime type of a created file is chosen by using its file
extension. In case, a server cannot find the corresponding mime type, this value is used.
</para>
</listitem>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/protocols/webdav.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/protocols/webdav.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/protocols/webdav.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -4,7 +4,7 @@
%BOOK_ENTITIES;
]>
<chapter id="chap-Reference_Guide-WebDAV">
- <!-- This document was created with Syntext Serna Free. -->
<title>WebDAV</title>
+ <title>WebDAV</title>
<section id="sect-Reference_Guide-WebDAV-Introduction">
<title>Introduction</title>
<para>
@@ -30,7 +30,7 @@
</para>
<note>
<title>Note:</title>
- <!-- <remark>DOCS NOTE: I have no idea what this
means!</remark> --> <para>
+ <para>
If you try the "in ECM" option, add "@ecm" to the
user's password. Alternatively, you may modify jaas.conf by adding the <emphasis
role="bold">domain=ecm</emphasis> option as follows:
</para>
@@ -45,7 +45,7 @@
<section id="sect-Reference_Guide-WebDAV-WebDAV_Configuration">
<title>WebDAV Configuration</title>
<para>
- The WebDAV configuration file: <!-- is defined in the
<remark><filename>DOC NOTE:
where/is/this/file.xml</filename></remark> -->
+ The WebDAV configuration file:
</para>
<programlisting language="XML"
role="XML"><component>
@@ -341,7 +341,7 @@
<formalpara
id="form-Reference_Guide-WebDAV_Considerations-Windows_7">
<title>Windows 7</title>
<para>
- When attemping to set up a web folder through <guilabel>Add a
Network Location</guilabel> or <guilabel>Map a Network Drive</guilabel>
through <guilabel>My Computer</guilabel>, an error message stating
<guilabel>The folder you entered does not appear to be valid. Please choose
another</guilabel> or <guilabel>Windows cannot access … Check the spelling of
the name. Otherwise, there might be …</guilabel> may be encountered. These errors
may appear when you are using SSL or non-SSL.
+ When attempting to set up a web folder through <guilabel>Add a
Network Location</guilabel> or <guilabel>Map a Network Drive</guilabel>
through <guilabel>My Computer</guilabel>, an error message stating
<guilabel>The folder you entered does not appear to be valid. Please choose
another</guilabel> or <guilabel>Windows cannot access … Check the spelling of
the name. Otherwise, there might be …</guilabel> may be encountered. These errors
may appear when you are using SSL or non-SSL.
</para>
</formalpara>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/query-handler-config.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/query-handler-config.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/query-handler-config.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -20,7 +20,7 @@
</mediaobject>
<para>
- As this implementation designed for clustered environment it has additional
mechanisms for data delivery within cluster. Actual text extraction jobs done on the same
node that does content operations (i.e. write operation). Prepared "documents"
(Lucene term that means block of data ready for indexing) are replicated withing cluster
nodes and processed by local indexes. So each cluster instance has the same index content.
When new node joins the cluster it has no initial index, so it must be created. There are
some supported ways of doing this operation. The simplest is to simply copy the index
manually but this is not intended for use. If no initial index found JCR uses automated
sceneries. They are controlled via configuration (see "index-recovery-mode"
parameter) offering full re-indexing from database or copying from another cluster node.
+ As this implementation designed for clustered environment it has additional
mechanisms for data delivery within cluster. Actual text extraction jobs done on the same
node that does content operations (i.e. write operation). Prepared "documents"
(Lucene term that means block of data ready for indexing) are replicated withing cluster
nodes and processed by local indexes. So each cluster instance has the same index content.
When new node joins the cluster it has no initial index, so it must be created. There are
some supported ways of doing this operation. The simplest is to simply copy the index
manually but this is not intended for use. If no initial index found JCR uses automated
scenarios. They are controlled via configuration (see "index-recovery-mode"
parameter) offering full re-indexing from database or copying from another cluster node.
</para>
<para>
For some reasons having a multiple index copies on each instance can be
costly. So shared index can be used instead (see diagram below).
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/repository-creation-service.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/repository-creation-service.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/jcr/repository-creation-service.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -26,7 +26,7 @@
</step>
<step>
<para>
- When repository has been created the user-node will broadcast a
message to all <literal>clusterNodes</literal> with the
<literal>RepositoryEntry</literal>. Wach cluster node will start a new
Repository.
+ When repository has been created the user-node will broadcast a
message to all <literal>clusterNodes</literal> with the
<literal>RepositoryEntry</literal>. Each cluster node will start a new
Repository.
</para>
</step>
Modified:
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/ws/framework-for-cross-domain-ajax.xml
===================================================================
---
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/ws/framework-for-cross-domain-ajax.xml 2011-12-08
00:39:06 UTC (rev 8206)
+++
epp/docs/branches/5.2/Reference_Guide/en-US/modules/eXoJCR/ws/framework-for-cross-domain-ajax.xml 2011-12-08
01:29:19 UTC (rev 8207)
@@ -60,13 +60,13 @@
3) Create in the start page IFRAME (name it - "client iframe") and insert it
in the document from ServerA (client.
</para>
<para>
- 4) In "client iframe" create ne IFRAME element ("server iframe")
and insert it in the document from ServerB (server.html). Documents (client.html and
server.html) contain special script that can transfer data between ifarmes.
+ 4) In "client iframe" create ne IFRAME element ("server iframe")
and insert it in the document from ServerB (server.html). Documents (client.html and
server.html) contain special script that can transfer data between iframes.
</para>
<para>
5) "Client iframe" transfer information about HTTP method and URL that we
want do cross-domain request to "server iframe".
</para>
<para>
- 6) "Server iframe" do simple XmlHttpRequest to the service that we need (it
can do that because download from same domain) and get informaton from service.
+ 6) "Server iframe" do simple XmlHttpRequest to the service that we need (it
can do that because download from same domain) and get information from service.
</para>
<para>
7) "Server iframe" transfer data to "client iframe" and now we get
information that we want.