Skip to content

Commit

Permalink
Adding boot as un commited part of the network module
Browse files Browse the repository at this point in the history
  • Loading branch information
ngaud committed Nov 5, 2020
1 parent be5accb commit ca006a8
Showing 1 changed file with 97 additions and 0 deletions.
@@ -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]
}

}



0 comments on commit ca006a8

Please sign in to comment.