Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/dev/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ func runJavaHarnessTests(ctx context.Context, repoDir string) error {
ctx,
harnessDir,
"./gradlew",
":harness:test",
"test",
); err != nil {
return fmt.Errorf("failed Java harness tests: %w", err)
}
Expand Down
2 changes: 1 addition & 1 deletion workers/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ func (b *Builder) buildJava(ctx context.Context, baseDir string) (sdkbuild.Progr
BaseDir: baseDir,
DirName: b.DirName,
Version: b.SdkOptions.Version,
MainClass: "io.temporal.omes.Main",
MainClass: "io.temporal.omes.apps.Registry",
HarnessDependency: "io.temporal:omes:0.1.0",
Build: true,
Stdout: b.stdout,
Expand Down
53 changes: 50 additions & 3 deletions workers/java/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id 'java'
id 'com.diffplug.spotless' version '6.18.0'
id 'com.google.protobuf' version '0.9.4'
}

allprojects {
Expand All @@ -24,33 +25,79 @@ spotless {
target project.fileTree(project.rootDir) {
include '**/*.java'
exclude '**/build/**'
exclude 'io/temporal/omes/KitchenSink.java'
exclude '**/KitchenSink.java'
}
googleJavaFormat('1.22.0')
}
}

compileJava.dependsOn spotlessJava
compileJava.dependsOn generateProto

dependencies {
implementation project(':harness')
implementation 'com.google.guava:guava:31.0.1-jre'
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'com.jayway.jsonpath:json-path:2.6.0'
implementation 'io.temporal:temporal-sdk:1.34.0'
implementation 'org.reflections:reflections:0.10.2'
implementation 'ch.qos.logback:logback-classic:1.2.13'
implementation 'info.picocli:picocli:4.6.2'
implementation 'net.logstash.logback:logstash-logback-encoder:7.4'
implementation 'io.micrometer:micrometer-registry-prometheus'

implementation(platform("com.fasterxml.jackson:jackson-bom:2.15.2"))
implementation "com.fasterxml.jackson.core:jackson-databind"
implementation "com.fasterxml.jackson.core:jackson-core"
implementation 'com.google.protobuf:protobuf-java:3.25.5'
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'

testImplementation 'io.temporal:temporal-testing:1.34.0'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

sourceSets {
main {
java {
srcDirs = ['io/temporal/omes']
srcDirs = [
'io/temporal/omes',
"$buildDir/generated/source/proto/main/java",
"$buildDir/generated/source/proto/main/grpc",
]
}
proto {
srcDirs = ['../proto/harness/api']
include 'api.proto'
}
}
test {
java {
srcDirs = ['tests']
}
}
}

protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.25.5'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.75.0'
}
}
generateProtoTasks {
all().configureEach { task ->
task.builtins {
java {}
}
task.plugins {
grpc {}
}
}
}
}

test {
useJUnitPlatform()
}
54 changes: 0 additions & 54 deletions workers/java/harness/build.gradle

This file was deleted.

38 changes: 2 additions & 36 deletions workers/java/io/temporal/omes/Main.java
Original file line number Diff line number Diff line change
@@ -1,45 +1,11 @@
package io.temporal.omes;

import io.temporal.client.WorkflowClient;
import io.temporal.common.converter.ByteArrayPayloadConverter;
import io.temporal.common.converter.DefaultDataConverter;
import io.temporal.common.converter.JacksonJsonPayloadConverter;
import io.temporal.common.converter.NullPayloadConverter;
import io.temporal.common.converter.PayloadConverter;
import io.temporal.common.converter.ProtobufJsonPayloadConverter;
import io.temporal.common.converter.ProtobufPayloadConverter;
import io.temporal.omes.harness.Harness;
import io.temporal.omes.harness.HarnessClients;
import io.temporal.omes.harness.WorkerHarness;
import io.temporal.worker.Worker;
import io.temporal.omes.apps.Registry;

public final class Main {
private Main() {}

public static void main(String... args) throws Exception {
Harness.run(app(), args);
}

private static Harness.App app() {
return new Harness.App(Main::configureWorker, Main::createClient);
}

private static WorkflowClient createClient(HarnessClients.ClientConfig config) throws Exception {
PayloadConverter[] converters = {
new NullPayloadConverter(),
new ByteArrayPayloadConverter(),
new PassthroughDataConverter(),
new ProtobufJsonPayloadConverter(),
new ProtobufPayloadConverter(),
new JacksonJsonPayloadConverter()
};
return HarnessClients.newWorkflowClient(config, new DefaultDataConverter(converters));
}

private static void configureWorker(
WorkflowClient client, Worker worker, WorkerHarness.WorkerContext context) {
worker.registerWorkflowImplementationTypes(KitchenSinkWorkflowImpl.class);
worker.registerActivitiesImplementations(
new ActivitiesImpl(client, context.errOnUnimplemented));
Registry.main(args);
}
}
29 changes: 29 additions & 0 deletions workers/java/io/temporal/omes/apps/Registry.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package io.temporal.omes.apps;

import io.temporal.omes.apps.worker.WorkerApp;
import io.temporal.omes.harness.Harness;
import java.util.Arrays;
import java.util.Map;

public final class Registry {
private static final String DEFAULT_APP_NAME = "worker";
private static final Map<String, Harness.App> REGISTRY = Map.of("worker", WorkerApp.APP);

private Registry() {}

public static void main(String... args) throws Exception {
String appName = DEFAULT_APP_NAME;
String[] harnessArgs = args;
if (args.length >= 2 && "--app".equals(args[0])) {
appName = args[1];
harnessArgs = Arrays.copyOfRange(args, 2, args.length);
}

Harness.App app = REGISTRY.get(appName);
if (app == null || appName.isEmpty()) {
throw new IllegalArgumentException(String.format("unknown Java worker app %s", appName));
}

Harness.run(app, harnessArgs);
}
}
43 changes: 43 additions & 0 deletions workers/java/io/temporal/omes/apps/worker/WorkerApp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package io.temporal.omes.apps.worker;

import io.temporal.client.WorkflowClient;
import io.temporal.common.converter.ByteArrayPayloadConverter;
import io.temporal.common.converter.DefaultDataConverter;
import io.temporal.common.converter.JacksonJsonPayloadConverter;
import io.temporal.common.converter.NullPayloadConverter;
import io.temporal.common.converter.PayloadConverter;
import io.temporal.common.converter.ProtobufJsonPayloadConverter;
import io.temporal.common.converter.ProtobufPayloadConverter;
import io.temporal.omes.harness.Harness;
import io.temporal.omes.harness.HarnessClients;
import io.temporal.omes.harness.WorkerHarness;
import io.temporal.omes.workerlib.kitchensink.ActivitiesImpl;
import io.temporal.omes.workerlib.kitchensink.KitchenSinkWorkflowImpl;
import io.temporal.omes.workerlib.kitchensink.PassthroughDataConverter;
import io.temporal.worker.Worker;

public final class WorkerApp {
public static final Harness.App APP =
new Harness.App(WorkerApp::configureWorker, WorkerApp::createClient);

private WorkerApp() {}

private static WorkflowClient createClient(HarnessClients.ClientConfig config) throws Exception {
PayloadConverter[] converters = {
new NullPayloadConverter(),
new ByteArrayPayloadConverter(),
new PassthroughDataConverter(),
new ProtobufJsonPayloadConverter(),
new ProtobufPayloadConverter(),
new JacksonJsonPayloadConverter()
};
return HarnessClients.newWorkflowClient(config, new DefaultDataConverter(converters));
}

private static void configureWorker(
WorkflowClient client, Worker worker, WorkerHarness.WorkerContext context) {
worker.registerWorkflowImplementationTypes(KitchenSinkWorkflowImpl.class);
worker.registerActivitiesImplementations(
new ActivitiesImpl(client, context.errOnUnimplemented));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.temporal.omes;
package io.temporal.omes.workerlib.kitchensink;

import io.temporal.activity.ActivityInterface;
import io.temporal.activity.ActivityMethod;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.temporal.omes;
package io.temporal.omes.workerlib.kitchensink;

import io.temporal.activity.Activity;
import io.temporal.client.WorkflowClient;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.temporal.omes;
package io.temporal.omes.workerlib.kitchensink;

import io.temporal.api.common.v1.WorkflowExecution;
import io.temporal.api.enums.v1.WorkflowIdConflictPolicy;
Expand All @@ -8,6 +8,7 @@
import io.temporal.client.WorkflowOptions;
import io.temporal.client.WorkflowStub;
import io.temporal.failure.ApplicationFailure;
import io.temporal.omes.KitchenSink;

public class ClientActionExecutor {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.temporal.omes;
package io.temporal.omes.workerlib.kitchensink;

import io.temporal.omes.KitchenSink;
import io.temporal.workflow.*;

@WorkflowInterface
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.temporal.omes;
package io.temporal.omes.workerlib.kitchensink;

import com.google.protobuf.util.Durations;
import io.temporal.activity.ActivityCancellationType;
Expand All @@ -15,6 +15,7 @@
import io.temporal.failure.CanceledFailure;
import io.temporal.failure.ChildWorkflowFailure;
import io.temporal.internal.common.SearchAttributesUtil;
import io.temporal.omes.KitchenSink;
import io.temporal.workflow.*;
import java.time.Duration;
import java.util.ArrayList;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.temporal.omes;
package io.temporal.omes.workerlib.kitchensink;

import com.google.protobuf.ByteString;
import io.temporal.api.common.v1.Payload;
Expand All @@ -11,7 +11,7 @@
import java.nio.charset.StandardCharsets;
import java.util.Optional;

final class PassthroughDataConverter implements PayloadConverter {
public final class PassthroughDataConverter implements PayloadConverter {
private static final String METADATA_ENCODING_NAME = "_passthrough";
private static final ByteString METADATA_ENCODING =
ByteString.copyFrom(METADATA_ENCODING_NAME, StandardCharsets.UTF_8);
Expand Down
1 change: 0 additions & 1 deletion workers/java/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,3 @@
*/

rootProject.name = 'omes'
include 'harness'
9 changes: 7 additions & 2 deletions workers/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,13 @@ func (r *Runner) Run(ctx context.Context, baseDir string) error {
args = append(args, "--app", r.AppName)
}
args = append(args, "worker")
case clioptions.LangDotNet, clioptions.LangRuby, clioptions.LangJava:
// .NET, Ruby, and Java just need the harness worker subcommand
case clioptions.LangJava:
if r.AppName != "" {
args = append(args, "--app", r.AppName)
}
args = append(args, "worker")
case clioptions.LangDotNet, clioptions.LangRuby:
// .NET and Ruby just need the harness worker subcommand.
args = append(args, "worker")
}

Expand Down
Loading