Hi

I was playing with the camel-ignite component and ran into what appears to
be a bug.

Creating an IgniteComponent from configuration works fine, but when I try
and create one from an existing Ignite instance it throws an exception when
starting the component.  Looking at the code here
https://github.com/apache/camel/blob/master/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java#L77
it appears the lifecycleMode is ignored as it is only set to
COMPONENT_MANAGED and cannot be altered outside of the class.

The following patch sets the lifecycleMode USER_MANAGED when an ignite
instance is set, which appears to resolve the problem.

  diff --git
a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java
b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java
  index eaf6583..e9efc79 100644
  ---
a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java
  +++
b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java
  @@ -121,6 +108,7 @@
        */
       public void setIgnite(Ignite ignite) {
           this.ignite = ignite;
  +        lifecycleMode = IgniteLifecycleMode.USER_MANAGED;
       }

       /**

I can happily create a pull request via github if you like.

Regards,
Gary

ps. for reference, the following test reproduces the problem:

diff --git
a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCreationTest.java
b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCreationTest.java
new file mode 100644
index 0000000..e0c41b0
--- /dev/null
+++
b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCreationTest.java
@@ -0,0 +1,52 @@
+/**
+ * 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.camel.component.ignite;
+
+import static com.google.common.truth.Truth.assert_;
+import org.apache.camel.component.ignite.cache.IgniteCacheComponent;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.cache.CachePeekMode;
+import org.junit.Test;
+
+public class IgniteCreationTest extends AbstractIgniteTest {
+
+    @Override
+    protected String getScheme() {
+        return "ignite-cache";
+    }
+
+    @Override
+    protected AbstractIgniteComponent createComponent() {
+        Ignite ignite = Ignition.start(createConfiguration());
+        return IgniteCacheComponent.fromIgnite(ignite);
+    }
+
+    @Test
+    public void testAddEntry() {
+
 template.requestBodyAndHeader("ignite-cache:testcache1?operation=PUT",
"1234", IgniteConstants.IGNITE_CACHE_KEY, "abcd");
+
+
 
assert_().that(ignite().cache("testcache1").size(CachePeekMode.ALL)).isEqualTo(1);
+
 assert_().that(ignite().cache("testcache1").get("abcd")).isEqualTo("1234");
+    }
+
+    @Override
+    public boolean isCreateCamelContextPerClass() {
+        return true;
+    }
+
+}

Reply via email to