package org.tynamo.model.jpa.services; import java.net.InetAddress; import java.net.UnknownHostException; import org.apache.tapestry5.ioc.MappedConfiguration; import org.apache.tapestry5.ioc.ServiceBinder; import org.apache.tapestry5.ioc.annotations.Autobuild; import org.apache.tapestry5.ioc.annotations.Startup; import org.apache.tapestry5.ioc.annotations.Symbol; import org.apache.tapestry5.ioc.services.RegistryShutdownHub; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; import org.tynamo.descriptor.annotation.handlers.DescriptorAnnotationHandler; import org.tynamo.model.elasticsearch.annotations.handlers.ElasticSearchAnnotationHandler; import org.tynamo.model.elasticsearch.mapping.MapperFactory; import org.tynamo.model.elasticsearch.mapping.impl.DefaultMapperFactory; import org.tynamo.model.jpa.TynamoJpaSymbols; import org.tynamo.model.jpa.internal.ElasticSearchIndexMaintainer; public class ElasticSearchModule { public static void bind(ServiceBinder binder) { binder.bind(MapperFactory.class, DefaultMapperFactory.class); binder.bind(DescriptorAnnotationHandler.class, ElasticSearchAnnotationHandler.class) .withId("ElasticSearchAnnotationHandler"); } public static void contributeFactoryDefaults(MappedConfiguration<String, Object> configuration) { configuration.add(TynamoJpaSymbols.ELASTICSEARCH_HOME, ""); configuration.add(TynamoJpaSymbols.ELASTICSEARCH_HTTP_ENABLED, false); } public Node buildNode(@Symbol(TynamoJpaSymbols.ELASTICSEARCH_HOME) String pathHome, @Symbol(TynamoJpaSymbols.ELASTICSEARCH_HTTP_ENABLED) boolean httpEnabled, RegistryShutdownHub registryShutdownHub) throws UnknownHostException { // Settings.Builder settings = Settings.settingsBuilder(); ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder(); if (!pathHome.isEmpty()) settings.put("path.home", pathHome); settings.put("http.enabled", httpEnabled); settings.put("number_of_shards", 1); settings.put("number_of_replicas", 0); settings.put("cluster.name", "tynamo-model-search-" + InetAddress.getLocalHost().getHostName()).build(); final Node node = NodeBuilder.nodeBuilder().local(true).data(true).settings(settings).build(); node.start(); registryShutdownHub.addRegistryShutdownListener(new Runnable() { @Override public void run() { node.close(); // TYNAMO-223 } }); return node; } @Startup public static void addJpaEventListener(@Autobuild ElasticSearchIndexMaintainer indexMaintainer) { indexMaintainer.start(); } }