Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding boot as un commited part of the network module
- Loading branch information
Showing
1 changed file
with
97 additions
and
0 deletions.
There are no files selected for viewing
97 changes: 97 additions & 0 deletions
97
...project/io.janusproject.network/src/main/sarl/io/sarl/sre/network/boot/NetworkModule.sarl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
package io.sarl.sre.network.boot | ||
|
||
import com.google.inject.AbstractModule | ||
import com.google.inject.Module | ||
import com.google.inject.Provides | ||
import com.hazelcast.config.Config | ||
import com.hazelcast.core.Hazelcast | ||
import com.hazelcast.core.HazelcastInstance | ||
import com.hazelcast.logging.LogEvent | ||
import com.hazelcast.logging.LogListener | ||
import io.bootique.BQModule | ||
import io.bootique.BQModuleProvider | ||
import io.sarl.sre.boot.internal.services.ContextServiceModule | ||
import io.sarl.sre.network.services.HazelcastContextService | ||
import io.sarl.sre.network.services.HazelcastEventTransportService | ||
import io.sarl.sre.network.services.HazelcastSpaceRepository | ||
import io.sarl.sre.services.context.ContextService | ||
import io.sarl.sre.services.context.SpaceRepository | ||
import io.sarl.sre.services.logging.LoggingService | ||
import io.sarl.sre.spaces.EventTransportService | ||
import java.util.Collection | ||
import java.util.logging.Level | ||
import java.util.logging.Logger | ||
import javax.inject.Inject | ||
import javax.inject.Singleton | ||
|
||
class NetworkModule extends AbstractModule { | ||
|
||
protected override configure { | ||
typeof(SpaceRepository).bind.to(typeof(HazelcastSpaceRepository)) | ||
typeof(ContextService).bind.to(typeof(HazelcastContextService)).in(typeof(Singleton)) | ||
typeof(EventTransportService).bind.to(typeof(HazelcastEventTransportService)).in(typeof(Singleton)) | ||
} | ||
|
||
val config : Config = new Config() | ||
|
||
@Provides | ||
@Singleton | ||
def provideHazelcastInstance(logger : LoggingService) : HazelcastInstance { | ||
//FIXME config a two hazelcast instances on the same node | ||
//FIXME config the log for hazelcast to trace error at startup | ||
config.clusterName = "HAZEL-SARL-SREs-Cluster" | ||
config.networkConfig.join.multicastConfig.enabled = false //can't enable multicat and tcpip at the same time | ||
config.networkConfig.join.tcpIpConfig.enabled = true | ||
config.networkConfig.portAutoIncrement = true | ||
//The following line imposes that at least two hazelcast instance been laucnhed on the same cluster before doing anything | ||
config.setProperty("hazelcast.initial.min.cluster.size","2"); | ||
|
||
//Mandatory to have the following line if you want to be sure that two distinct hazelcast instances running in two distinct jvm on the same node/computer join the same cluster | ||
config.networkConfig.join.tcpIpConfig.addMember("127.0.0.1") | ||
val hzlInstance = Hazelcast.newHazelcastInstance(config) | ||
|
||
hzlInstance.loggingService.addLogListener(Level.INFO, new HazelcastLogListener(logger)) | ||
return hzlInstance | ||
} | ||
|
||
|
||
} | ||
|
||
class HazelcastLogListener implements LogListener { | ||
|
||
/** | ||
* SRE Kernel logger | ||
*/ | ||
var kernelLogger : Logger; | ||
|
||
@Inject | ||
new(logger : LoggingService) { | ||
kernelLogger = logger.kernelLogger | ||
} | ||
|
||
|
||
def log(logEvent : LogEvent) { | ||
this.kernelLogger.log(logEvent.logRecord.level, "From:"+logEvent.member+"::"+logEvent.logRecord.message) | ||
} | ||
|
||
} | ||
|
||
class NetworkModuleProvider implements BQModuleProvider { | ||
|
||
override module : Module { | ||
return new NetworkModule | ||
} | ||
|
||
override moduleBuilder : BQModule.Builder { | ||
return BQModule::builder(module).overrides(overrides).providerName(name).configs(configs).description( | ||
"First version of SRE Network Module"); | ||
} | ||
|
||
override overrides : Collection<Class<? extends Module>> { | ||
#[ContextServiceModule] | ||
} | ||
|
||
} | ||
|
||
|
||
|