1.2.6. Miscellaneous

Startable interface

Your service can implement the startable interface that defines start() and stop() methods. These methods are called by the container at the beginning and the end of the container's lifecycle. In this way, the lifecycle of your service is managed by the container.

Inversion of control

Retrospection. Do you remember your last project where you had some small components and several larger services? How was this organized? Some services had their own configuration files, others had static values in the source code. Most components were probably tightly coupled to the main application, or you called static methods whenever you needed a service in your Java class. Presumably you even copied the source code of an earlier project in order to adapt the implementation to your needs. In short:

  • Each of your service had a proprietary configuration mechanism.

  • The service lifecycles were managed inside of each service or were arbitrary.

  • The dependencies between your services were implementation-dependent and tightly coupled in your source code.

New Approach. You have seen that eXo uses the Inversion of Control (IoC) pattern which means that the control of the services is given to an independent outside entity (container in this case). Now the container takes care of everything:

  • The configuration is injected by external configuration files.

  • The lifecycle is managed from outside, because the constructors are called by the container. You can achieve an even finer lifecycle management if you use the startable interface.

  • The dependencies are injected by the service instantiation process.

Dependency Injection. You also saw two types of dependency injections:

  • Constructor injection: The constructor is called by the container.

  • Setter injection: Whenever you use external-plugins to provide your service with plugins (see Service Configuration in Detail).

More containers

There are two more Containers called RepositoryContainer and WorkspaceContainer. These are specificities of eXo JCR, for the sake of simplicity. You don't need them.

Single implementation services

In some cases, the developer of a service does not expect that there will be several implementations for his service. Therefore he does not create an interface. In this case the configuration looks like this:


<key>org.exoplatform.services.database.jdbc.DBSchemaCreator</key>
<type>org.exoplatform.services.database.jdbc.DBSchemaCreator</type>

The key and type tags contain equally the qualified class name.

Configuration properties

Since Kernel 2.0.7 and 2.1, it is possible to use system properties in literal values of component configuration metadata. Thus it is possible to resolve properties at runtime instead of providing a value at packaging time.


<component>
  ...
  <init-params>
    <value-param>
      <name>simple_param</name>
      <value>${simple_param_value}</value>
    </value-param>
    <properties-param>
      <name>properties_param</name>
      <property name="value_1" value="properties_param_value_1"/>
      <property name="value_2" value="${properties_param_value_2}"/>
    </properties-param>
    <object-param>
      <name>object_param</name>
      <object type="org.exoplatform.xml.test.Person">
        <field name="address"><string>${person_address}</string></field>
        <field name="male"><boolean>${person_male}</boolean></field>
        <field name="age"><int>${age_value}</int></field>
        <field name="size"><double>${size_value}</double></field>
      </object>
    </object-param>
  </init-params>
</component>

Configuration logging

In case you need to solve problems with your service configuration, you have to know from which JAR/WAR causes your troubles. Add the JVM system property org.exoplatform.container.configuration.debug to get the related logging.

Note

The JVM system property can be added by Customizing environment variables. If you run eXo Platform in dev mode, this property is added already.

If this property is set, the container configuration manager reports (during startup) the configuration retrieval process to the standard output (System.out).

......
Add configuration jar:file:/D:/Projects/eXo/dev/exo-working/exo-tomcat/lib/exo.kernel.container-trunk.jar!/conf/portal/configuration.xml
Add configuration jar:file:/D:/Projects/eXo/dev/exo-working/exo-tomcat/lib/exo.kernel.component.cache-trunk.jar!/conf/portal/configuration.xml
Add configuration jndi:/localhost/portal/WEB-INF/conf/configuration.xml import jndi:/localhost/portal/WEB-INF/conf/common/common-configuration.xml
import jndi:/localhost/portal/WEB-INF/conf/database/database-configuration.xml import jndi:/localhost/portal/WEB-INF/conf/ecm/jcr-component-plugins-configuration.xml
import jndi:/localhost/portal/WEB-INF/conf/jcr/jcr-configuration.xml
......
Copyright ©. All rights reserved. eXo Platform SAS
blog comments powered byDisqus