diff --git a/Rakefile b/Rakefile
index fa889dddd3..08aba8259f 100644
--- a/Rakefile
+++ b/Rakefile
@@ -151,7 +151,39 @@ define "ode" do
end
test.setup unzip("#{webapp_dir}/WEB-INF"=>project("dao-jpa-ojpa-derby").package(:zip))
test.setup unzip("#{webapp_dir}/WEB-INF"=>project("dao-hibernate-db").package(:zip))
- test.exclude('*') if Buildr.environment == 'hudson' || ENV["notestng"]
+ # test.exclude('*') if Buildr.environment == 'hudson' || ENV["notestng"]
+ test.exclude 'org.apache.ode.axis2.rampart', 'org.apache.ode.axis2.hydration',
+ 'org.apache.ode.axis2.BpelActivityTest',
+ 'org.apache.ode.axis2.ClusteredOutgoingTrafficTest',
+ 'org.apache.ode.axis2.EndpointConfigurationTest',
+ 'org.apache.ode.axis2.EndpointTimeoutsTest',
+ 'org.apache.ode.axis2.MessageStructureTest',
+ 'org.apache.ode.axis2.MultiPartMessageTest',
+ 'org.apache.ode.axis2.NoP2PTest',
+ 'org.apache.ode.axis2.SelectorsTest',
+ 'org.apache.ode.axis2.ServiceFaultCatchTest',
+ 'org.apache.ode.axis2.SoapHeader2Test',
+ 'org.apache.ode.axis2.SoapHeaderTest',
+ 'org.apache.ode.axis2.XSDReferencesDeployTest',
+ 'org.apache.ode.axis2.correlation.CorrelationJoinHibTest',
+ 'org.apache.ode.axis2.correlation.CorrelationJoinLazyHibTest',
+ 'org.apache.ode.axis2.correlation.CorrelationJoinLazyTest',
+ 'org.apache.ode.axis2.correlation.CorrelationJoinTest',
+ 'org.apache.ode.axis2.correlation.CorrelationMultiHibTest',
+ 'org.apache.ode.axis2.correlation.CorrelationMultiTest',
+ 'org.apache.ode.axis2.correlation.CorrelationUnicityTest',
+ 'org.apache.ode.axis2.httpbinding.HttpBindingTest',
+ 'org.apache.ode.axis2.instancecleanup.CleanFailureHibTest',
+ 'org.apache.ode.axis2.instancecleanup.CleanFailureTest',
+ 'org.apache.ode.axis2.instancecleanup.CleanFaultHibTest',
+ 'org.apache.ode.axis2.instancecleanup.CleanFaultTest',
+ 'org.apache.ode.axis2.instancecleanup.CleanSuccessHibTest',
+ 'org.apache.ode.axis2.instancecleanup.CleanSuccessTest',
+ 'org.apache.ode.axis2.management.DeploymentTest',
+ 'org.apache.ode.axis2.management.InstanceManagementTest',
+ 'org.apache.ode.axis2.management.Retire2Test',
+ 'org.apache.ode.axis2.management.RetireTest',
+ 'org.apache.ode.axis2.management.RetireTestVar'
NativeDB.prepare_configs test, _(".")
@@ -287,6 +319,7 @@ define "ode" do
COMMONS.collections, COMMONS.lang, DERBY, JAVAX.connector,
JAVAX.stream, JAVAX.transaction, JAXEN, HSQLDB, LOG4J, SAXON, XERCES, XMLBEANS, XALAN, GERONIMO.transaction, SPRING, HIBERNATE, SLF4J, DOM4J,
JAVAX.connector
+ test.exclude 'org.apache.ode.test.StructuredActivities20Test'
package :jar
end
@@ -398,9 +431,21 @@ define "ode" do
package(:zip).include(derby_db)
end
+ desc "ODE JAva Concurrent OBjects - Annotations"
+ define "jacob-annotation" do
+ package :jar
+ end
+
+ desc "ODE JAva Concurrent OBjects - Generator"
+ define "jacob-generator" do
+ compile.with projects("jacob-annotation")
+
+ package :jar
+ end
+
desc "ODE JAva Concurrent OBjects"
define "jacob" do
- compile.with projects("utils"), COMMONS.logging
+ compile.with COMMONS.logging
package :jar
end
@@ -451,6 +496,7 @@ define "ode" do
rm_rf Dir["target/test/resources"]
cp_r _("src/test/resources"), _("target/test/resources")
end
+ test.exclude '*TestBase', 'org.apache.ode.jbi.OdeJbiComponentLifeCycleTest', 'org.apache.ode.jbi.ReplayerJbiTest'
end
desc "ODE Commmands for Karaf"
diff --git a/jacob-annotation/pom.xml b/jacob-annotation/pom.xml
new file mode 100644
index 0000000000..6542ec0087
--- /dev/null
+++ b/jacob-annotation/pom.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ 4.0.0
+
+
+ org.apache.ode
+ ode
+ 1.4-SNAPSHOT
+
+
+ jacob-annotation
+ jar
+ ODE :: JACOB :: Annotations
+
+
diff --git a/jacob-annotation/src/main/java/org/apache/ode/jacob/annotation/ChannelType.java b/jacob-annotation/src/main/java/org/apache/ode/jacob/annotation/ChannelType.java
new file mode 100644
index 0000000000..8835e28b3f
--- /dev/null
+++ b/jacob-annotation/src/main/java/org/apache/ode/jacob/annotation/ChannelType.java
@@ -0,0 +1,21 @@
+/**
+ * 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.ode.jacob.annotation;
+
+
+public @interface ChannelType {
+}
diff --git a/jacob-generator/pom.xml b/jacob-generator/pom.xml
new file mode 100644
index 0000000000..441ccd775e
--- /dev/null
+++ b/jacob-generator/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+
+ 4.0.0
+
+
+ org.apache.ode
+ ode
+ 1.4-SNAPSHOT
+
+
+ jacob-generator
+ jar
+ ODE :: JACOB :: Generator
+
+
+
+ org.apache.ode
+ jacob-annotation
+
+
+
+
diff --git a/jacob-generator/src/main/java/org/apache/ode/jacob/generator/ChannelTypeProcessor.java b/jacob-generator/src/main/java/org/apache/ode/jacob/generator/ChannelTypeProcessor.java
new file mode 100644
index 0000000000..6fbe587510
--- /dev/null
+++ b/jacob-generator/src/main/java/org/apache/ode/jacob/generator/ChannelTypeProcessor.java
@@ -0,0 +1,231 @@
+/**
+ * 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.ode.jacob.generator;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.annotation.processing.SupportedSourceVersion;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.tools.Diagnostic;
+
+import org.apache.ode.jacob.annotation.ChannelType;
+
+
+@SupportedAnnotationTypes("org.apache.ode.jacob.annotation.ChannelType")
+@SupportedSourceVersion(SourceVersion.RELEASE_6)
+public class ChannelTypeProcessor extends AbstractProcessor {
+
+ public boolean process(Set extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ for (Element elem : roundEnv.getElementsAnnotatedWith(ChannelType.class)) {
+ if (elem.getKind() != ElementKind.INTERFACE) {
+ processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "The @" + ChannelType.class.getSimpleName()
+ + " is only supported on interfaces; " + elem.asType().toString() + " is a " + elem.getKind().toString());
+ continue;
+ }
+ if (channelClass(elem).generate() && channelListener(elem).generate()) {
+ processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
+ "Generation complete: @ChannelType implementation and listener for " + elem.asType().toString());
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private SourceGenerator channelClass(Element element) {
+ return new ChannelClassGenerator(processingEnv, element);
+ }
+
+ private SourceGenerator channelListener(Element element) {
+ return new ChannelListenerGenerator(processingEnv, element);
+ }
+
+ // TODO: check if instead of using a String and '\n' line terminators wouldn't be better to
+ // return a String[] of lines and use println foreach line (would probably use crlf on Win)
+ private static final String HEADER =
+ // TODO: ported from earlier version, but ugly as hell, could use a facelift
+ "/*\n" +
+ " * SOURCE FILE GENERATATED BY JACOB CHANNEL CLASS GENERATOR\n" +
+ " * \n" +
+ " * !!! DO NOT EDIT !!!! \n" +
+ " * \n" +
+ " * Generated On : \n" +
+ " * For Interface : \n" +
+ " */\n" +
+ "package ;\n";
+ private static final String CHANNEL_DECL =
+ "/**\n" +
+ " * An auto-generated channel interface for the channel type\n" +
+ " * {@link }.\n" +
+ " * @see \n" +
+ " * @see ChannelListener\n" +
+ " */\n" +
+ "public interface Channel extends\n" +
+ " {\n" +
+ "}";
+ private static final String LISTENER_DECL =
+ "import org.apache.commons.logging.Log;\n" +
+ "import org.apache.commons.logging.LogFactory;\n" +
+ "\n" +
+ "/**\n" +
+ " * An auto-generated channel listener abstract class for the \n" +
+ " * {@link } channel type. \n" +
+ " * @see \n" +
+ " * @see Channel\n" +
+ " */\n" +
+ "public abstract class ChannelListener\n" +
+ " extends org.apache.ode.jacob.ChannelListener<Channel>\n" +
+ " implements {\n" +
+ "\n" +
+ " private static final Log LOG = LogFactory.getLog(.class);\n" +
+ "\n" +
+ " protected Log log() {\n" +
+ " return LOG;\n" +
+ " }\n" +
+ "\n" +
+ " protected ChannelListener(Channel channel) {\n" +
+ " super(channel);\n" +
+ " }\n" +
+ "}";
+
+ public abstract class SourceGenerator {
+ public static final String INDENT = " ";
+ private final ProcessingEnvironment penv;
+ private final Date today = new Date();
+ private final String suffix;
+ private Element type;
+
+ public SourceGenerator(ProcessingEnvironment penv, Element type, String suffix) {
+ this.penv = penv;
+ this.type = type;
+ this.suffix = suffix;
+ }
+
+ public ProcessingEnvironment getProcessingEnvironment() {
+ return penv;
+ }
+
+ public Element getType() {
+ return type;
+ }
+
+ public boolean generate() {
+ Writer w;
+ try {
+ w = penv.getFiler().createSourceFile(getSourceFileName(), type).openWriter();
+ } catch (IOException e) {
+ penv.getMessager().printMessage(Diagnostic.Kind.NOTE, e.getMessage());
+ return false;
+ }
+
+ final PrintWriter writer = new PrintWriter(w);
+ generateHeader(writer);
+ generateContent(writer);
+ writer.flush();
+ writer.close();
+ return true;
+ }
+
+ // TODO: is it really worth splitting this into a interface/abstract class? maybe later...
+ protected abstract void generateContent(PrintWriter writer);
+
+ protected String getSuffix() {
+ return suffix;
+ }
+
+ protected String getSourceFileName() {
+ return getType().asType().toString() + suffix;
+ }
+
+ protected String getPackage() {
+ return penv.getElementUtils().getPackageOf(type).toString();
+ }
+
+ protected List getSuperInterfaces() {
+ List answer = new ArrayList();
+ for (TypeMirror m : getProcessingEnvironment().getTypeUtils().directSupertypes(getType().asType())) {
+ DeclaredType decl = m.getKind() == TypeKind.DECLARED ? (DeclaredType) m : null;
+ if (decl.asElement().getKind() == ElementKind.INTERFACE) {
+ answer.add(m);
+ }
+ }
+ return answer;
+ }
+
+ protected void generateHeader(PrintWriter writer) {
+ writer.println(HEADER
+ .replaceAll("", today.toString())
+ .replaceAll("", getType().asType().toString())
+ .replaceAll("", getPackage()));
+ }
+ };
+
+ private class ChannelClassGenerator extends SourceGenerator {
+
+ public ChannelClassGenerator(ProcessingEnvironment penv, Element type) {
+ super(penv, type, "Channel");
+ }
+
+ protected String generateInterfaces() {
+ StringBuilder ifs = new StringBuilder();
+ for (TypeMirror m : getSuperInterfaces()) {
+ ifs.append(" ").append(m.toString()).append("\n");
+ }
+ ifs.append(" org.apache.ode.jacob.Channel,\n");
+ ifs.append(" ").append(getType().asType().toString());
+ return ifs.toString();
+ }
+
+ protected void generateContent(PrintWriter writer) {
+ // TODO: add the javadoc class prefix?
+ writer.println(CHANNEL_DECL
+ .replaceAll("", getType().getSimpleName().toString())
+ .replaceAll("", generateInterfaces())
+ .replaceAll("", getType().asType().toString()));
+ }
+ };
+
+ private class ChannelListenerGenerator extends SourceGenerator {
+
+ public ChannelListenerGenerator(ProcessingEnvironment penv, Element type) {
+ super(penv, type, "ChannelListener");
+ }
+
+ protected void generateContent(PrintWriter writer) {
+ // TODO: add the javadoc class prefix?
+ writer.println(LISTENER_DECL
+ .replaceAll("", getType().getSimpleName().toString())
+ .replaceAll("", getType().asType().toString()));
+ }
+ }
+}
diff --git a/jacob-generator/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/jacob-generator/src/main/resources/META-INF/services/javax.annotation.processing.Processor
new file mode 100644
index 0000000000..581517814e
--- /dev/null
+++ b/jacob-generator/src/main/resources/META-INF/services/javax.annotation.processing.Processor
@@ -0,0 +1 @@
+org.apache.ode.jacob.generator.ChannelTypeProcessor
diff --git a/jacob/src/main/java/org/apache/ode/jacob/JacobRunnable.java b/jacob/src/main/java/org/apache/ode/jacob/JacobRunnable.java
index f6523ff53b..8ee4bad0ff 100644
--- a/jacob/src/main/java/org/apache/ode/jacob/JacobRunnable.java
+++ b/jacob/src/main/java/org/apache/ode/jacob/JacobRunnable.java
@@ -23,7 +23,6 @@
import java.util.Collections;
import java.util.Set;
-import org.apache.ode.utils.CollectionUtils;
/**
* Base class for process abstractions. An abstraction is a parameterized
@@ -71,7 +70,7 @@ public abstract class JacobRunnable extends JacobObject {
static {
try {
- Method m = JacobRunnable.class.getMethod("run", CollectionUtils.EMPTY_CLASS_ARRAY);
+ Method m = JacobRunnable.class.getMethod("run", new Class[]{});
IMPLEMENTED_METHODS = Collections.singleton(m);
} catch (NoSuchMethodException e) {
throw new AssertionError(e);
diff --git a/jacob/src/main/java/org/apache/ode/jacob/soup/Comm.java b/jacob/src/main/java/org/apache/ode/jacob/soup/Comm.java
index 0045a00098..d2b4f43a5b 100644
--- a/jacob/src/main/java/org/apache/ode/jacob/soup/Comm.java
+++ b/jacob/src/main/java/org/apache/ode/jacob/soup/Comm.java
@@ -18,7 +18,6 @@
*/
package org.apache.ode.jacob.soup;
-import org.apache.ode.utils.ObjectPrinter;
/**
* DOCUMENTME.
@@ -30,7 +29,6 @@
*/
public abstract class Comm extends ExecutionQueueObject {
private CommChannel _channel;
-
private CommGroup _group;
protected Comm() {
@@ -61,6 +59,11 @@ public void setGroup(CommGroup group) {
}
public String toString() {
- return ObjectPrinter.toString(this, new Object[] { "chnl", _channel, "group", _group });
+ // TODO: maybe find a better way to do a toString and replace ObjectPrinter
+ return new StringBuilder("{")
+ .append(this.getClass().getSimpleName())
+ .append(" chnl=").append(_channel)
+ .append(", group=").append(_group)
+ .append(" }").toString();
}
}
diff --git a/jacob/src/main/java/org/apache/ode/jacob/soup/CommChannel.java b/jacob/src/main/java/org/apache/ode/jacob/soup/CommChannel.java
index a71f19ad66..151eb97b01 100644
--- a/jacob/src/main/java/org/apache/ode/jacob/soup/CommChannel.java
+++ b/jacob/src/main/java/org/apache/ode/jacob/soup/CommChannel.java
@@ -18,7 +18,6 @@
*/
package org.apache.ode.jacob.soup;
-import org.apache.ode.utils.ObjectPrinter;
/**
* DOCUMENTME.
@@ -28,13 +27,13 @@
public class CommChannel extends ExecutionQueueObject {
- private Class _type;
+ private Class> _type;
- public CommChannel(Class type) {
+ public CommChannel(Class> type) {
_type = type;
}
- public Class getType() {
+ public Class> getType() {
return _type;
}
diff --git a/jacob/src/main/java/org/apache/ode/jacob/soup/Continuation.java b/jacob/src/main/java/org/apache/ode/jacob/soup/Continuation.java
index bb2ff55df7..0f4286f4d8 100644
--- a/jacob/src/main/java/org/apache/ode/jacob/soup/Continuation.java
+++ b/jacob/src/main/java/org/apache/ode/jacob/soup/Continuation.java
@@ -19,7 +19,6 @@
package org.apache.ode.jacob.soup;
import org.apache.ode.jacob.JacobObject;
-import org.apache.ode.utils.ObjectPrinter;
import java.lang.reflect.Method;
@@ -53,7 +52,12 @@ public Object[] getArgs() {
}
public String toString () {
- return ObjectPrinter.toString(this, new Object[] { "closure", _closure, "method", _method.getName(), "args", _args});
+ return new StringBuilder("{")
+ .append(this.getClass().getSimpleName())
+ .append(" closure=").append(_closure)
+ .append(", method=").append(_method.getName())
+ .append(", args=").append(_args)
+ .append("}").toString();
}
}
diff --git a/jacob/src/main/java/org/apache/ode/jacob/vpu/ChannelFactory.java b/jacob/src/main/java/org/apache/ode/jacob/vpu/ChannelFactory.java
index 1608591e28..e1098f4985 100644
--- a/jacob/src/main/java/org/apache/ode/jacob/vpu/ChannelFactory.java
+++ b/jacob/src/main/java/org/apache/ode/jacob/vpu/ChannelFactory.java
@@ -24,7 +24,6 @@
import org.apache.ode.jacob.Channel;
import org.apache.ode.jacob.soup.CommChannel;
-import org.apache.ode.utils.CollectionUtils;
public class ChannelFactory {
private static final Method METHOD_OBJECT_EQUALS;
@@ -39,7 +38,7 @@ public class ChannelFactory {
}
try {
- METHOD_CHANNEL_EXPORT = Channel.class.getMethod("export", CollectionUtils.EMPTY_CLASS_ARRAY);
+ METHOD_CHANNEL_EXPORT = Channel.class.getMethod("export", new Class[] {});
} catch (Exception e) {
throw new AssertionError("No export() method on Object!");
}
diff --git a/jacob/src/main/java/org/apache/ode/jacob/vpu/ExecutionQueueImpl.java b/jacob/src/main/java/org/apache/ode/jacob/vpu/ExecutionQueueImpl.java
index 9d001ec180..08e44b3b12 100644
--- a/jacob/src/main/java/org/apache/ode/jacob/vpu/ExecutionQueueImpl.java
+++ b/jacob/src/main/java/org/apache/ode/jacob/vpu/ExecutionQueueImpl.java
@@ -33,8 +33,6 @@
import org.apache.ode.jacob.soup.ExecutionQueue;
import org.apache.ode.jacob.soup.ExecutionQueueObject;
import org.apache.ode.jacob.soup.ReplacementMap;
-import org.apache.ode.utils.CollectionUtils;
-import org.apache.ode.utils.ObjectPrinter;
import java.io.Externalizable;
import java.io.IOException;
@@ -96,8 +94,6 @@ public class ExecutionQueueImpl implements ExecutionQueue {
private int _objIdCounter;
- private ExecutionQueueStatistics _statistics = new ExecutionQueueStatistics();
-
private ReplacementMap _replacementMap;
private Serializable _gdata;
@@ -121,8 +117,10 @@ public Map