You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2018/03/16 23:00:45 UTC
[geode] branch develop updated: GEODE-4384/3875: refactor
create/destroy jndi binding commands to use CacheConfig objects (#1627)
This is an automated email from the ASF dual-hosted git repository.
jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new ad77bde GEODE-4384/3875: refactor create/destroy jndi binding commands to use CacheConfig objects (#1627)
ad77bde is described below
commit ad77bde78300797b6dd26bfcae9e0ce8ad6f1ad5
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Fri Mar 16 16:00:41 2018 -0700
GEODE-4384/3875: refactor create/destroy jndi binding commands to use CacheConfig objects (#1627)
* GEODE-3875: refactor create jndi binding
* GEODE-4384: refactor destroy jndi binding
* refactored xml manipulation using jaxb
* Eliminate the need for RegionElement
---
.../internal/ClusterConfigurationService.java | 12 +-
.../internal/cache/configuration/CacheElement.java | 4 +-
.../cache/configuration/JndiBindingsType.java | 27 ++-
.../internal/cache/configuration/RegionConfig.java | 6 +-
.../cache/configuration/RegionElement.java | 23 ---
.../internal/cache/xmlcache/CacheXmlGenerator.java | 9 +-
.../internal/datasource/DataSourceFactory.java | 11 +-
.../apache/geode/internal/jndi/JNDIInvoker.java | 13 +-
.../cli/commands/CreateJndiBindingCommand.java | 112 ++++-------
.../cli/commands/DestroyJndiBindingCommand.java | 52 ++---
.../cli/converters/ConfigPropertyConverter.java | 12 +-
.../cli/functions/CreateJndiBindingFunction.java | 48 ++++-
.../cli/functions/JndiBindingConfiguration.java | 217 ---------------------
.../sanctioned-geode-core-serializables.txt | 4 +-
.../InternalClusterConfigurationServiceTest.java | 13 +-
.../datasource/AbstractPoolCacheJUnitTest.java | 10 +-
.../cli/commands/CreateJndiBindingCommandTest.java | 159 ++++-----------
.../commands/DestroyJndiBindingCommandTest.java | 135 +++----------
.../converters/ConfigPropertyConverterTest.java | 6 +-
.../functions/CreateJndiBindingFunctionTest.java | 26 ++-
.../functions/DestroyJndiBindingFunctionTest.java | 11 +-
.../cli/functions/ListJndiBindingFunctionTest.java | 13 +-
22 files changed, 278 insertions(+), 645 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterConfigurationService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterConfigurationService.java
index 13ba45c..fe65e54 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterConfigurationService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterConfigurationService.java
@@ -86,6 +86,7 @@ import org.apache.geode.distributed.internal.locks.DLockService;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.internal.cache.InternalRegionArguments;
import org.apache.geode.internal.cache.configuration.CacheConfig;
+import org.apache.geode.internal.cache.configuration.CacheElement;
import org.apache.geode.internal.cache.persistence.PersistentMemberID;
import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
@@ -844,7 +845,7 @@ public class ClusterConfigurationService {
}
}
- private Marshaller getMarshaller(Class... additionBindClass) {
+ private Marshaller getMarshaller(Class<? extends CacheElement>... additionBindClass) {
if (bindClasses.containsAll(Arrays.asList(additionBindClass))) {
return marshaller;
}
@@ -854,7 +855,7 @@ public class ClusterConfigurationService {
return marshaller;
}
- private Unmarshaller getUnmarshaller(Class... additionBindClass) {
+ private Unmarshaller getUnmarshaller(Class<? extends CacheElement>... additionBindClass) {
if (bindClasses.containsAll(Arrays.asList(additionBindClass))) {
return unmarshaller;
}
@@ -864,7 +865,8 @@ public class ClusterConfigurationService {
return unmarshaller;
}
- public CacheConfig getCacheConfig(String group, Class... additionalBindClass) {
+ public CacheConfig getCacheConfig(String group,
+ Class<? extends CacheElement>... additionalBindClass) {
return unMarshall(getConfiguration(group).getCacheXmlContent(), additionalBindClass);
}
@@ -890,7 +892,7 @@ public class ClusterConfigurationService {
return list.stream().filter(o -> o.getId().equals(id)).findFirst().orElse(null);
}
- String marshall(CacheConfig config, Class... additionalClass) {
+ String marshall(CacheConfig config, Class<? extends CacheElement>... additionalClass) {
StringWriter sw = new StringWriter();
try {
getMarshaller(additionalClass).marshal(config, sw);
@@ -900,7 +902,7 @@ public class ClusterConfigurationService {
return sw.toString();
}
- CacheConfig unMarshall(String xml, Class... additionalClass) {
+ CacheConfig unMarshall(String xml, Class<? extends CacheElement>... additionalClass) {
try {
return (CacheConfig) getUnmarshaller(additionalClass).unmarshal(new StringReader(xml));
} catch (Exception e) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/CacheElement.java b/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/CacheElement.java
index 3c293e8..1b26d23 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/CacheElement.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/CacheElement.java
@@ -17,7 +17,9 @@
package org.apache.geode.internal.cache.configuration;
+import java.io.Serializable;
+
import org.apache.geode.lang.Identifiable;
-public interface CacheElement extends Identifiable<String> {
+public interface CacheElement extends Identifiable<String>, Serializable {
}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/JndiBindingsType.java b/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/JndiBindingsType.java
index 696fe98..afa54ea 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/JndiBindingsType.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/JndiBindingsType.java
@@ -198,7 +198,7 @@ public class JndiBindingsType {
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"configProperty"})
- public static class JndiBinding {
+ public static class JndiBinding implements CacheElement {
@XmlElement(name = "config-property", namespace = "http://geode.apache.org/schema/cache")
protected List<JndiBindingsType.JndiBinding.ConfigProperty> configProperty;
@@ -623,6 +623,11 @@ public class JndiBindingsType {
this.xaDatasourceClass = value;
}
+ @Override
+ public String getId() {
+ return getJndiName();
+ }
+
/**
* <p>
@@ -662,6 +667,14 @@ public class JndiBindingsType {
namespace = "http://geode.apache.org/schema/cache", required = true)
protected String configPropertyValue;
+ public ConfigProperty() {};
+
+ public ConfigProperty(String name, String type, String value) {
+ this.configPropertyName = name;
+ this.configPropertyType = type;
+ this.configPropertyValue = value;
+ }
+
/**
* Gets the value of the configPropertyName property.
*
@@ -670,7 +683,7 @@ public class JndiBindingsType {
* {@link String }
*
*/
- public String getConfigPropertyName() {
+ public String getName() {
return configPropertyName;
}
@@ -682,7 +695,7 @@ public class JndiBindingsType {
* {@link String }
*
*/
- public void setConfigPropertyName(String value) {
+ public void setName(String value) {
this.configPropertyName = value;
}
@@ -694,7 +707,7 @@ public class JndiBindingsType {
* {@link String }
*
*/
- public String getConfigPropertyType() {
+ public String getType() {
return configPropertyType;
}
@@ -706,7 +719,7 @@ public class JndiBindingsType {
* {@link String }
*
*/
- public void setConfigPropertyType(String value) {
+ public void setType(String value) {
this.configPropertyType = value;
}
@@ -718,7 +731,7 @@ public class JndiBindingsType {
* {@link String }
*
*/
- public String getConfigPropertyValue() {
+ public String getValue() {
return configPropertyValue;
}
@@ -730,7 +743,7 @@ public class JndiBindingsType {
* {@link String }
*
*/
- public void setConfigPropertyValue(String value) {
+ public void setValue(String value) {
this.configPropertyValue = value;
}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/RegionConfig.java b/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/RegionConfig.java
index 8279432..614c673 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/RegionConfig.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/RegionConfig.java
@@ -156,7 +156,7 @@ public class RegionConfig {
@XmlElement(namespace = "http://geode.apache.org/schema/cache")
protected List<RegionConfig.Entry> entry;
@XmlAnyElement(lax = true)
- protected List<RegionElement> regionElements;
+ protected List<CacheElement> regionElements;
@XmlElement(namespace = "http://geode.apache.org/schema/cache")
protected List<RegionConfig> region;
@XmlAttribute(name = "name", required = true)
@@ -274,11 +274,11 @@ public class RegionConfig {
* <p>
* Objects of the following type(s) are allowed in the list
* {@link Element }
- * {@link RegionElement }
+ * {@link CacheElement }
*
*
*/
- public List<RegionElement> getCustomRegionElements() {
+ public List<CacheElement> getCustomRegionElements() {
if (regionElements == null) {
regionElements = new ArrayList<>();
}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/RegionElement.java b/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/RegionElement.java
deleted file mode 100644
index 69dcf50..0000000
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/configuration/RegionElement.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.geode.internal.cache.configuration;
-
-import org.apache.geode.lang.Identifiable;
-
-public interface RegionElement extends Identifiable<String> {
-}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java
index 670f740..1bdb64c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java
@@ -14,9 +14,10 @@
*/
package org.apache.geode.internal.cache.xmlcache;
-import static javax.xml.XMLConstants.*;
-import static org.apache.geode.internal.cache.xmlcache.XmlGeneratorUtils.*;
-import static org.apache.geode.management.internal.configuration.utils.XmlConstants.*;
+import static javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI;
+import static org.apache.geode.internal.cache.xmlcache.XmlGeneratorUtils.addAttribute;
+import static org.apache.geode.management.internal.configuration.utils.XmlConstants.W3C_XML_SCHEMA_INSTANCE_ATTRIBUTE_SCHEMA_LOCATION;
+import static org.apache.geode.management.internal.configuration.utils.XmlConstants.W3C_XML_SCHEMA_INSTANCE_PREFIX;
import java.io.File;
import java.io.FileWriter;
@@ -53,7 +54,6 @@ import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.helpers.AttributesImpl;
import org.apache.geode.InternalGemFireException;
@@ -93,7 +93,6 @@ import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.geode.cache.client.Pool;
import org.apache.geode.cache.client.PoolFactory;
import org.apache.geode.cache.client.PoolManager;
-import org.apache.geode.cache.client.internal.InternalClientCache;
import org.apache.geode.cache.client.internal.PoolImpl;
import org.apache.geode.cache.execute.Function;
import org.apache.geode.cache.execute.FunctionService;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/datasource/DataSourceFactory.java b/geode-core/src/main/java/org/apache/geode/internal/datasource/DataSourceFactory.java
index 4bec4d6..a634af9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/datasource/DataSourceFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/datasource/DataSourceFactory.java
@@ -62,8 +62,7 @@ public class DataSourceFactory {
* @throws DataSourceCreateException
* @return ??
*/
- public static DataSource getSimpleDataSource(Map configMap, List props)
- throws DataSourceCreateException {
+ public static DataSource getSimpleDataSource(Map configMap) throws DataSourceCreateException {
ConfiguredDataSourceProperties configs = createDataSourceProperties(configMap);
if (configs.getJDBCDriver() == null) {
logger.error(LocalizedMessage.create(
@@ -101,8 +100,8 @@ public class DataSourceFactory {
* @return javax.sql.DataSource
* @throws DataSourceCreateException
*/
- public static ClientConnectionFactoryWrapper getManagedDataSource(Map configMap, List props)
- throws DataSourceCreateException {
+ public static ClientConnectionFactoryWrapper getManagedDataSource(Map configMap,
+ List<ConfigProperty> props) throws DataSourceCreateException {
Object cf = null;
ManagedConnectionFactory mcf = null;
ConfiguredDataSourceProperties configs = createDataSourceProperties(configMap);
@@ -155,7 +154,7 @@ public class DataSourceFactory {
* @throws DataSourceCreateException
* @return ???
*/
- public static DataSource getPooledDataSource(Map configMap, List props)
+ public static DataSource getPooledDataSource(Map configMap, List<ConfigProperty> props)
throws DataSourceCreateException {
ConfiguredDataSourceProperties configs = createDataSourceProperties(configMap);
String connpoolClassName = configs.getConnectionPoolDSClass();
@@ -190,7 +189,7 @@ public class DataSourceFactory {
* @throws DataSourceCreateException
* @return ???
*/
- public static DataSource getTranxDataSource(Map configMap, List props)
+ public static DataSource getTranxDataSource(Map configMap, List<ConfigProperty> props)
throws DataSourceCreateException {
ConfiguredDataSourceProperties configs = createDataSourceProperties(configMap);
String xaClassName = configs.getXADSClass();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java b/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
index 6efb2a8..c51558f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
@@ -22,7 +22,13 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.naming.*;
+import javax.naming.Binding;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.NoInitialContextException;
import javax.transaction.SystemException;
import javax.transaction.TransactionManager;
@@ -32,6 +38,7 @@ import org.apache.geode.i18n.LogWriterI18n;
import org.apache.geode.internal.ClassPathLoader;
import org.apache.geode.internal.datasource.AbstractDataSource;
import org.apache.geode.internal.datasource.ClientConnectionFactoryWrapper;
+import org.apache.geode.internal.datasource.ConfigProperty;
import org.apache.geode.internal.datasource.DataSourceCreateException;
import org.apache.geode.internal.datasource.DataSourceFactory;
import org.apache.geode.internal.i18n.LocalizedStrings;
@@ -310,7 +317,7 @@ public class JNDIInvoker {
*
* @param map contains Datasource configuration properties.
*/
- public static void mapDatasource(Map map, List props) {
+ public static void mapDatasource(Map map, List<ConfigProperty> props) {
String value = (String) map.get("type");
String jndiName = "";
LogWriterI18n writer = TransactionUtils.getLogWriterI18n();
@@ -330,7 +337,7 @@ public class JNDIInvoker {
if (writer.fineEnabled())
writer.fine("Bound java:/" + jndiName + " to Context");
} else if (value.equals("SimpleDataSource")) {
- ds = DataSourceFactory.getSimpleDataSource(map, props);
+ ds = DataSourceFactory.getSimpleDataSource(map);
ctx.rebind("java:/" + jndiName, ds);
dataSourceList.add(ds);
if (writer.fineEnabled())
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand.java
index bccff97..9d6d7da 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand.java
@@ -16,37 +16,27 @@ package org.apache.geode.management.internal.cli.commands;
import static org.apache.geode.management.internal.cli.result.ResultBuilder.buildResult;
-import java.io.IOException;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.Set;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
-
import org.apache.logging.log4j.Logger;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.internal.ClusterConfigurationService;
-import org.apache.geode.internal.datasource.ConfigProperty;
+import org.apache.geode.internal.cache.configuration.CacheConfig;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.cli.CliMetaData;
import org.apache.geode.management.cli.Result;
import org.apache.geode.management.internal.cli.exceptions.EntityExistsException;
import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
import org.apache.geode.management.internal.cli.functions.CreateJndiBindingFunction;
-import org.apache.geode.management.internal.cli.functions.JndiBindingConfiguration;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
import org.apache.geode.management.internal.cli.result.ResultBuilder;
-import org.apache.geode.management.internal.configuration.domain.Configuration;
-import org.apache.geode.management.internal.configuration.utils.XmlUtils;
import org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.ResourcePermission;
@@ -128,48 +118,51 @@ public class CreateJndiBindingCommand extends GfshCommand {
@CliOption(key = MAX_POOL_SIZE, help = MAX_POOL_SIZE__HELP) Integer maxPoolSize,
@CliOption(key = PASSWORD, help = PASSWORD__HELP) String password,
@CliOption(key = TRANSACTION_TYPE, help = TRANSACTION_TYPE__HELP) String transactionType,
- @CliOption(key = TYPE, mandatory = true,
- help = TYPE__HELP) JndiBindingConfiguration.DATASOURCE_TYPE type,
+ @CliOption(key = TYPE, mandatory = true, help = TYPE__HELP) DATASOURCE_TYPE type,
@CliOption(key = USERNAME, help = USERNAME__HELP) String username,
@CliOption(key = XA_DATASOURCE_CLASS, help = XA_DATASOURCE_CLASS__HELP) String xaDataSource,
@CliOption(key = CliStrings.IFNOTEXISTS, help = IFNOTEXISTS__HELP,
specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") boolean ifNotExists,
@CliOption(key = DATASOURCE_CONFIG_PROPERTIES, optionContext = "splittingRegex=,(?![^{]*\\})",
- help = DATASOURCE_CONFIG_PROPERTIES_HELP) ConfigProperty[] dsConfigProperties)
- throws IOException, SAXException, ParserConfigurationException, TransformerException {
+ help = DATASOURCE_CONFIG_PROPERTIES_HELP) JndiBindingsType.JndiBinding.ConfigProperty[] dsConfigProperties) {
- JndiBindingConfiguration configuration = new JndiBindingConfiguration();
- configuration.setBlockingTimeout(blockingTimeout);
- configuration.setConnectionPoolDatasource(connectionPooledDatasource);
+ JndiBindingsType.JndiBinding configuration = new JndiBindingsType.JndiBinding();
+ configuration.setBlockingTimeoutSeconds(Objects.toString(blockingTimeout, null));
+ configuration.setConnPooledDatasourceClass(connectionPooledDatasource);
configuration.setConnectionUrl(connectionUrl);
- configuration.setIdleTimeout(idleTimeout);
- configuration.setInitPoolSize(initPoolSize);
- configuration.setJdbcDriver(jdbcDriver);
+ configuration.setIdleTimeoutSeconds(Objects.toString(idleTimeout, null));
+ configuration.setInitPoolSize(Objects.toString(initPoolSize, null));
+ configuration.setJdbcDriverClass(jdbcDriver);
configuration.setJndiName(jndiName);
- configuration.setLoginTimeout(loginTimeout);
- configuration.setManagedConnFactory(managedConnFactory);
- configuration.setMaxPoolSize(maxPoolSize);
+ configuration.setLoginTimeoutSeconds(Objects.toString(loginTimeout, null));
+ configuration.setManagedConnFactoryClass(managedConnFactory);
+ configuration.setMaxPoolSize(Objects.toString(maxPoolSize, null));
configuration.setPassword(password);
configuration.setTransactionType(transactionType);
- configuration.setType(type);
- configuration.setUsername(username);
- configuration.setXaDatasource(xaDataSource);
+ configuration.setType(type.getType());
+ configuration.setUserName(username);
+ configuration.setXaDatasourceClass(xaDataSource);
if (dsConfigProperties != null && dsConfigProperties.length > 0)
- configuration.setDatasourceConfigurations(Arrays.asList(dsConfigProperties));
+ configuration.getConfigProperty().addAll(Arrays.asList(dsConfigProperties));
Result result;
boolean persisted = false;
ClusterConfigurationService service = getSharedConfiguration();
if (service != null) {
- Element existingBinding =
- service.getXmlElement("cluster", "jndi-binding", "jndi-name", jndiName);
- if (existingBinding != null) {
+ CacheConfig cacheConfig = service.getCacheConfig("cluster");
+ JndiBindingsType.JndiBinding existing =
+ service.findElement(cacheConfig.getJndiBindings(), jndiName);
+ if (existing != null) {
throw new EntityExistsException(
CliStrings.format("Jndi binding with jndi-name \"{0}\" already exists.", jndiName),
ifNotExists);
}
- updateXml(configuration);
+
+ service.updateCacheConfig("cluster", config -> {
+ config.getJndiBindings().add(configuration);
+ return config;
+ });
persisted = true;
}
@@ -193,51 +186,24 @@ public class CreateJndiBindingCommand extends GfshCommand {
return result;
}
- void updateXml(JndiBindingConfiguration configuration)
- throws TransformerException, IOException, SAXException, ParserConfigurationException {
- // cluster group config should always be present
- Configuration config = getSharedConfiguration().getConfiguration("cluster");
-
- Document document = XmlUtils.createDocumentFromXml(config.getCacheXmlContent());
- Node cacheNode = document.getElementsByTagName("cache").item(0);
+ public enum DATASOURCE_TYPE {
+ MANAGED("ManagedDataSource"),
+ SIMPLE("SimpleDataSource"),
+ POOLED("PooledDataSource"),
+ XAPOOLED("XAPooledDataSource");
- NodeList jndiBindingsNode = document.getElementsByTagName("jndi-bindings");
+ private final String type;
- if (jndiBindingsNode == null || jndiBindingsNode.getLength() == 0) {
- Element jndiBindings = document.createElement("jndi-bindings");
- cacheNode.appendChild(jndiBindings);
+ DATASOURCE_TYPE(String type) {
+ this.type = type;
}
- Element jndiBinding = document.createElement("jndi-binding");
- jndiBindingsNode.item(0).appendChild(jndiBinding);
-
- for (Object key : configuration.getParamsAsMap().keySet()) {
- if (configuration.getParamsAsMap().get(key) != null)
- jndiBinding.setAttribute(key.toString(),
- configuration.getParamsAsMap().get(key).toString());
+ public String getType() {
+ return this.type;
}
- for (ConfigProperty configProperty : configuration.getDatasourceConfigurations()) {
- Element configPropertyElement = document.createElement("config-property");
- jndiBinding.appendChild(configPropertyElement);
-
- Node configPropertyName = document.createElement("config-property-name");
- configPropertyName.setTextContent(configProperty.getName());
-
- Node configPropertyType = document.createElement("config-property-type");
- configPropertyType.setTextContent(configProperty.getType());
-
- Node configPropertyValue = document.createElement("config-property-value");
- configPropertyValue.setTextContent(configProperty.getValue());
-
- configPropertyElement.appendChild(configPropertyName);
- configPropertyElement.appendChild(configPropertyType);
- configPropertyElement.appendChild(configPropertyValue);
+ public String getName() {
+ return name();
}
-
- String newXml = XmlUtils.prettyXml(document.getFirstChild());
- config.setCacheXmlContent(newXml);
-
- getSharedConfiguration().getConfigurationRegion().put("cluster", config);
}
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommand.java
index ab9b8b7..dd62e58 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommand.java
@@ -25,13 +25,11 @@ import javax.xml.transform.TransformerException;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.internal.ClusterConfigurationService;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.management.cli.CliMetaData;
import org.apache.geode.management.cli.Result;
import org.apache.geode.management.internal.cli.exceptions.EntityNotFoundException;
@@ -39,8 +37,6 @@ import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
import org.apache.geode.management.internal.cli.functions.DestroyJndiBindingFunction;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
import org.apache.geode.management.internal.cli.result.ResultBuilder;
-import org.apache.geode.management.internal.configuration.domain.Configuration;
-import org.apache.geode.management.internal.configuration.utils.XmlUtils;
import org.apache.geode.management.internal.security.ResourceOperation;
import org.apache.geode.security.ResourcePermission;
@@ -67,14 +63,17 @@ public class DestroyJndiBindingCommand extends GfshCommand {
boolean persisted = false;
ClusterConfigurationService service = getSharedConfiguration();
if (service != null) {
- Element existingBinding =
- service.getXmlElement("cluster", "jndi-binding", "jndi-name", jndiName);
- if (existingBinding == null) {
- throw new EntityNotFoundException(
- CliStrings.format("Jndi binding with jndi-name \"{0}\" does not exist.", jndiName),
- ifExists);
- }
- removeJndiBindingFromXml(jndiName);
+ service.updateCacheConfig("cluster", cc -> {
+ List<JndiBindingsType.JndiBinding> bindings = cc.getJndiBindings();
+ JndiBindingsType.JndiBinding binding = service.findElement(bindings, jndiName);
+ if (binding == null) {
+ throw new EntityNotFoundException(
+ CliStrings.format("Jndi binding with jndi-name \"{0}\" does not exist.", jndiName),
+ ifExists);
+ }
+ bindings.remove(binding);
+ return cc;
+ });
persisted = true;
}
@@ -95,31 +94,4 @@ public class DestroyJndiBindingCommand extends GfshCommand {
result.setCommandPersisted(persisted);
return result;
}
-
- void removeJndiBindingFromXml(String jndiName)
- throws TransformerException, IOException, SAXException, ParserConfigurationException {
- // cluster group config should always be present
- Configuration config = getSharedConfiguration().getConfiguration("cluster");
-
- Document document = XmlUtils.createDocumentFromXml(config.getCacheXmlContent());
- NodeList jndiBindings = document.getElementsByTagName("jndi-binding");
-
- boolean updatedXml = false;
- if (jndiBindings != null && jndiBindings.getLength() > 0) {
- for (int i = 0; i < jndiBindings.getLength(); i++) {
- Element eachBinding = (Element) jndiBindings.item(i);
- if (eachBinding.getAttribute("jndi-name").equals(jndiName)) {
- eachBinding.getParentNode().removeChild(eachBinding);
- updatedXml = true;
- }
- }
- }
-
- if (updatedXml) {
- String newXml = XmlUtils.prettyXml(document.getFirstChild());
- config.setCacheXmlContent(newXml);
-
- getSharedConfiguration().getConfigurationRegion().put("cluster", config);
- }
- }
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverter.java
index 1f8219c..3a86580 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverter.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverter.java
@@ -23,13 +23,14 @@ import org.springframework.shell.core.Completion;
import org.springframework.shell.core.Converter;
import org.springframework.shell.core.MethodTarget;
-import org.apache.geode.internal.datasource.ConfigProperty;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
/***
* Added converter to enable auto-completion for index-type
*
*/
-public class ConfigPropertyConverter implements Converter<ConfigProperty> {
+public class ConfigPropertyConverter
+ implements Converter<JndiBindingsType.JndiBinding.ConfigProperty> {
private static ObjectMapper mapper = new ObjectMapper();
static {
@@ -38,13 +39,14 @@ public class ConfigPropertyConverter implements Converter<ConfigProperty> {
@Override
public boolean supports(Class<?> type, String optionContext) {
- return ConfigProperty.class.isAssignableFrom(type);
+ return JndiBindingsType.JndiBinding.ConfigProperty.class.isAssignableFrom(type);
}
@Override
- public ConfigProperty convertFromText(String value, Class<?> targetType, String optionContext) {
+ public JndiBindingsType.JndiBinding.ConfigProperty convertFromText(String value,
+ Class<?> targetType, String optionContext) {
try {
- return mapper.readValue(value, ConfigProperty.class);
+ return mapper.readValue(value, JndiBindingsType.JndiBinding.ConfigProperty.class);
} catch (IOException e) {
throw new IllegalArgumentException("invalid json: " + value);
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunction.java
index 133acf7..1e7302e 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunction.java
@@ -14,25 +14,63 @@
*/
package org.apache.geode.management.internal.cli.functions;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.cache.execute.ResultSender;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.internal.cache.execute.InternalFunction;
+import org.apache.geode.internal.datasource.ConfigProperty;
import org.apache.geode.internal.jndi.JNDIInvoker;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
-public class CreateJndiBindingFunction implements InternalFunction<JndiBindingConfiguration> {
+public class CreateJndiBindingFunction implements InternalFunction<JndiBindingsType.JndiBinding> {
static final String RESULT_MESSAGE =
"Initiated jndi binding \"{0}\" on \"{1}\". See server logs to verify.";
@Override
- public void execute(FunctionContext<JndiBindingConfiguration> context) {
+ public void execute(FunctionContext<JndiBindingsType.JndiBinding> context) {
ResultSender<Object> resultSender = context.getResultSender();
- JndiBindingConfiguration configuration = context.getArguments();
- JNDIInvoker.mapDatasource(configuration.getParamsAsMap(),
- configuration.getDatasourceConfigurations());
+ JndiBindingsType.JndiBinding configuration = context.getArguments();
+ JNDIInvoker.mapDatasource(getParamsAsMap(configuration),
+ convert(configuration.getConfigProperty()));
resultSender.lastResult(new CliFunctionResult(context.getMemberName(), true,
CliStrings.format(RESULT_MESSAGE, configuration.getJndiName(), context.getMemberName())));
}
+
+ static Map getParamsAsMap(JndiBindingsType.JndiBinding binding) {
+ Map params = new HashMap();
+ params.put("blocking-timeout-seconds", binding.getBlockingTimeoutSeconds());
+ params.put("conn-pooled-datasource-class", binding.getConnPooledDatasourceClass());
+ params.put("connection-url", binding.getConnectionUrl());
+ params.put("idle-timeout-seconds", binding.getIdleTimeoutSeconds());
+ params.put("init-pool-size", binding.getInitPoolSize());
+ params.put("jdbc-driver-class", binding.getJdbcDriverClass());
+ params.put("jndi-name", binding.getJndiName());
+ params.put("login-timeout-seconds", binding.getLoginTimeoutSeconds());
+ params.put("managed-conn-factory-class", binding.getManagedConnFactoryClass());
+ params.put("max-pool-size", binding.getMaxPoolSize());
+ params.put("password", binding.getPassword());
+ params.put("transaction-type", binding.getTransactionType());
+ params.put("type", binding.getType());
+ params.put("user-name", binding.getUserName());
+ params.put("xa-datasource-class", binding.getXaDatasourceClass());
+ return params;
+ }
+
+ static List<ConfigProperty> convert(
+ List<JndiBindingsType.JndiBinding.ConfigProperty> properties) {
+ return properties.stream().map(p -> {
+ ConfigProperty prop = new ConfigProperty();
+ prop.setName(p.getName());
+ prop.setType(p.getType());
+ prop.setValue(p.getValue());
+ return prop;
+ }).collect(Collectors.toList());
+ }
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/JndiBindingConfiguration.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/JndiBindingConfiguration.java
deleted file mode 100644
index 316ca74..0000000
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/JndiBindingConfiguration.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You 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.apache.geode.management.internal.cli.functions;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.geode.internal.datasource.ConfigProperty;
-
-public class JndiBindingConfiguration implements Serializable {
-
- public enum DATASOURCE_TYPE {
- MANAGED("ManagedDataSource"),
- SIMPLE("SimpleDataSource"),
- POOLED("PooledDataSource"),
- XAPOOLED("XAPooledDataSource");
-
- private final String type;
-
- DATASOURCE_TYPE(String type) {
- this.type = type;
- }
-
- public String getType() {
- return this.type;
- }
-
- public String getName() {
- return name();
- }
- }
-
- private Integer blockingTimeout;
- private String connectionPoolDatasource;
- private String connectionUrl;
- private Integer idleTimeout;
- private Integer initPoolSize;
- private String jdbcDriver;
- private String jndiName;
- private Integer loginTimeout;
- private String managedConnFactory;
- private Integer maxPoolSize;
- private String password;
- private String transactionType;
- private DATASOURCE_TYPE type;
- private String username;
- private String xaDatasource;
-
- private List<ConfigProperty> datasourceConfigurations;
-
- public JndiBindingConfiguration() {
- datasourceConfigurations = new ArrayList<>();
- }
-
- public Integer getBlockingTimeout() {
- return blockingTimeout;
- }
-
- public void setBlockingTimeout(Integer blockingTimeout) {
- this.blockingTimeout = blockingTimeout;
- }
-
- public String getConnectionPoolDatasource() {
- return connectionPoolDatasource;
- }
-
- public void setConnectionPoolDatasource(String connectionPoolDatasource) {
- this.connectionPoolDatasource = connectionPoolDatasource;
- }
-
- public String getConnectionUrl() {
- return connectionUrl;
- }
-
- public void setConnectionUrl(String connectionUrl) {
- this.connectionUrl = connectionUrl;
- }
-
- public Integer getIdleTimeout() {
- return idleTimeout;
- }
-
- public void setIdleTimeout(Integer idleTimeout) {
- this.idleTimeout = idleTimeout;
- }
-
- public Integer getInitPoolSize() {
- return initPoolSize;
- }
-
- public void setInitPoolSize(Integer initPoolSize) {
- this.initPoolSize = initPoolSize;
- }
-
- public String getJdbcDriver() {
- return jdbcDriver;
- }
-
- public void setJdbcDriver(String jdbcDriver) {
- this.jdbcDriver = jdbcDriver;
- }
-
- public String getJndiName() {
- return jndiName;
- }
-
- public void setJndiName(String jndiName) {
- this.jndiName = jndiName;
- }
-
- public Integer getLoginTimeout() {
- return loginTimeout;
- }
-
- public void setLoginTimeout(Integer loginTimeout) {
- this.loginTimeout = loginTimeout;
- }
-
- public String getManagedConnFactory() {
- return managedConnFactory;
- }
-
- public void setManagedConnFactory(String managedConnFactory) {
- this.managedConnFactory = managedConnFactory;
- }
-
- public Integer getMaxPoolSize() {
- return maxPoolSize;
- }
-
- public void setMaxPoolSize(Integer maxPoolSize) {
- this.maxPoolSize = maxPoolSize;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public String getTransactionType() {
- return transactionType;
- }
-
- public void setTransactionType(String transactionType) {
- this.transactionType = transactionType;
- }
-
- public DATASOURCE_TYPE getType() {
- return type;
- }
-
- public void setType(DATASOURCE_TYPE type) {
- this.type = type;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getXaDatasource() {
- return xaDatasource;
- }
-
- public void setXaDatasource(String xaDatasource) {
- this.xaDatasource = xaDatasource;
- }
-
- public List<ConfigProperty> getDatasourceConfigurations() {
- return datasourceConfigurations;
- }
-
- public void setDatasourceConfigurations(List<ConfigProperty> dsConfigurations) {
- this.datasourceConfigurations = dsConfigurations;
- }
-
- public Map getParamsAsMap() {
- Map params = new HashMap();
- params.put("blocking-timeout-seconds", getBlockingTimeout());
- params.put("conn-pooled-datasource-class", getConnectionPoolDatasource());
- params.put("connection-url", getConnectionUrl());
- params.put("idle-timeout-seconds", getIdleTimeout());
- params.put("init-pool-size", getInitPoolSize());
- params.put("jdbc-driver-class", getJdbcDriver());
- params.put("jndi-name", getJndiName());
- params.put("login-timeout-seconds", getLoginTimeout());
- params.put("managed-conn-factory-class", getManagedConnFactory());
- params.put("max-pool-size", getMaxPoolSize());
- params.put("password", getPassword());
- params.put("transaction-type", getTransactionType());
- params.put("type", getType().getType());
- params.put("user-name", getUsername());
- params.put("xa-datasource-class", getXaDatasource());
- return params;
- }
-}
diff --git a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
index 8a6410e..ea35091 100644
--- a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
+++ b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
@@ -293,6 +293,7 @@ org/apache/geode/internal/cache/TXCommitMessage$CommitExceptionCollectingExcepti
org/apache/geode/internal/cache/TXCommitMessage$RegionCommitList,true,-8910813949027683641
org/apache/geode/internal/cache/configuration/EnumActionDestroyOverflow,false,value:java/lang/String
org/apache/geode/internal/cache/configuration/EnumReadableWritable,false,value:java/lang/String
+org/apache/geode/internal/cache/configuration/JndiBindingsType$JndiBinding,false,blockingTimeoutSeconds:java/lang/String,configProperty:java/util/List,connPooledDatasourceClass:java/lang/String,connectionUrl:java/lang/String,idleTimeoutSeconds:java/lang/String,initPoolSize:java/lang/String,jdbcDriverClass:java/lang/String,jndiName:java/lang/String,loginTimeoutSeconds:java/lang/String,managedConnFactoryClass:java/lang/String,maxPoolSize:java/lang/String,password:java/lang/String,transacti [...]
org/apache/geode/internal/cache/configuration/RegionAttributesDataPolicy,false,value:java/lang/String
org/apache/geode/internal/cache/configuration/RegionAttributesIndexUpdateType,false,value:java/lang/String
org/apache/geode/internal/cache/configuration/RegionAttributesMirrorType,false,value:java/lang/String
@@ -479,6 +480,7 @@ org/apache/geode/management/internal/beans/QueryDataFunction$QueryDataFunctionRe
org/apache/geode/management/internal/beans/stats/StatType,false
org/apache/geode/management/internal/cli/AbstractCliAroundInterceptor$Response,false,text:java/lang/String
org/apache/geode/management/internal/cli/CliUtil$DeflaterInflaterData,true,1104813333595216795,data:byte[],dataLength:int
+org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand$DATASOURCE_TYPE,false,type:java/lang/String
org/apache/geode/management/internal/cli/domain/AsyncEventQueueDetails,true,1,batchSize:int,diskStoreName:java/lang/String,id:java/lang/String,listener:java/lang/String,listenerProperties:java/util/Properties,maxQueueMemory:int,persistent:boolean
org/apache/geode/management/internal/cli/domain/CacheServerInfo,true,1,bindAddress:java/lang/String,isRunning:boolean,port:int
org/apache/geode/management/internal/cli/domain/ClassName,true,1,className:java/lang/String,initProperties:java/util/Properties
@@ -551,8 +553,6 @@ org/apache/geode/management/internal/cli/functions/GetRegionsFunction,true,1
org/apache/geode/management/internal/cli/functions/GetStackTracesFunction,true,1
org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction,true,1
org/apache/geode/management/internal/cli/functions/ImportDataFunction,true,1
-org/apache/geode/management/internal/cli/functions/JndiBindingConfiguration,false,blockingTimeout:java/lang/Integer,connectionPoolDatasource:java/lang/String,connectionUrl:java/lang/String,datasourceConfigurations:java/util/List,idleTimeout:java/lang/Integer,initPoolSize:java/lang/Integer,jdbcDriver:java/lang/String,jndiName:java/lang/String,loginTimeout:java/lang/Integer,managedConnFactory:java/lang/String,maxPoolSize:java/lang/Integer,password:java/lang/String,transactionType:java/lang [...]
-org/apache/geode/management/internal/cli/functions/JndiBindingConfiguration$DATASOURCE_TYPE,false,type:java/lang/String
org/apache/geode/management/internal/cli/functions/ListAsyncEventQueuesFunction,true,1
org/apache/geode/management/internal/cli/functions/ListDeployedFunction,true,1
org/apache/geode/management/internal/cli/functions/ListDiskStoresFunction,false
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalClusterConfigurationServiceTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalClusterConfigurationServiceTest.java
index a409885..df8cf9b 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalClusterConfigurationServiceTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalClusterConfigurationServiceTest.java
@@ -26,9 +26,7 @@ import static org.mockito.Mockito.spy;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlType;
import org.junit.Before;
@@ -40,7 +38,6 @@ import org.apache.geode.internal.cache.configuration.CacheConfig;
import org.apache.geode.internal.cache.configuration.CacheElement;
import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.internal.cache.configuration.RegionConfig;
-import org.apache.geode.internal.cache.configuration.RegionElement;
import org.apache.geode.management.internal.configuration.domain.Configuration;
import org.apache.geode.test.junit.categories.UnitTest;
@@ -151,19 +148,23 @@ public class InternalClusterConfigurationServiceTest {
jndiBinding.setJndiName("jndiOne");
jndiBinding.setJdbcDriverClass("com.sun.ABC");
jndiBinding.setType("SimpleDataSource");
+ jndiBinding.getConfigProperty()
+ .add(new JndiBindingsType.JndiBinding.ConfigProperty("test", "test", "test"));
cacheConfig.getJndiBindings().add(jndiBinding);
return cacheConfig;
});
assertThat(configuration.getCacheXmlContent()).containsOnlyOnce("</jndi-bindings>");
assertThat(configuration.getCacheXmlContent()).contains(
- "<jndi-binding jdbc-driver-class=\"com.sun.ABC\" jndi-name=\"jndiOne\" type=\"SimpleDataSource\"/>");
+ "<jndi-binding jdbc-driver-class=\"com.sun.ABC\" jndi-name=\"jndiOne\" type=\"SimpleDataSource\">");
+ assertThat(configuration.getCacheXmlContent())
+ .contains("config-property-name>test</config-property-name>");
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"id", "value"})
@XmlRootElement(name = "custom-one", namespace = "http://geode.apache.org/schema/CustomOne")
- public static class ElementOne implements CacheElement, RegionElement {
+ public static class ElementOne implements CacheElement {
private String id;
private String value;
@@ -193,7 +194,7 @@ public class InternalClusterConfigurationServiceTest {
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"id", "value"})
@XmlRootElement(name = "custom-two", namespace = "http://geode.apache.org/schema/CustomTwo")
- public static class ElementTwo implements CacheElement, RegionElement {
+ public static class ElementTwo implements CacheElement {
private String id;
private String value;
diff --git a/geode-core/src/test/java/org/apache/geode/internal/datasource/AbstractPoolCacheJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/datasource/AbstractPoolCacheJUnitTest.java
index 7c8dfa4..ce41b9e 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/datasource/AbstractPoolCacheJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/datasource/AbstractPoolCacheJUnitTest.java
@@ -19,8 +19,12 @@
*/
package org.apache.geode.internal.datasource;
-import static org.apache.geode.distributed.ConfigurationProperties.*;
-import static org.junit.Assert.*;
+import static org.apache.geode.distributed.ConfigurationProperties.CACHE_XML_FILE;
+import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
+import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
+import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
import java.sql.Connection;
import java.util.ArrayList;
@@ -171,7 +175,7 @@ public class AbstractPoolCacheJUnitTest {
props.add(new ConfigProperty("databaseName", "newDB", "java.lang.String"));
GemFireBasicDataSource gbds =
- (GemFireBasicDataSource) DataSourceFactory.getSimpleDataSource(map, props);
+ (GemFireBasicDataSource) DataSourceFactory.getSimpleDataSource(map);
map.put("xa-datasource-class", "org.apache.derby.jdbc.EmbeddedXADataSource");
map.put("connection-url", "jdbc:derby:newDB;create=true");
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandTest.java
index f8401f1..19b3854 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommandTest.java
@@ -16,7 +16,6 @@ package org.apache.geode.management.internal.cli.commands;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@@ -25,7 +24,6 @@ import static org.mockito.Mockito.verify;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -39,22 +37,16 @@ import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.mockito.ArgumentCaptor;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
import org.xml.sax.SAXException;
-import org.apache.geode.cache.Region;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.internal.ClusterConfigurationService;
import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.datasource.ConfigProperty;
+import org.apache.geode.internal.cache.configuration.CacheConfig;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.management.internal.cli.GfshParseResult;
import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
import org.apache.geode.management.internal.cli.functions.CreateJndiBindingFunction;
-import org.apache.geode.management.internal.cli.functions.JndiBindingConfiguration;
-import org.apache.geode.management.internal.configuration.domain.Configuration;
-import org.apache.geode.management.internal.configuration.utils.XmlUtils;
import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -95,8 +87,9 @@ public class CreateJndiBindingCommandTest {
+ " --type=SIMPLE --name=name --jdbc-driver-class=driver --connection-url=url "
+ "--datasource-config-properties={'name':'name1','type':'type1','value':'value1'},{'name':'name2','type':'type2','value':'value2'}");
- ConfigProperty[] configProperties =
- (ConfigProperty[]) result.getParamValue("datasource-config-properties");
+ JndiBindingsType.JndiBinding.ConfigProperty[] configProperties =
+ (JndiBindingsType.JndiBinding.ConfigProperty[]) result
+ .getParamValue("datasource-config-properties");
assertThat(configProperties).hasSize(2);
assertThat(configProperties[0].getValue()).isEqualTo("value1");
assertThat(configProperties[1].getValue()).isEqualTo("value2");
@@ -106,10 +99,12 @@ public class CreateJndiBindingCommandTest {
public void returnsErrorIfBindingAlreadyExistsAndIfUnspecified()
throws ParserConfigurationException, SAXException, IOException {
ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Element existingBinding = mock(Element.class);
+ CacheConfig cacheConfig = mock(CacheConfig.class);
+ JndiBindingsType.JndiBinding existingBinding = mock(JndiBindingsType.JndiBinding.class);
doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doReturn(existingBinding).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
+ doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
+ doReturn(existingBinding).when(clusterConfigService).findElement(any(), any());
gfsh.executeAndAssertThat(command,
COMMAND + " --type=SIMPLE --name=name --jdbc-driver-class=driver --connection-url=url")
@@ -120,10 +115,12 @@ public class CreateJndiBindingCommandTest {
public void skipsIfBindingAlreadyExistsAndIfSpecified()
throws ParserConfigurationException, SAXException, IOException {
ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Element existingBinding = mock(Element.class);
+ CacheConfig cacheConfig = mock(CacheConfig.class);
+ JndiBindingsType.JndiBinding existingBinding = mock(JndiBindingsType.JndiBinding.class);
doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doReturn(existingBinding).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
+ doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
+ doReturn(existingBinding).when(clusterConfigService).findElement(any(), any());
gfsh.executeAndAssertThat(command,
COMMAND
@@ -135,10 +132,12 @@ public class CreateJndiBindingCommandTest {
public void skipsIfBindingAlreadyExistsAndIfSpecifiedTrue()
throws ParserConfigurationException, SAXException, IOException {
ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Element existingBinding = mock(Element.class);
+ CacheConfig cacheConfig = mock(CacheConfig.class);
+ JndiBindingsType.JndiBinding existingBinding = mock(JndiBindingsType.JndiBinding.class);
doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doReturn(existingBinding).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
+ doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
+ doReturn(existingBinding).when(clusterConfigService).findElement(any(), any());
gfsh.executeAndAssertThat(command,
COMMAND
@@ -147,13 +146,14 @@ public class CreateJndiBindingCommandTest {
}
@Test
- public void returnsErrorIfBindingAlreadyExistsAndIfSpecifiedFalse()
- throws ParserConfigurationException, SAXException, IOException {
+ public void returnsErrorIfBindingAlreadyExistsAndIfSpecifiedFalse() {
ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Element existingBinding = mock(Element.class);
+ CacheConfig cacheConfig = mock(CacheConfig.class);
+ JndiBindingsType.JndiBinding existingBinding = mock(JndiBindingsType.JndiBinding.class);
doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doReturn(existingBinding).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
+ doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
+ doReturn(existingBinding).when(clusterConfigService).findElement(any(), any());
gfsh.executeAndAssertThat(command,
COMMAND
@@ -162,87 +162,10 @@ public class CreateJndiBindingCommandTest {
}
@Test
- public void updateXmlShouldClusterConfigurationWithJndiConfiguration()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
- Configuration clusterConfig = new Configuration("cluster");
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Region configRegion = mock(Region.class);
-
- doReturn(configRegion).when(clusterConfigService).getConfigurationRegion();
- doReturn(null).when(configRegion).put(any(), any());
- doReturn(clusterConfig).when(clusterConfigService).getConfiguration("cluster");
- doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
-
- JndiBindingConfiguration jndi = new JndiBindingConfiguration();
- jndi.setBlockingTimeout(60);
- jndi.setConnectionUrl("URL");
- jndi.setConnectionPoolDatasource("org.datasource");
- jndi.setMaxPoolSize(10);
- jndi.setManagedConnFactory("connFactory");
- jndi.setLoginTimeout(100);
- jndi.setJndiName("jndi1");
- jndi.setJdbcDriver("driver");
- jndi.setUsername("user1");
- jndi.setIdleTimeout(50);
- jndi.setInitPoolSize(5);
- jndi.setPassword("p@ssw0rd");
- jndi.setTransactionType("txntype");
- jndi.setType(JndiBindingConfiguration.DATASOURCE_TYPE.SIMPLE);
- jndi.setXaDatasource("xaDS");
- ConfigProperty prop = new ConfigProperty("somename", "somevalue", "sometype");
- jndi.setDatasourceConfigurations(Arrays.asList(new ConfigProperty[] {prop}));
- command.updateXml(jndi);
-
- Document document = XmlUtils.createDocumentFromXml(clusterConfig.getCacheXmlContent());
- assertThat(document).isNotNull();
- assertThat(document.getElementsByTagName("jndi-bindings").item(0)).isNotNull();
- Element jndiElement = (Element) document.getElementsByTagName("jndi-binding").item(0);
- assertThat(jndiElement).isNotNull();
- assertThat(jndiElement.getParentNode().getNodeName()).isEqualTo("jndi-bindings");
- assertThat(jndiElement.getAttribute("blocking-timeout-seconds")).isEqualTo("60");
- assertThat(jndiElement.getAttribute("conn-pooled-datasource-class"))
- .isEqualTo("org.datasource");
- assertThat(jndiElement.getAttribute("connection-url")).isEqualTo("URL");
- assertThat(jndiElement.getAttribute("idle-timeout-seconds")).isEqualTo("50");
- assertThat(jndiElement.getAttribute("init-pool-size")).isEqualTo("5");
- assertThat(jndiElement.getAttribute("jdbc-driver-class")).isEqualTo("driver");
- assertThat(jndiElement.getAttribute("jndi-name")).isEqualTo("jndi1");
- assertThat(jndiElement.getAttribute("login-timeout-seconds")).isEqualTo("100");
- assertThat(jndiElement.getAttribute("managed-conn-factory-class")).isEqualTo("connFactory");
- assertThat(jndiElement.getAttribute("max-pool-size")).isEqualTo("10");
- assertThat(jndiElement.getAttribute("password")).isEqualTo("p@ssw0rd");
- assertThat(jndiElement.getAttribute("transaction-type")).isEqualTo("txntype");
- assertThat(jndiElement.getAttribute("type")).isEqualTo("SimpleDataSource");
- assertThat(jndiElement.getAttribute("user-name")).isEqualTo("user1");
- assertThat(jndiElement.getAttribute("xa-datasource-class")).isEqualTo("xaDS");
-
- Node configProperty = document.getElementsByTagName("config-property").item(0);
- assertThat(configProperty.getParentNode().getNodeName()).isEqualTo("jndi-binding");
-
- Node nameProperty = document.getElementsByTagName("config-property-name").item(0);
- assertThat(nameProperty).isNotNull();
- assertThat(nameProperty.getParentNode().getNodeName()).isEqualTo("config-property");
- assertThat(nameProperty.getTextContent()).isEqualTo("somename");
- Node typeProperty = document.getElementsByTagName("config-property-type").item(0);
- assertThat(typeProperty).isNotNull();
- assertThat(nameProperty.getParentNode().getNodeName()).isEqualTo("config-property");
- assertThat(typeProperty.getTextContent()).isEqualTo("sometype");
- Node valueProperty = document.getElementsByTagName("config-property-value").item(0);
- assertThat(valueProperty).isNotNull();
- assertThat(nameProperty.getParentNode().getNodeName()).isEqualTo("config-property");
- assertThat(valueProperty.getTextContent()).isEqualTo("somevalue");
-
- verify(configRegion, times(1)).put("cluster", clusterConfig);
- }
-
- @Test
- public void whenNoMembersFoundAndNoClusterConfigServiceRunningThenError()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
+ public void whenNoMembersFoundAndNoClusterConfigServiceRunningThenError() {
doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
doReturn(null).when(command).getSharedConfiguration();
- doNothing().when(command).updateXml(any());
gfsh.executeAndAssertThat(command,
COMMAND + " --type=SIMPLE --name=name --jdbc-driver-class=driver --connection-url=url")
@@ -250,14 +173,14 @@ public class CreateJndiBindingCommandTest {
}
@Test
- public void whenNoMembersFoundAndClusterConfigRunningThenUpdateClusterConfig()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
+ public void whenNoMembersFoundAndClusterConfigRunningThenUpdateClusterConfig() {
ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
+ CacheConfig cacheConfig = mock(CacheConfig.class);
doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
- doReturn(null).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doNothing().when(command).updateXml(any());
+ doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
+ doReturn(null).when(clusterConfigService).findElement(any(), any());
gfsh.executeAndAssertThat(command,
COMMAND + " --type=SIMPLE --name=name --jdbc-driver-class=driver --connection-url=url")
@@ -266,12 +189,11 @@ public class CreateJndiBindingCommandTest {
"No members found. Cluster configuration is updated with jndi-binding \\\"name\\\".")
.hasNoFailToPersistError();
- verify(command, times(1)).updateXml(any());
+ verify(clusterConfigService).updateCacheConfig(any(), any());
}
@Test
- public void whenMembersFoundAndNoClusterConfigRunningThenOnlyInvokeFunction()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
+ public void whenMembersFoundAndNoClusterConfigRunningThenOnlyInvokeFunction() {
Set<DistributedMember> members = new HashSet<>();
members.add(mock(DistributedMember.class));
@@ -291,12 +213,10 @@ public class CreateJndiBindingCommandTest {
.tableHasColumnOnlyWithValues("Status",
"Tried creating jndi binding \"name\" on \"server1\"");
- verify(command, times(0)).updateXml(any());
-
ArgumentCaptor<CreateJndiBindingFunction> function =
ArgumentCaptor.forClass(CreateJndiBindingFunction.class);
- ArgumentCaptor<JndiBindingConfiguration> jndiConfig =
- ArgumentCaptor.forClass(JndiBindingConfiguration.class);
+ ArgumentCaptor<JndiBindingsType.JndiBinding> jndiConfig =
+ ArgumentCaptor.forClass(JndiBindingsType.JndiBinding.class);
ArgumentCaptor<Set<DistributedMember>> targetMembers = ArgumentCaptor.forClass(Set.class);
verify(command, times(1)).executeAndGetFunctionResult(function.capture(), jndiConfig.capture(),
targetMembers.capture());
@@ -304,8 +224,7 @@ public class CreateJndiBindingCommandTest {
assertThat(function.getValue()).isInstanceOf(CreateJndiBindingFunction.class);
assertThat(jndiConfig.getValue()).isNotNull();
assertThat(jndiConfig.getValue().getJndiName()).isEqualTo("name");
- assertThat(jndiConfig.getValue().getDatasourceConfigurations().get(0).getName())
- .isEqualTo("name1");
+ assertThat(jndiConfig.getValue().getConfigProperty().get(0).getName()).isEqualTo("name1");
assertThat(targetMembers.getValue()).isEqualTo(members);
}
@@ -320,12 +239,13 @@ public class CreateJndiBindingCommandTest {
List<CliFunctionResult> results = new ArrayList<>();
results.add(result);
ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
+ CacheConfig cacheConfig = mock(CacheConfig.class);
doReturn(members).when(command).findMembers(any(), any());
- doReturn(null).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doNothing().when(command).updateXml(any());
doReturn(results).when(command).executeAndGetFunctionResult(any(), any(), any());
+ doReturn(cacheConfig).when(clusterConfigService).getCacheConfig(any());
+ doReturn(null).when(clusterConfigService).findElement(any(), any());
gfsh.executeAndAssertThat(command,
COMMAND
@@ -334,12 +254,12 @@ public class CreateJndiBindingCommandTest {
.tableHasColumnOnlyWithValues("Status",
"Tried creating jndi binding \"name\" on \"server1\"");
- verify(command, times(1)).updateXml(any());
+ verify(clusterConfigService).updateCacheConfig(any(), any());
ArgumentCaptor<CreateJndiBindingFunction> function =
ArgumentCaptor.forClass(CreateJndiBindingFunction.class);
- ArgumentCaptor<JndiBindingConfiguration> jndiConfig =
- ArgumentCaptor.forClass(JndiBindingConfiguration.class);
+ ArgumentCaptor<JndiBindingsType.JndiBinding> jndiConfig =
+ ArgumentCaptor.forClass(JndiBindingsType.JndiBinding.class);
ArgumentCaptor<Set<DistributedMember>> targetMembers = ArgumentCaptor.forClass(Set.class);
verify(command, times(1)).executeAndGetFunctionResult(function.capture(), jndiConfig.capture(),
targetMembers.capture());
@@ -347,8 +267,7 @@ public class CreateJndiBindingCommandTest {
assertThat(function.getValue()).isInstanceOf(CreateJndiBindingFunction.class);
assertThat(jndiConfig.getValue()).isNotNull();
assertThat(jndiConfig.getValue().getJndiName()).isEqualTo("name");
- assertThat(jndiConfig.getValue().getDatasourceConfigurations().get(0).getName())
- .isEqualTo("name1");
+ assertThat(jndiConfig.getValue().getConfigProperty().get(0).getName()).isEqualTo("name1");
assertThat(targetMembers.getValue()).isEqualTo(members);
}
}
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandTest.java
index faae121..f95df2e 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DestroyJndiBindingCommandTest.java
@@ -16,46 +16,36 @@ package org.apache.geode.management.internal.cli.commands;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
-import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
-
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.mockito.ArgumentCaptor;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
import org.apache.geode.cache.Region;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.internal.ClusterConfigurationService;
import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.datasource.ConfigProperty;
-import org.apache.geode.management.internal.cli.GfshParseResult;
+import org.apache.geode.internal.cache.configuration.CacheConfig;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
import org.apache.geode.management.internal.cli.functions.CreateJndiBindingFunction;
import org.apache.geode.management.internal.cli.functions.DestroyJndiBindingFunction;
-import org.apache.geode.management.internal.cli.functions.JndiBindingConfiguration;
import org.apache.geode.management.internal.configuration.domain.Configuration;
-import org.apache.geode.management.internal.configuration.utils.XmlUtils;
import org.apache.geode.test.junit.categories.UnitTest;
import org.apache.geode.test.junit.rules.GfshParserRule;
@@ -67,6 +57,8 @@ public class DestroyJndiBindingCommandTest {
private DestroyJndiBindingCommand command;
private InternalCache cache;
+ private CacheConfig cacheConfig;
+ private ClusterConfigurationService ccService;
private static String COMMAND = "destroy jndi-binding ";
@@ -75,6 +67,13 @@ public class DestroyJndiBindingCommandTest {
cache = mock(InternalCache.class);
command = spy(DestroyJndiBindingCommand.class);
doReturn(cache).when(command).getCache();
+ cacheConfig = mock(CacheConfig.class);
+ ccService = mock(ClusterConfigurationService.class);
+ doReturn(ccService).when(command).getSharedConfiguration();
+ when(ccService.getCacheConfig(any())).thenReturn(cacheConfig);
+ doCallRealMethod().when(ccService).updateCacheConfig(any(), any());
+ when(ccService.getConfigurationRegion()).thenReturn(mock(Region.class));
+ when(ccService.getConfiguration(any())).thenReturn(mock(Configuration.class));
}
@Test
@@ -83,126 +82,57 @@ public class DestroyJndiBindingCommandTest {
}
@Test
- public void returnsErrorIfBindingDoesNotExistAndIfExistsUnspecified()
- throws ParserConfigurationException, SAXException, IOException {
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doReturn(null).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
+ public void returnsErrorIfBindingDoesNotExistAndIfExistsUnspecified() {
+ when(ccService.findElement(any(), any())).thenReturn(null);
gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsError()
.containsOutput("does not exist.");
}
@Test
- public void skipsIfBindingDoesNotExistAndIfExistsSpecified()
- throws ParserConfigurationException, SAXException, IOException {
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doReturn(null).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
+ public void skipsIfBindingDoesNotExistAndIfExistsSpecified() {
+ when(ccService.findElement(any(), any())).thenReturn(null);
gfsh.executeAndAssertThat(command, COMMAND + " --name=name --if-exists").statusIsSuccess()
.containsOutput("does not exist.");
}
@Test
- public void skipsIfBindingDoesNotExistAndIfExistsSpecifiedTrue()
- throws ParserConfigurationException, SAXException, IOException {
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doReturn(null).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
+ public void skipsIfBindingDoesNotExistAndIfExistsSpecifiedTrue() {
+ when(ccService.findElement(any(), any())).thenReturn(null);
gfsh.executeAndAssertThat(command, COMMAND + " --name=name --if-exists=true").statusIsSuccess()
.containsOutput("does not exist.");
}
@Test
- public void returnsErrorIfBindingDoesNotExistAndIfExistsSpecifiedFalse()
- throws ParserConfigurationException, SAXException, IOException {
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doReturn(null).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
+ public void returnsErrorIfBindingDoesNotExistAndIfExistsSpecifiedFalse() {
+ when(ccService.findElement(any(), any())).thenReturn(null);
gfsh.executeAndAssertThat(command, COMMAND + " --name=name --if-exists=false").statusIsError()
.containsOutput("does not exist.");
}
@Test
- public void removeJndiBindingFromXmlShouldRemoveBindingFromClusterConfiguration()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Region configRegion = mock(Region.class);
-
- Configuration clusterConfig = new Configuration("cluster");
- String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"
- + "<cache xmlns=\"http://geode.apache.org/schema/cache\" "
- + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
- + "copy-on-read=\"false\" is-server=\"false\" lock-lease=\"120\" "
- + "lock-timeout=\"60\" search-timeout=\"300\" version=\"1.0\" "
- + "xsi:schemaLocation=\"http://geode.apache.org/schema/cache "
- + "http://geode.apache.org/schema/cache/cache-1.0.xsd\">" + "<jndi-bindings>"
- + "<jndi-binding jndi-name=\"jndi1\" type=\"SimpleDataSource\"/>"
- + "<jndi-binding jndi-name=\"jndi2\" type=\"SimpleDataSource\"/>"
- + "</jndi-bindings></cache>";
- clusterConfig.setCacheXmlContent(xml);
-
- doReturn(configRegion).when(clusterConfigService).getConfigurationRegion();
- doReturn(null).when(configRegion).put(any(), any());
- doReturn(clusterConfig).when(clusterConfigService).getConfiguration("cluster");
- doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
-
- command.removeJndiBindingFromXml("jndi1");
- assertThat(clusterConfig.getCacheXmlContent()).doesNotContain("jndi1");
- assertThat(clusterConfig.getCacheXmlContent()).contains("jndi2");
- verify(configRegion, times(1)).put("cluster", clusterConfig);
- }
-
- @Test
- public void removeJndiBindingFromXmlIsNoOpWhenNoBindingFoundInClusterConfiguration()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Region configRegion = mock(Region.class);
- Configuration clusterConfig = new Configuration("cluster");
-
- doReturn(configRegion).when(clusterConfigService).getConfigurationRegion();
- doReturn(null).when(configRegion).put(any(), any());
- doReturn(clusterConfig).when(clusterConfigService).getConfiguration("cluster");
- doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
-
- command.removeJndiBindingFromXml("jndi1");
- verify(configRegion, times(0)).put("cluster", clusterConfig);
- }
-
- @Test
- public void whenNoMembersFoundAndNoClusterConfigServiceRunningThenError()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
+ public void whenNoMembersFoundAndNoClusterConfigServiceRunningThenError() {
doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
doReturn(null).when(command).getSharedConfiguration();
- doNothing().when(command).removeJndiBindingFromXml(any());
gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess()
.containsOutput("No members found").hasFailToPersistError();
}
@Test
- public void whenNoMembersFoundAndClusterConfigRunningThenUpdateClusterConfig()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Element existingBinding = mock(Element.class);
-
+ public void whenNoMembersFoundAndClusterConfigRunningThenUpdateClusterConfig() {
doReturn(Collections.emptySet()).when(command).findMembers(any(), any());
- doReturn(existingBinding).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doNothing().when(command).removeJndiBindingFromXml(any());
+ when(ccService.findElement(any(), any())).thenReturn(mock(JndiBindingsType.JndiBinding.class));
gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess()
.containsOutput(
"No members found. Jndi-binding \\\"name\\\" is removed from cluster configuration.")
.hasNoFailToPersistError();
- verify(command, times(1)).removeJndiBindingFromXml(any());
+ verify(ccService).updateCacheConfig(any(), any());
}
@Test
- public void whenMembersFoundAndNoClusterConfigRunningThenOnlyInvokeFunction()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
+ public void whenMembersFoundAndNoClusterConfigRunningThenOnlyInvokeFunction() {
Set<DistributedMember> members = new HashSet<>();
members.add(mock(DistributedMember.class));
@@ -219,7 +149,7 @@ public class DestroyJndiBindingCommandTest {
.tableHasColumnOnlyWithValues("Member", "server1")
.tableHasColumnOnlyWithValues("Status", "Jndi binding \"name\" destroyed on \"server1\"");
- verify(command, times(0)).removeJndiBindingFromXml(any());
+ verify(ccService, times(0)).updateCacheConfig(any(), any());
ArgumentCaptor<DestroyJndiBindingFunction> function =
ArgumentCaptor.forClass(DestroyJndiBindingFunction.class);
@@ -235,8 +165,7 @@ public class DestroyJndiBindingCommandTest {
}
@Test
- public void whenMembersFoundAndClusterConfigRunningThenUpdateClusterConfigAndInvokeFunction()
- throws IOException, ParserConfigurationException, SAXException, TransformerException {
+ public void whenMembersFoundAndClusterConfigRunningThenUpdateClusterConfigAndInvokeFunction() {
Set<DistributedMember> members = new HashSet<>();
members.add(mock(DistributedMember.class));
@@ -244,21 +173,15 @@ public class DestroyJndiBindingCommandTest {
new CliFunctionResult("server1", true, "Jndi binding \"name\" destroyed on \"server1\"");
List<CliFunctionResult> results = new ArrayList<>();
results.add(result);
- ClusterConfigurationService clusterConfigService = mock(ClusterConfigurationService.class);
- Element existingBinding = mock(Element.class);
doReturn(members).when(command).findMembers(any(), any());
- doReturn(existingBinding).when(clusterConfigService).getXmlElement(any(), any(), any(), any());
- doReturn(clusterConfigService).when(command).getSharedConfiguration();
- doNothing().when(command).removeJndiBindingFromXml(any());
doReturn(results).when(command).executeAndGetFunctionResult(any(), any(), any());
+ when(ccService.findElement(any(), any())).thenReturn(mock(JndiBindingsType.JndiBinding.class));
gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess()
.tableHasColumnOnlyWithValues("Member", "server1")
.tableHasColumnOnlyWithValues("Status", "Jndi binding \"name\" destroyed on \"server1\"");
- verify(command, times(1)).removeJndiBindingFromXml(any());
-
ArgumentCaptor<CreateJndiBindingFunction> function =
ArgumentCaptor.forClass(CreateJndiBindingFunction.class);
ArgumentCaptor<String> jndiName = ArgumentCaptor.forClass(String.class);
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverterTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverterTest.java
index a32d3a6..d4797dc 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverterTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverterTest.java
@@ -21,7 +21,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.apache.geode.internal.datasource.ConfigProperty;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.test.junit.categories.UnitTest;
@@ -37,7 +37,7 @@ public class ConfigPropertyConverterTest {
@Test
public void validJson() {
- ConfigProperty configProperty =
+ JndiBindingsType.JndiBinding.ConfigProperty configProperty =
converter.convertFromText("{'name':'name','type':'type','value':'value'}", null, null);
assertThat(configProperty.getName()).isEqualTo("name");
assertThat(configProperty.getType()).isEqualTo("type");
@@ -59,7 +59,7 @@ public class ConfigPropertyConverterTest {
@Test
public void validWhenTypeMissing() {
- ConfigProperty configProperty =
+ JndiBindingsType.JndiBinding.ConfigProperty configProperty =
converter.convertFromText("{'name':'name','value':'value'}", null, null);
assertThat(configProperty.getName()).isEqualTo("name");
assertThat(configProperty.getType()).isNull();
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunctionTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunctionTest.java
index 4679e56..d179e5e 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunctionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunctionTest.java
@@ -21,6 +21,8 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.logging.Level;
@@ -34,15 +36,18 @@ import org.mockito.ArgumentCaptor;
import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.cache.execute.ResultSender;
import org.apache.geode.distributed.DistributedSystem;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
+import org.apache.geode.internal.datasource.ConfigProperty;
import org.apache.geode.internal.jndi.JNDIInvoker;
import org.apache.geode.internal.logging.LocalLogWriter;
+import org.apache.geode.management.internal.cli.commands.CreateJndiBindingCommand;
import org.apache.geode.test.junit.categories.IntegrationTest;
@Category(IntegrationTest.class)
public class CreateJndiBindingFunctionTest {
private CreateJndiBindingFunction createBindingFunction;
- private FunctionContext<JndiBindingConfiguration> context;
+ private FunctionContext<JndiBindingsType.JndiBinding> context;
private DistributedSystem distributedSystem;
private ResultSender resultSender;
private ArgumentCaptor<CliFunctionResult> resultCaptor;
@@ -62,10 +67,10 @@ public class CreateJndiBindingFunctionTest {
@Test
public void createJndiBindingIsSuccessful() throws Exception {
- JndiBindingConfiguration config = new JndiBindingConfiguration();
+ JndiBindingsType.JndiBinding config = new JndiBindingsType.JndiBinding();
config.setJndiName("jndi1");
- config.setType(JndiBindingConfiguration.DATASOURCE_TYPE.SIMPLE);
- config.setJdbcDriver("org.apache.derby.jdbc.EmbeddedDriver");
+ config.setType(CreateJndiBindingCommand.DATASOURCE_TYPE.SIMPLE.getType());
+ config.setJdbcDriverClass("org.apache.derby.jdbc.EmbeddedDriver");
config.setConnectionUrl("jdbc:derby:newDB;create=true");
when(context.getArguments()).thenReturn(config);
when(context.getMemberName()).thenReturn("mock-member");
@@ -84,4 +89,17 @@ public class CreateJndiBindingFunctionTest {
"java:TransactionManager");
}
+ @Test
+ public void convert() {
+ JndiBindingsType.JndiBinding.ConfigProperty propA =
+ new JndiBindingsType.JndiBinding.ConfigProperty("name", "type", "value");
+
+ List<ConfigProperty> converted =
+ CreateJndiBindingFunction.convert(Collections.singletonList(propA));
+ assertThat(converted).hasSize(1);
+ ConfigProperty propB = converted.get(0);
+ assertThat(propB.getName()).isEqualTo("name");
+ assertThat(propB.getType()).isEqualTo("type");
+ assertThat(propB.getValue()).isEqualTo("value");
+ }
}
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyJndiBindingFunctionTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyJndiBindingFunctionTest.java
index 42f369f..d55ce21 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyJndiBindingFunctionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/DestroyJndiBindingFunctionTest.java
@@ -31,8 +31,10 @@ import org.mockito.ArgumentCaptor;
import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.cache.execute.ResultSender;
import org.apache.geode.distributed.DistributedSystem;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.internal.jndi.JNDIInvoker;
import org.apache.geode.internal.logging.LocalLogWriter;
+import org.apache.geode.management.internal.cli.commands.CreateJndiBindingCommand;
import org.apache.geode.test.junit.categories.IntegrationTest;
@Category(IntegrationTest.class)
@@ -57,12 +59,13 @@ public class DestroyJndiBindingFunctionTest {
JNDIInvoker.mapTransactions(distributedSystem);
- JndiBindingConfiguration config = new JndiBindingConfiguration();
+ JndiBindingsType.JndiBinding config = new JndiBindingsType.JndiBinding();
config.setJndiName("jndi1");
- config.setType(JndiBindingConfiguration.DATASOURCE_TYPE.SIMPLE);
- config.setJdbcDriver("org.apache.derby.jdbc.EmbeddedDriver");
+ config.setType(CreateJndiBindingCommand.DATASOURCE_TYPE.SIMPLE.getType());
+ config.setJdbcDriverClass("org.apache.derby.jdbc.EmbeddedDriver");
config.setConnectionUrl("jdbc:derby:newDB;create=true");
- JNDIInvoker.mapDatasource(config.getParamsAsMap(), config.getDatasourceConfigurations());
+ JNDIInvoker.mapDatasource(CreateJndiBindingFunction.getParamsAsMap(config),
+ CreateJndiBindingFunction.convert(config.getConfigProperty()));
}
@Test
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ListJndiBindingFunctionTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ListJndiBindingFunctionTest.java
index 4a13fd8..158cc8c 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ListJndiBindingFunctionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ListJndiBindingFunctionTest.java
@@ -31,8 +31,10 @@ import org.mockito.ArgumentCaptor;
import org.apache.geode.cache.execute.FunctionContext;
import org.apache.geode.cache.execute.ResultSender;
import org.apache.geode.distributed.DistributedSystem;
+import org.apache.geode.internal.cache.configuration.JndiBindingsType;
import org.apache.geode.internal.jndi.JNDIInvoker;
import org.apache.geode.internal.logging.LocalLogWriter;
+import org.apache.geode.management.internal.cli.commands.CreateJndiBindingCommand;
import org.apache.geode.test.junit.categories.IntegrationTest;
@Category(IntegrationTest.class)
@@ -56,12 +58,15 @@ public class ListJndiBindingFunctionTest {
JNDIInvoker.mapTransactions(distributedSystem);
- JndiBindingConfiguration config = new JndiBindingConfiguration();
+ JndiBindingsType.JndiBinding config = new JndiBindingsType.JndiBinding();
config.setJndiName("jndi1");
- config.setType(JndiBindingConfiguration.DATASOURCE_TYPE.SIMPLE);
- config.setJdbcDriver("org.apache.derby.jdbc.EmbeddedDriver");
+ config.setType(CreateJndiBindingCommand.DATASOURCE_TYPE.SIMPLE.getType());
+ config.setJdbcDriverClass("org.apache.derby.jdbc.EmbeddedDriver");
config.setConnectionUrl("jdbc:derby:newDB;create=true");
- JNDIInvoker.mapDatasource(config.getParamsAsMap(), config.getDatasourceConfigurations());
+ config.getConfigProperty()
+ .add(new JndiBindingsType.JndiBinding.ConfigProperty("test", "test", "test"));
+ JNDIInvoker.mapDatasource(CreateJndiBindingFunction.getParamsAsMap(config),
+ CreateJndiBindingFunction.convert(config.getConfigProperty()));
}
@Test
--
To stop receiving notification emails like this one, please contact
jinmeiliao@apache.org.