The Default Configuration

The default configuration is the configuration shipped in, in-factory with the Adroitlogic UltraESB. This section describes the key configuration elements of the default configuration in brief, while a more detailed configuration guide on each and every component is in discussion under the User Guide and Configuration and Administration sections of the documentation.

Root configuration walk through

The main configuration file that UltraESB looks for by default is the ultra-root.xml file which resides in the conf directory of the ULTRA_HOME. This particular file in brief is as follows;

Note
The following configuration only contains the required key elements. Comments and few other elements were cut off for the clarity in presenting it on the documentation. The actual file varies from this, but should contain all what is displayed here.

Root Configuration

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:u="http://www.adroitlogic.org/ultraesb"
       xmlns:s="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd
http://www.adroitlogic.org/ultraesb http://schemas.adroitlogic.org/ultraesb/v2_6/ultraesb-artifacts.xsd">

    <bean id="fileCache" class="org.adroitlogic.ultraesb.core.PooledMessageFileCache">
        <constructor-arg value="tmp"/>
    </bean>

    <bean id="http-8280" class="org.adroitlogic.ultraesb.transport.http.HttpNIOListener">
        <constructor-arg ref="fileCache"/>
        <property name="port" value="8280"/>
    </bean>

    <bean id="https-8443" class="org.adroitlogic.ultraesb.transport.http.HttpsNIOListener">
        <constructor-arg ref="fileCache"/>
        <property name="sslVerifyClient" value="optional"/>
        <property name="identityStorePath" value="conf/keys/identity.jks"/>
        <property name="identityKeyPassword" value="password"/>
        <property name="identityStorePassword" value="password"/>
        <property name="trustStorePath" value="conf/keys/trust.jks"/>
        <property name="trustStorePassword" value="password"/>
        <property name="port" value="8443"/>
    </bean>

    <bean id="http-sender" class="org.adroitlogic.ultraesb.transport.http.HttpNIOSender">
        <constructor-arg ref="fileCache"/>
    </bean>

    <bean id="https-sender" class="org.adroitlogic.ultraesb.transport.http.HttpsNIOSender">
        <constructor-arg ref="fileCache"/>
    </bean>

    <!-- Clustering configuration of the UltraESB server -->
    <bean id="cluster-manager" class="org.adroitlogic.ultraesb.clustering.ClusterManager">
        <constructor-arg value="false" type="boolean"/>
        <property name="zkConnectString" value="127.0.0.1:2181"/>
        <property name="zkSessionTimeout" value="30"/>
        <property name="domain" value="default"/>
        <property name="space" value="space1"/>
        <property name="nodeGroup" value="primary"/>
        <property name="nodeName" value="node1"/>
        <property name="startupTimeout" value="30"/>
        <property name="upTimeReportInterval" value="60"/>
        <property name="zooKeeperServerConnectionHandler" ref="zk-conn-handler"/>
    </bean>

    <bean id="zk-conn-handler" class="org.adroitlogic.ultraesb.clustering.ZooKeeperServerConnectionHandlerImpl">
        <property name="server" value="false"/>
    </bean>

    <bean id="environment" class="org.adroitlogic.ultraesb.api.Environment">
        <constructor-arg value="dev" type="java.lang.String"/>
        <property name="onTheFlyCompilationEnabled" value="true"/>
    </bean>

    <bean id="ultra-config" class="org.adroitlogic.ultraesb.core.ConfigurationImpl">
        <property name="environment" ref="environment"/>
    </bean>

    <import resource="ultra-custom.xml"/>
    <import resource="monitoring/ultra-metrics.xml"/>

    <!--JMX management and monitoring configuration-->
    <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
        <property name="objectName" value="connector:name=iiop"/>
        <property name="serviceUrl" value="service:jmx:rmi://localhost:9994/jndi/rmi://localhost:1099/ultra"/>
        <property name="threaded" value="true"/>
        <property name="daemon" value="true"/>
        <property name="environment">
            <map>
                <entry key="jmx.remote.x.access.file" value="conf/management/jmxremote.access"/>
                <entry key="jmx.remote.x.password.file" value="conf/management/jmxremote.password"/>
            </map>
        </property>
    </bean>
    <bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
        <property name="port" value="1099"/>
    </bean>
</beans>

The UltraESB component configuration is a spring configuration with a set of spring beans defining each and every component as seen above. The above configuration contains the following bean definitions;

fileCache

The bean identified by the key "fileCache" is the file cache configuration to be used by the transport receivers and senders, for the time being let’s not worry about this. The guide discusses this concept in detail under the Architecture and Design and the configuration options under the Configuration and Administration.

http-8280

The bean identified by the key "http-8280" is the HTTP listener or the HTTP transport receiver of the UltraESB configured to be listening on the port 8280, as described by the property named port. Further the file cache bean is passed in to use it with the transport.

https-8443

The bean identified by the key "https-8443" is the HTTPS listener or the HTTPS transport receiver of the UltraESB configured to be listening on the port 8443, as described by the property named port. Apart from the port property there are few other properties which configure SSL. The complete configuration options will be discussed under the Transports configurations[Transports configurations] in Configuration and Administration. This also uses the same file cache bean as in the http transport listener that we have discussed previously.

http-sender

The bean identified by the key "http-sender" is the HTTP transport sender configured with the file cache bean as in the receiver.

https-sender

The bean identified by the key "https-sender" is the HTTPS transport sender configured with the file cache bean as in the receiver.

Note
In the above 4 bean identifiers there is no relation between there protocol and the listening port, just for the clear identification purposes they have given the names according to there protocol and the exposed ports, but they can be any arbitrary strings. While this is considered a best practice naming convention for transport listeners/senders there is absolutely no requirement to keep the protocol or port in the bean names. Further UltraESB can have more than one transport adapters for a given protocol, for example you can have 2 HTTP listeners running on port 8280 and 8290.
environment

The concept of an environment has been introduced to UltraESB from the 2.0.0 release onwards which basically is a single named configuration environment where certain features/optimizations be done based on the environment used. The environments and the set of available defined environments are discussed under the Configuration and Administration section of the documentation.

ultra-config

The bean identified by the key "ultra-config" is the bean which provides the main configuration into the UltraESB. It provides deployment units into the UltraESB and some other key configurations which we will be looking at in detail under the User Guide and Configuration and Administration sections of the documentation.

cluster-manager

The bean identified by the key "cluster-manager" is the bean for cluster configuration with Zookeeper. This will be discussed in the clustering guide.

serverConnector

The bean "serverConnector" is for JMX management and monitoring configuration.

Deployment Units
The idea of having one or more Deployment Units defining the proxy services and the mediation is the ability to provide updates for the proxy services and mediation of a given deployment unit without any downtime. At a production deployment, user most of the time needs to update the above elements and not elements which are treated as more static. So, extracting out the related dynamic element fragments into a separate deployment unit allows the ESB to update that deployment unit without affecting the other more static configurations, and most importantly with zero down time. For more information on this regard please refer to the Configuration and Administration.

The factory built UltraESB has only one deployment unit named "default", which is an expanded deployment unit resides in the conf/deployments/default directory of the ULTRA_HOME.

Deployment Unit Identification
Any directory resides in the conf/deployments directory of ULTRA_HOME is treated as an UltraESB deployment unit if that directory contains a file named "ultra-unit.xml" and that should have a spring configuration defining proxy services, endpoints and sequences.

Default Deployment Unit

This contains the more dynamic configuration elements such as proxy services, sequences, endpoints etc.. as pointed out earlier. The in-factory default deployment unit shipped should have a file named ultra-unit.xml which looks like follows;

Default Deployment Unit Configuraton

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:u="http://www.adroitlogic.org/ultraesb"
           xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.adroitlogic.org/ultraesb http://schemas.adroitlogic.org/ultraesb/v2_6/ultraesb-artifacts.xsd">

        <u:descriptor name="Default" version="1.0.0">
                <u:description>This is the default deployment unit shipped with the UltraESB</u:description>
                <!--<u:project name="Project 1"/>-->
                <!--<u:pinnedTo>
                        <u:serverGroups>
                                <list>
                                        <value>primary</value>
                                </list>
                        </u:serverGroups>
                </u:pinnedTo>-->
        </u:descriptor>

        <u:proxy id="echo-proxy">
                <u:transport id="http-8280"/>
                <u:target>
                        <!--u:inSequence>
                                <u:class name="sample.SimpleJavaMediation1"/>
                        </u:inSequence-->
                        <u:inDestination>
                                <u:address>http://localhost:9000/service/EchoService</u:address>
                        </u:inDestination>
                        <u:outSequence>
                                <u:java><![CDATA[
                                                System.out.println("Reply payload : " + mediation.readPayloadAsString(msg));
                                        ]]></u:java>
                        </u:outSequence>
                        <u:outDestination>
                                <u:address type="response"/>
                        </u:outDestination>
                </u:target>
        </u:proxy>

        <u:proxy id="echo-back" pinnedServers="node1,localhost" pinnedServerGroups="primary,active">
                <u:transport id="http-8282"/>
                <u:transport id="https-8443"/>
                <u:target errorSequence="error-handler">
                        <u:inSequence>
                                <u:java import="org.adroitlogic.ultraesb.api.transport.http.HttpConstants;"><![CDATA[
                                                mediation.setPayloadFromString(msg,
                                                                "<response>" +
                                                                                "<method>" + mediation.getHTTPSupport().getMethod(msg) + "</method>" +
                                                                                "<uri>" + msg.getDestinationURL() + "</uri>" +
                                                                                "<query>" + mediation.getHTTPSupport().getQueryString(msg) + "</query>" +
                                                                                "<request>" + mediation.readPayloadAsString(msg) + "</request>" +
                                                                                "</response>");
                                                mediation.sendResponse(msg, 200);
                                        ]]></u:java>
                        </u:inSequence>
                </u:target>
        </u:proxy>

        <bean id="http-8282" class="org.adroitlogic.ultraesb.transport.http.HttpNIOListener">
                <constructor-arg ref="fileCache"/>
                <property name="port" value="8282"/>
        </bean>

    <bean id="http-sender-du" class="org.adroitlogic.ultraesb.transport.http.HttpNIOSender">
        <constructor-arg ref="fileCache"/>
    </bean>
</beans>

This again is a spring configuration with a two custom bean configurations with proxy elements qualified with the UltraESB configuration namespace which is http://www.adroitlogic.org/ultraesb and the respective schema can be found at link:http://schemas.adroitlogic.org/ultraesb/v2_6/ultraesb-artifacts.xsd

While the complete configuration and the schema discussion is available at the User Guide, a briefing of these proxy services are as follows.

echo-proxy

The first configuration element defines a proxy service with the name "echo-proxy", which is exposed on the transport identified by the key "http-8280", defined in the above described root configuration. This means that the proxy service is listening for messages on the port 8280 over the HTTP transport with the service URL being http://localhost:8280/service/echo-proxy.

That is about the external interface(s) of the proxy service. The internal mediation and destination configurations of the proxy service is defined in the target, encapsulated within the <u:target> element. This echo-proxy has the following configurations out of the following possible mediation/destination configurations.

  • in sequence - commented out, so not effective. The commented out in sequence how ever refers to a Java class type sequence.

  • in destination - refers to an external type address, http://localhost:9000/service/EchoService, meaning the message will be sent to the EchoService running on port 9000 after the specified incoming mediation.

  • out sequence - specified as a Java fragment type sequence, which prints the response from the EchoService back to the ESB, into the standard output.

  • out destination - specified as a response type address, meaning that the response from the EchoService is going to be sent back to the caller/client after the out going mediation.

Apart from that a proxy service can have meta-data configurations which we will discuss under the Configuration Guide of the proxy service.

The message flow described by this proxy service configuration can be visualize as follows;

drawing echo proxy flow2
echo-back

The second configuration element is also a proxy service and is identified by the key "echo-back". This is a special type of a proxy which belongs to the mock services category and the service exposed on the transports identified by the key "http-8280" and "https-8443", defined in the above described root configuration. It implies that this mock service is listening for messages on the port 8280 over the HTTP transport as well as on the port 8443 over the HTTPS transport, making it’s service URLs to be http://localhost:8280/service/echo-back and https://localhost:8443/service/echo-back.

The internal target of this echo-back proxy service contains only and in sequence and no destinations nor out sequence. The target in sequence is a Java fragment type sequence which takes over the message and handles it using the UltraESB Mediation API to provide the response back to the consumer.

The visualization of the echo-back proxy is as follows;

drawing echo back flow

That is the brief walk through of the default in-factory configuration of the UltraESB, and the next section will discuss how to Send a message through the UltraESB using the UltraESB tools.

In this topic
In this topic
Contact Us