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 Dec 5, 2014
1 parent 8398bf6 commit e3e86a5
Show file tree
Hide file tree
Showing 10 changed files with 411 additions and 69 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 @@ -18,13 +18,8 @@
import org.apache.camel.model.RouteDefinition;
import org.switchyard.ServiceDomain;
import org.switchyard.common.camel.SwitchYardCamelContext;
import org.switchyard.common.lang.Strings;
import org.switchyard.component.camel.common.CamelConstants;
import org.switchyard.component.camel.common.handler.InboundHandler;
import org.switchyard.component.camel.common.handler.MessageComposerProcessor;
import org.switchyard.component.camel.common.handler.OperationSelectorProcessor;
import org.switchyard.component.camel.sql.model.CamelSqlBindingModel;
import org.switchyard.runtime.event.ExchangeCompletionEvent;

/**
* Inbound handler for SQL binding. Creates additional route elements for service bindings.
Expand All @@ -33,7 +28,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 @@ -47,24 +42,16 @@ public CamelSqlInboundHandler(CamelSqlBindingModel camelBindingModel,
@Override
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
&& (bindingModel.getPeriod() != null && !bindingModel.getPeriod().equals(""))) {
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());
return addTransactionPolicy(definition)
.to(getBindingModel().getComponentURI().toString())
.setProperty(ExchangeCompletionEvent.GATEWAY_NAME).simple(getBindingModel().getName(), String.class)
.setProperty(CamelConstants.APPLICATION_NAMESPACE).constant(serviceName.getNamespaceURI())
.process(new MessageComposerProcessor(getBindingModel()))
.process(new OperationSelectorProcessor(serviceName, bindingModel))
.to(getSwitchyardEndpointUri());
}
return super.createRouteDefinition();
}
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,30 @@ 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();

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

/**
* periodAttributeMandatory method definition.
*
* @return SwitchYardException
*/
@Message(id = 34000, value = "Period attribute is mandatory for SQL service bindings")
@Message(id = 34002, value = "Period attribute is mandatory for SQL service bindings")
SwitchYardException periodAttributeMandatory();


}
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 e3e86a5

Please sign in to comment.