/* * Copyright 2013-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.xd.dirt.server; import java.util.Properties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource; import org.springframework.context.annotation.Profile; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; import org.springframework.core.env.PropertiesPropertySource; import org.springframework.integration.config.EnableIntegration; import org.springframework.util.StringUtils; import org.springframework.xd.dirt.util.ConfigLocations; import org.springframework.xd.dirt.util.XdProfiles; //import org.springframework.xd.dirt.zookeeper.EmbeddedZooKeeper; //import org.springframework.xd.dirt.zookeeper.ZooKeeperConnection; /** * Beans defined and imported here are shared by the XD Admin Server and Container Server. * * @author David Turanski * @author Mark Fisher * @author Ilayaperumal Gopinathan * @author Gary Russell */ @Configuration @EnableIntegration @Import(PropertyPlaceholderAutoConfiguration.class) @ImportResource({ ConfigLocations.XD_CONFIG_ROOT + "bus/*.xml", ConfigLocations.XD_CONFIG_ROOT + "internal/repositories.xml", ConfigLocations.XD_CONFIG_ROOT + "analytics/${XD_ANALYTICS}-analytics.xml" }) public class SharedServerContextConfiguration { public static final String ZK_CONNECT = "zk.client.connect"; public static final String EMBEDDED_ZK_CONNECT = "zk.embedded.client.connect"; public static final String ZK_PROPERTIES_SOURCE = "zk-properties"; @Configuration @Profile(XdProfiles.SINGLENODE_PROFILE) static class SingleNodeZooKeeperConfig // extends ZookeeperConnectionConfig { // @Bean // @ConditionalOnExpression("'${zk.client.connect}'.isEmpty()") // EmbeddedZooKeeper embeddedZooKeeper() { // if (zkEmbeddedServerPort != null) { // return new EmbeddedZooKeeper(zkEmbeddedServerPort); // } // else { // return new EmbeddedZooKeeper(); // } // } // // @Value("${zk.client.connect:}") // private String zkClientConnect; // // @Value("${zk.embedded.server.port:}") // private Integer zkEmbeddedServerPort; // // // // This is autowired, but not required, since the EmbeddedZooKeeper instance is conditional. // @Autowired(required = false) // EmbeddedZooKeeper embeddedZooKeeper; // // @Bean // public ZooKeeperConnection zooKeeperConnection() { // boolean isEmbedded = (embeddedZooKeeper != null); // // the embedded server accepts client connections on a dynamically determined port // if (isEmbedded) { // zkClientConnect = "localhost:" + embeddedZooKeeper.getClientPort(); // } // return setupZookeeperPropertySource(zkClientConnect, isEmbedded); // } // } // @Configuration // @Profile("!" + XdProfiles.SINGLENODE_PROFILE) // static class DistributedZooKeeperConfig extends ZookeeperConnectionConfig { // // @Bean // public ZooKeeperConnection zooKeeperConnection() { // return setupZookeeperPropertySource(zkClientConnect, false); // } } protected static class ZookeeperConnectionConfig implements EnvironmentAware { @Value("${zk.client.connect:}") protected String zkClientConnect; // TODO: Consider a way to not require this property /* * This is a flag optionally passed as a system property indicating the intention to inject some custom * configuration to the ZooKeeper client connection. It is used here to prevent auto start of the connection * since the configuration should be applied before the connection is started. */ @Value("${zk.client.connection.configured:false}") private boolean zkConnectionConfigured; private ConfigurableEnvironment environment; private Properties zkProperties = new Properties(); // protected ZooKeeperConnection setupZookeeperPropertySource(String zkClientConnect, boolean isEmbedded) { // if (!StringUtils.hasText(zkClientConnect)) { // zkClientConnect = ZooKeeperConnection.DEFAULT_CLIENT_CONNECT_STRING; // } // if (isEmbedded) { // zkProperties.put(EMBEDDED_ZK_CONNECT, zkClientConnect); // } // else { // zkProperties.put(ZK_CONNECT, zkClientConnect); // } // this.environment.getPropertySources().addFirst( // new PropertiesPropertySource(ZK_PROPERTIES_SOURCE, zkProperties)); // ZooKeeperConnection zooKeeperConnection = new ZooKeeperConnection(zkClientConnect); // // zooKeeperConnection.setAutoStartup(!zkConnectionConfigured); // // return zooKeeperConnection; // } @Override public void setEnvironment(Environment environment) { this.environment = (ConfigurableEnvironment) environment; } } }