Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running akka with runnable jar

I'm trying to implement akka in java maven project with NetBeans. It runs fine when i run it from NetBeans but when I run the runnable jar from NetBeans, it generate error.

Exception in thread "main" com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka.remote.log-received-messages'

When I add log-received-message in the configuration, it ask for another configuration. This is the plugin that i used to generate the jar file.

<plugin>
        <artifactId>maven-assembly-plugin</artifactId>
</plugin>

And my dependency are

    <dependency>
        <groupId>com.typesafe.akka</groupId> 
        <artifactId>akka-actor_2.10</artifactId> 
        <version>2.3.7</version> 
    </dependency>
    <dependency>
        <groupId>com.typesafe.akka</groupId>
        <artifactId>akka-remote_2.10</artifactId>
        <version>2.3.7</version>
    </dependency>

The configuration for akka is

akka10300{
akka{
    actor{provider = "akka.remote.RemoteActorRefProvider"}
    remote {
    enabled-transports = ["akka.remote.netty.tcp"]
        netty.tcp {
            hostname="127.0.0.1"
            port=10300
        }
    }
}
}
like image 756
rich_k Avatar asked Feb 17 '15 05:02

rich_k


1 Answers

There is a warning about running Akka from a "fat jar" at http://doc.akka.io/docs/akka/snapshot/general/configuration.html. The issue is that there are multiple reference.conf configuration files, and the default behaviour of the Maven assembly or shade plugins is to overwrite earlier instances of the configuration file with later instances.

To fix this, the suggested approach is to use the Maven shade plugin to generate your executable jar and configure it to append all resource.conf files into a single file instead of overwriting. The suggested Maven shade plugin configuration looks like:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-shade-plugin</artifactId>
 <version>1.5</version>
 <executions>
  <execution>
   <phase>package</phase>
   <goals>
    <goal>shade</goal>
   </goals>
   <configuration>
    <shadedArtifactAttached>true</shadedArtifactAttached>
    <shadedClassifierName>allinone</shadedClassifierName>
    <artifactSet>
     <includes>
      <include>*:*</include>
     </includes>
    </artifactSet>
    <transformers>
      <transformer
       implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
       <resource>reference.conf</resource>
      </transformer>
      <transformer
       implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
       <manifestEntries>
        <Main-Class>akka.Main</Main-Class>
       </manifestEntries>
      </transformer>
    </transformers>
   </configuration>
  </execution>
 </executions>
</plugin>
like image 54
Richard Neish Avatar answered Oct 14 '22 23:10

Richard Neish