Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SWITCHYARD-2433 Use consumer.delay and consumer.initialDelay instead of ... #742

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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);
}