SorinS
SorinS

Reputation: 180

Is it possible to start Mule3 embedded without spring dependency?

I am trying to use Mule 3.2.1 embedded from a plain java application. The application is suppose to run in an environment where storage space is limited.
I tried something like (import, exceptions omitted for brevity):

DefaultMuleContextFactory muleContextFactory = new DefaultMuleContextFactory();  
ConfigurationBuilder configBuilder = new AutoConfigurationBuilder("mule-config.xml");
MuleContext muleContext = muleContextFactory.createMuleContext(configBuilder);  
muleContext.start(); 

and also this:

AutoConfigurationBuilder configBuilder = new AutoConfigurationBuilder("mule-config.xml");
DefaultMuleConfiguration configuration = new DefaultMuleConfiguration();
MuleContextBuilder contextBuilder = new DefaultMuleContextBuilder();
contextBuilder.setMuleConfiguration(configuration);
MuleContext muleContext = new DefaultMuleContextFactory().createMuleContext(configbuilder, contextBuilder);
muleContext.start();

but both require spring-core, spring-beans, spring-context and some commons libraries. Any help would be great.

Upvotes: 1

Views: 725

Answers (2)

David Dossot
David Dossot

Reputation: 33413

If you use the XML configuration, you need Spring.

If you don't want to use Spring, your options are:

  • Instantiate and wire Mule internal components by hand, dealing with life cycles as well,
  • Wait until Mule DSL gets released. You may want to bug MuleSoft about a release date :)

If you only want to use raw transports, ie not configure any flow or pattern, you can do it without Spring but bear in mind that, if the mule-core dependency doesn't bring Spring transitively, all the modules and transports do. This means that you'll have to use filtering to keep these dependencies at bay.

For example to use the HTTP transport, you would need these Maven dependencies:

<dependency>
    <groupId>org.mule</groupId>
    <artifactId>mule-core</artifactId>
    <version>3.4.0</version>
</dependency>
<dependency>
    <groupId>org.mule.transports</groupId>
    <artifactId>mule-transport-http</artifactId>
    <version>3.4.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-spring-config</artifactId>
        </exclusion>
    </exclusions>
</dependency>

With this in place you then do:

MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
MuleContextBuilder muleContextBuilder = new DefaultMuleContextBuilder();
MuleContext muleContext = muleContextFactory.createMuleContext(muleContextBuilder);
muleContext.start();

MuleClient client = muleContext.getClient();

MuleMessage response = client.request("http://www.google.com", 20000L);
System.out.println(response.getPayloadAsString());

muleContext.dispose();
System.exit(0);

Note that if that's all you're doing with Mule, then you'd rather use the Apache HTTP Client directly :)

Upvotes: 2

user2043759
user2043759

Reputation: 26

        MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
        MuleContextBuilder muleContextBuilder = new DefaultMuleContextBuilder();
        MuleContext muleContext
        muleContextFactory.createMuleContext(muleContextBuilder);
        muleContext.start();

        // create mule client
        MuleClient client = new MuleClient(muleContext);
        // generate xml request
        String reportRequestXml = createXML(reportRequest);
        // set up message properties
        Map<String, Object> messageProperties = new HashMap<String, Object>();
        messageProperties.put("Content-Type", "application/xml");

        // send request with timeout
        MuleMessage response = client.send(crsRestUrl, reportRequestXml, messageProperties, httpTimeout);

        muleContext.stop();

Upvotes: 0

Related Questions