Skip to content

Commit

Permalink
SWITCHYARD-2433 Use consumer.delay and consumer.initialDelay instead …
Browse files Browse the repository at this point in the history
…of the internal timer in the SQL binding
  • Loading branch information
dvirgiln committed Nov 28, 2014
1 parent 8398bf6 commit e48637d
Show file tree
Hide file tree
Showing 7 changed files with 248 additions and 46 deletions.
Expand Up @@ -6,7 +6,7 @@
* 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,
* 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.
Expand All @@ -16,6 +16,7 @@
import javax.xml.namespace.QName;

import org.apache.camel.model.RouteDefinition;
import org.apache.commons.lang.StringUtils;
import org.switchyard.ServiceDomain;
import org.switchyard.common.camel.SwitchYardCamelContext;
import org.switchyard.common.lang.Strings;
Expand All @@ -33,7 +34,7 @@ public class CamelSqlInboundHandler extends InboundHandler<CamelSqlBindingModel>

/**
* Sole constructor.
*
*
* @param camelBindingModel The CamelBindingModel.
* @param camelContext The camel context instance.
* @param serviceName The target service name.
Expand All @@ -49,15 +50,16 @@ protected RouteDefinition createRouteDefinition() {
CamelSqlBindingModel bindingModel = getBindingModel();
QName serviceName = getServiceName();

String period = bindingModel.getPeriod();
if (bindingModel.isServiceBinding()) {
if (Strings.trimToNull(period) == null) {
throw SQLCamelComponentMessages.MESSAGES.periodAttributeMandatory();
if (bindingModel.getConsumer()!=null && bindingModel.getConsumer().getDelay()!=null && StringUtils.isNotEmpty(bindingModel.getPeriod())) {
throw SQLCamelComponentMessages.MESSAGES.multipleDelayDefined();
}

if (bindingModel.getConsumer()!=null && bindingModel.getConsumer().getDelay()!=null && bindingModel.getInitialDelay()!=null) {
throw SQLCamelComponentMessages.MESSAGES.multipleInitialDelayDefined();
}

RouteDefinition definition = new RouteDefinition();
definition.routeId(getRouteId())
.from(getBindingModel().getTimerURI(getRouteId()).toString());
definition.routeId(getRouteId()).from(getComponentUri().toString());
return addTransactionPolicy(definition)
.to(getBindingModel().getComponentURI().toString())
.setProperty(ExchangeCompletionEvent.GATEWAY_NAME).simple(getBindingModel().getName(), String.class)
Expand Down
Expand Up @@ -6,7 +6,7 @@
* 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,
* 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.
Expand All @@ -30,13 +30,22 @@ public interface SQLCamelComponentMessages {
* The default messages.
*/
SQLCamelComponentMessages MESSAGES = Messages.getBundle(SQLCamelComponentMessages.class);


/**
* multipleInitialDelayDefined method definition.
*
* @return SwitchYardException
*/
@Message(id = 34000, value = "The initial delay has been defined twice.")
SwitchYardException multipleInitialDelayDefined();

/**
* periodAttributeMandatory method definition.
* multipleDelayDefined method definition.
*
* @return SwitchYardException
*/
@Message(id = 34000, value = "Period attribute is mandatory for SQL service bindings")
SwitchYardException periodAttributeMandatory();
@Message(id = 34001, value = "The delay has been defined twice.")
SwitchYardException multipleDelayDefined();



}
Expand Up @@ -6,7 +6,7 @@
* 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,
* 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.
Expand All @@ -22,102 +22,110 @@ public interface CamelSqlBindingModel extends CamelBindingModel {

/**
* Get SQL query to be executed.
*
*
* @return SQL query.
*/
String getQuery();

/**
* Specify sql query to execute.
*
*
* @param query SQL query.
* @return a reference to this Camel binding model
*/
CamelSqlBindingModel setQuery(String query);

/**
* Reference to a DataSource to look up in the registry.
*
*
* @return Data source bean name.
*/
String getDataSourceRef();

/**
* Specify data source bean name.
*
*
* @param dataSourceRef Bean name.
* @return a reference to this Camel binding model
*/
CamelSqlBindingModel setDataSourceRef(String dataSourceRef);

/**
* Execute SQL batch update statements.
*
*
* @return True if jdbc batch update should be performed.
*/
Boolean isBatch();

/**
* Turn on/off JDBC batching support.
*
*
* @param batch Batch flag.
* @return a reference to this Camel binding model
*/
CamelSqlBindingModel setBatch(Boolean batch);

/**
* Get placeholder character.
*
*
* @return Paceholder character.
*/
String getPlaceholder();

/**
* Specifies a character that will be replaced to ? in SQL query.
* Specifies a character that will be replaced to ? in SQL query.
* Notice, that it is simple String.replaceAll() operation and no SQL parsing is
* involved (quoted strings will also change).
*
*
* @param placeholder Placeholder in query.
* @return a reference to this Camel binding model
*/
CamelSqlBindingModel setPlaceholder(String placeholder);

/**
* Period between polls.
*
*
* @return Period between polls.
*/
String getPeriod();

/**
* Specifies delays between pools. Possible values are long (millis) and string, eg: 1s, 1m.
*
*
* @param period Period between polls.
* @return a reference to this Camel binding model
*/
CamelSqlBindingModel setPeriod(String period);

/**
* Specifies delay in millis before first poll.
*
*
* @param initialDelay First poll delay.
* @return a reference to this Camel binding model
*/
CamelSqlBindingModel setInitialDelay(Long initialDelay);

/**
* Get first poll delay.
*
*
* @return First poll delay.
*/
Long getInitialDelay();

/**
* Returns timer uri used to call component uri.
*
* @param timerId Name of timer endpoint.
* @return Camel timer uri.
* The consumer's configurations.
*
* @return an instance of the camel sql consumer binding model
*/
String getTimerURI(String timerId);
CamelSqlConsumerBindingModel getConsumer();

/**
* Specify the consumer binding model.
*
* @param consumer
* The consumer binding model
* @return a reference to this binding model
*/
CamelSqlBindingModel setConsumer(CamelSqlConsumerBindingModel consumer);

}
@@ -0,0 +1,53 @@
/*
* Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors.
*
* 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.switchyard.component.camel.sql.model;

/**
* Represents the consumer configuration settings for a SQL endpoint in Camel.
*
* @author David Virgil Naranjo
*/
public interface CamelSqlConsumerBindingModel {
/**
* Delay in milliseconds.
*
* @return Delay.
*/
Long getDelay();

/**
* Set the delay in milliseconds.
*
* @param delay
* Delay to use.
* @return a reference to this binding model
*/
CamelSqlConsumerBindingModel setDelay(Long delay);

/**
* Initial delay in milliseconds.
*
* @return the initial delay.
*/
Long getInitialDelay();

/**
* Set the delay in milliseconds.
*
* @param delay
* Initial delay to use.
* @return a reference to this binding model
*/
CamelSqlConsumerBindingModel setInitialDelay(Long initialDelay);
}

0 comments on commit e48637d

Please sign in to comment.