Git Product home page Git Product logo

vlingo / xoom-designer Goto Github PK

View Code? Open in Web Editor NEW
83.0 10.0 15.0 17.72 MB

The VLINGO XOOM Designer to guide you in rapid delivery of low-code to full-code Reactive, Event-Driven Microservices and Applications using DOMA, DDD, and other approaches.

Home Page: https://vlingo.io

License: Mozilla Public License 2.0

JavaScript 1.64% CSS 0.06% HTML 0.33% Java 80.50% Batchfile 0.01% Svelte 7.01% SCSS 0.02% FreeMarker 10.26% Dockerfile 0.05% Fluent 0.14%
vlingo xoom vlingo-xoom accelerator project jumpstart jump-start boot bootstrap source-generation

xoom-designer's People

Contributors

abdullahcalisir12 avatar d-led avatar danilo-ambrosio avatar dependabot[bot] avatar florian-schoenherr avatar hamzajg avatar hurelhuyag avatar jakzal avatar pflueras avatar vaughnvernon avatar yuri-sergiichuk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xoom-designer's Issues

Request : Consider adding a serialization mecanism in the xoom gui

During a modeling session the xoom gui modeler freezed to death. I had to kill its process. All the work done was lost.
I submit a request to include a serialization mecanism to the xoom gui modeler so that it may be dismissed, killed, stopped and then relaunched without loosing the work done using a data deserialization process.

Wrong type in restoreSnapshot in generated Entity

The EventSourced entity generated by xoom starter attempts to override "restoreSnapshot", but the declared generic type is wrong. It is probably hardcoded by mistake to , but should be whatever state the entity use:

Example of a generated entity named JournalEntity with a state of type JournalState:

    public final class JournalEntity extends EventSourced implements Journal {
      private JournalState state;
    
      ...
    
      /*
       * Restores my initial state by means of {@code state}.
       *
       * @param snapshot the {@code JournalState} holding my state
       * @param currentVersion the int value of my current version; may be helpful in determining if snapshot is needed
       */
      @Override
      protected <AccountState> void restoreSnapshot(final JournalState snapshot, final int currentVersion) {
        // OVERRIDE FOR SNAPSHOT SUPPORT
        // See: https://docs.vlingo.io/vlingo-lattice/entity-cqrs#eventsourced
      }

xoom gui code generation expects mvnw to be launchable in current path

When mvnw is not launchable in current path, the xoom gui emits the following exception at the generation step:

16:12:51.035 [pool-2-thread-6] DEBUG io.vlingo.actors.Logger - errorStrings: []
io.vlingo.xoom.starter.task.projectgeneration.ProjectGenerationException: Failed.
sh: 1: mvnw: not found
	at io.vlingo.xoom.starter.task.steps.StatusHandler.lambda$failureHandling$4(StatusHandler.java:57)
	at io.vlingo.xoom.starter.task.steps.StatusHandler.handle(StatusHandler.java:42)
	at io.vlingo.xoom.starter.task.steps.StatusHandlingStep.process(StatusHandlingStep.java:19)
	at io.vlingo.xoom.starter.task.projectgeneration.ProjectGenerationManager.lambda$processSteps$1(ProjectGenerationManager.java:19)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
	at io.vlingo.xoom.starter.task.projectgeneration.ProjectGenerationManager.processSteps(ProjectGenerationManager.java:19)
	at io.vlingo.xoom.starter.task.projectgeneration.WebBasedProjectGenerationManager.run(WebBasedProjectGenerationManager.java:15)
	at io.vlingo.xoom.starter.task.projectgeneration.WebBasedProjectGenerationManager.run(WebBasedProjectGenerationManager.java:11)
	at io.vlingo.xoom.starter.task.TaskManager.manage(TaskManager.java:17)
	at io.vlingo.xoom.starter.restapi.GenerationSettingsResource.runProjectGeneration(GenerationSettingsResource.java:58)
	at io.vlingo.common.BasicCompletes$Executables.executeActions(BasicCompletes.java:484)
	at io.vlingo.common.BasicCompletes$Executables.registerWithExecution(BasicCompletes.java:436)
	at io.vlingo.common.BasicCompletes$BasicActiveState.registerWithExecution(BasicCompletes.java:852)
	at io.vlingo.common.BasicCompletes.andThen(BasicCompletes.java:67)
	at io.vlingo.common.BasicCompletes.andThen(BasicCompletes.java:86)
	at io.vlingo.xoom.starter.restapi.GenerationSettingsResource.startGeneration(GenerationSettingsResource.java:44)
	at io.vlingo.http.resource.RequestHandler1.lambda$null$0(RequestHandler1.java:57)
	at io.vlingo.http.resource.RequestExecutor.executeRequest(RequestExecutor.java:25)
	at io.vlingo.http.resource.RequestHandler1.lambda$handle$1(RequestHandler1.java:57)
	at io.vlingo.http.resource.RequestHandler1.lambda$execute$4(RequestHandler1.java:78)
	at io.vlingo.http.resource.RequestExecutor.executeRequest(RequestExecutor.java:25)
	at io.vlingo.http.resource.RequestHandler1.lambda$execute$5(RequestHandler1.java:80)
	at io.vlingo.http.resource.RequestHandler.runParamExecutor(RequestHandler.java:62)
	at io.vlingo.http.resource.RequestHandler1.execute(RequestHandler1.java:80)
	at io.vlingo.http.resource.RequestHandler1.execute(RequestHandler1.java:87)
	at io.vlingo.http.resource.ResourceRequestHandlerActor.lambda$handleFor$3(ResourceRequestHandlerActor.java:45)
	at io.vlingo.http.resource.ResourceRequestHandlerActor.handleFor(ResourceRequestHandlerActor.java:31)
	at io.vlingo.http.resource.ResourceRequestHandlerActor.handleFor(ResourceRequestHandlerActor.java:51)
	at io.vlingo.http.resource.ResourceRequestHandler__Proxy.lambda$handleFor$e376e271$1(ResourceRequestHandler__Proxy.java:46)
	at io.vlingo.actors.LocalMessage.internalDeliver(LocalMessage.java:121)
	at io.vlingo.actors.LocalMessage.deliver(LocalMessage.java:53)
	at io.vlingo.actors.plugin.mailbox.concurrentqueue.ConcurrentQueueMailbox.run(ConcurrentQueueMailbox.java:108)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at java.base/java.lang.Thread.run(Thread.java:832)

Adding a launchable mvnw to the path with an accessible .mvn folder solves the issue and the gui is able to generate the code.

Compiling Project gives Freemarker Error

I'm trying out Xoom Developer and I hit a snag. I installed Xoom Dev via Docker and that was great. I went through a couple scenarios quickly and I had one failure-to-generate without an error and then I succeeded in generating a project with a super simple domain and CQRS turned off and things. I was able to load up that project in Intellij but mvn clean package failed with a freemarker error. It seems like the bug is deep inside vlingo so I couldn't see any code for me to be able to change. I tried this once with the UI generation toggled on and once with the UI generation toggled off and both gave freemarker errors that caused the builds to fail. mvn compile works fine but mvn package does not. Any help would be appreciated.

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project hello-eric: Compilation failure
[ERROR] freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:
[ERROR]   ==> imports  [in template "codegen/java/RestResource.ftl" at line 21, column 8]
...
[ERROR]   FTL stack trace ("~" means nesting-related):
[ERROR]       - Failed at: #list imports as import  [in template "codegen/java/RestResource.ftl" at line 21, column 1]

Here is my designer-model.json (originally downloaded as com.cfm.event.json because the package name was com.cfm.event)
designer-json.txt

Add Content-Type response header to generated Resources

According to https://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1:

"Any HTTP/1.1 message containing an entity-body SHOULD include a Content-Type header field defining the media type of that body"

It further states that if not provided and if the client is unable to infer the type, it should be treated as "application/octet-stream" which will fail to correctly decode extended UTF characters. E.g. 'Å' becomes 'Ã�'. For that reason it is suggested that the generated resources adds the ResponseHeader.contentType("application/json; charset=utf-8") (or similar) header when constructing its responses.

names of statically imported methods may conflict with business level code

Context : a User business object has been defined in xoom gui code generator. Consequently, a UserResource class has been created by the framework. In this class the ResourceBuilder class is statically imported :

import static io.vlingo.http.resource.ResourceBuilder.*;

If some business methods are defined for the User class, whose name conflict with the ResourceBuilder methods, the compilation fails.

For instance :

  @Override
  public Resource<?> routes() {
     return resource("UserResource",
        post("/users")
            .body(UserData.class)
            .handle(this::create),
        put("/users/{id}/")
            .param(String.class)
            .body(UserData.class)
            .handle(this::modify),
        delete("/users/{id}/")
            .param(String.class)
            .param(UserData.class)
            .handle(this::delete),
        get("/users")
            .handle(this::users)
     );
  }

If a put, post, get or delete method are defined by the user in the xoom gui, those are defined as member methods in the UserResource (this::delete) and the compiler tries to use them. If they match, the local methods are used, which will cause bugs. If they do not match, the compiler does not try to use the ResourceBuilder's ones and fails.
The solution is to use a normal non static import and to explicitly mention the ResourceBuilder when using one of its methods.

  @Override
  public Resource<?> routes() {
     return resource("UserResource",
        ResourceBuilder.post("/users")
            .body(UserData.class)
            .handle(this::create),
        ResourceBuilder.put("/users/{id}/")
            .param(String.class)
            .body(UserData.class)
            .handle(this::modify),
        ResourceBuilder.delete("/users/{id}/")
            .param(String.class)
            .param(UserData.class)
            .handle(this::delete),
        ResourceBuilder.get("/users")
            .handle(this::users)
     );
  }

[UI] Aggregate Facsimiles Should Be Required Height, Not Maximum Height

In the Aggregates frame (not dialog) all of the individual aggregate stacks must currently be the same height. So if one aggregate is by necessity 3x taller than N others, the N others must be stretched to the same height. This looks strange and it also makes it inconvenient to click the pencil edit icon. Can we please size each aggregate to the height it requires, rather than making them all stretch to the height of the tallest one?

image

Actor instantiation failed because: No constructor matches the given number of parameters.

Describe the bug
We created a project with the vlingo-xoom-starter. Our project is an implementation for the vlingo-stock-trader. We adapt the generated project a little bit and we get an exception that the actor cannot be initialized because the constructors did not match the given number of parameters. The root cause is in the ActorFactory line 68-88.

To Reproduce
Steps to reproduce the behavior:

  1. Go to the branch init_feedback_project of the stocktrader project
  2. Setup the postgres database: docker-compose up
  3. Execute the program with: mvn exec:exec
  4. See stacktrace

Expected behavior
The project is started and I can send the health request to the feedback project.

Stacktrace
This is the Stracktrace if I execute the program:

Exception in thread "main" java.lang.NullPointerException
	at io.vlingo.actors.Stage.actorFor(Stage.java:485)
	at io.vlingo.actors.Stage.actorFor(Stage.java:106)
	at io.vlingo.actors.Stage.actorFor(Stage.java:95)
	at io.vlingo.actors.World.actorFor(World.java:126)
	at io.vlingo.xoom.storage.DefaultJournalActorBuilder.build(DefaultJournalActorBuilder.java:22)
	at io.vlingo.xoom.storage.StoreActorBuilder.from(StoreActorBuilder.java:44)
	at com.whz.feedback.infrastructure.persistence.CommandModelJournalProvider.using(CommandModelJournalProvider.java:48)
	at com.whz.feedback.infrastructure.Bootstrap.<init>(Bootstrap.java:47)
	at com.whz.feedback.infrastructure.Bootstrap.main(Bootstrap.java:89)
15:24:23.957 [pool-2-thread-6] ERROR io.vlingo.actors.Logger - Actor instantiation failed because: No constructor matches the given number of parameters.
java.lang.IllegalArgumentException: No constructor matches the given number of parameters.
	at io.vlingo.actors.ActorFactory.actorFor(ActorFactory.java:88) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.createRawActor(Stage.java:761) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.actorProtocolFor(Stage.java:526) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.actorFor(Stage.java:484) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.actorFor(Stage.java:106) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.actorFor(Stage.java:95) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.World.actorFor(World.java:126) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.xoom.storage.DefaultJournalActorBuilder.build(DefaultJournalActorBuilder.java:22) ~[vlingo-xoom-1.3.4-20201016.201022-62.jar:na]
	at io.vlingo.xoom.storage.StoreActorBuilder.from(StoreActorBuilder.java:44) ~[vlingo-xoom-1.3.4-20201016.201022-62.jar:na]
	at com.whz.feedback.infrastructure.persistence.CommandModelJournalProvider.using(CommandModelJournalProvider.java:48) ~[classes/:na]
	at com.whz.feedback.infrastructure.Bootstrap.<init>(Bootstrap.java:47) ~[classes/:na]
	at com.whz.feedback.infrastructure.Bootstrap.main(Bootstrap.java:89) ~[classes/:na]
15:24:23.959 [pool-2-thread-6] ERROR io.vlingo.actors.Logger - vlingo/actors: FAILED: Actor instantiation failed because: No constructor matches the given number of parameters.
java.lang.IllegalArgumentException: Actor instantiation failed because: No constructor matches the given number of parameters.
	at io.vlingo.actors.Stage.createRawActor(Stage.java:764) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.actorProtocolFor(Stage.java:526) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.actorFor(Stage.java:484) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.actorFor(Stage.java:106) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.actorFor(Stage.java:95) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.World.actorFor(World.java:126) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.xoom.storage.DefaultJournalActorBuilder.build(DefaultJournalActorBuilder.java:22) ~[vlingo-xoom-1.3.4-20201016.201022-62.jar:na]
	at io.vlingo.xoom.storage.StoreActorBuilder.from(StoreActorBuilder.java:44) ~[vlingo-xoom-1.3.4-20201016.201022-62.jar:na]
	at com.whz.feedback.infrastructure.persistence.CommandModelJournalProvider.using(CommandModelJournalProvider.java:48) ~[classes/:na]
	at com.whz.feedback.infrastructure.Bootstrap.<init>(Bootstrap.java:47) ~[classes/:na]
	at com.whz.feedback.infrastructure.Bootstrap.main(Bootstrap.java:89) ~[classes/:na]
Caused by: java.lang.IllegalArgumentException: No constructor matches the given number of parameters.
	at io.vlingo.actors.ActorFactory.actorFor(ActorFactory.java:88) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	at io.vlingo.actors.Stage.createRawActor(Stage.java:761) ~[vlingo-actors-1.3.4-20201016.200922-51.jar:na]
	... 10 common frames omitted

And this is the content of the definition if the error occurs:
Bildschirmfoto 2020-10-20 um 15 50 55

trying to download latest starter zipped distribution retrieves a snapshot version or an HTML file

Following the documentation at https://docs.vlingo.io/vlingo-xoom/xoom-starter
curl -L -O https://github.com/vlingo/vlingo-xoom-starter/raw/master/dist/starter.zip
retrieves a SNAPSHOT one or an HTML file instead of a RELEASE version.
I first got a SNAPSHOT version (1.4.1-SNAPSHOT) and now I get this:
starter.zip

For example:

$ curl -L -O https://github.com/vlingo/vlingo-xoom-starter/raw/master/dist/starter.zip
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
100  172k  100  172k    0     0   356k      0 --:--:-- --:--:-- --:--:--  356k

NullPointerException in Sourced

We found a little bug, if you create a project with the vlingo_xoom_starter. You get the following code in the CommandModelJournalProvider for the FeedbackSubmittedEvent:

registry.register(
        new Info(
            journal, FeedbackSubmittedEvent.class, FeedbackSubmittedEvent.class.getSimpleName()));

To solve this bug, we have changed the lines as follows. This will register the actor instead of the event.

registry.register(
        new Info(
            journal, FeedbackActor.class, FeedbackActor.class.getSimpleName()));

This implementation can be found in this repository.

Retrieving an existing actor

Hello,

when I want to add a Stock to an existing Portfolio I need to call the acquireStock method.
In the defineWith method we create a new actor, but how do I retrieve the actor in the acquireStock method?
I tried to create an Address object with the same information as the one in the defineWith method but it didn't work.

See the code for reference.

static Completes<PortfolioState> defineWith(final Stage stage, final String owner) {
    final Address address = stage.world().addressFactory().uniquePrefixedWith("-p");
    final Portfolio portfolio = stage.actorFor(Portfolio.class, Definition.has(PortfolioEntity.class, Definition.parameters(address.idString())), address);
    return portfolio.portfolioCreated(owner);
}
static Completes<PortfolioState> acquireStock(final Stage stage, final String id, final String symbol, final int amount) {
    final Address address = stage.world().addressFactory().from("-p" + id);
    return stage.actorOf(PortfolioEntity.class, address).andThen((portfolio) -> portfolio.stockAcquired(symbol, amount)).andFinally();
}

[UI] Error Message When Add Button Is Disabled Due to Error

On the Aggregates dialog, if I forget to fill out one field, the [ Add ] button is never enabled. I thought that there was a bug in enabling the button until after a lot of visually rescanning I realized that I had forgotten to select an event on one of the method definitions. Could we please show a message at the bottom of the dialog, maybe to the right of [ Add ] [ Cancel ] that states what fields are in error/incomplete?

io.vlingo.xoom.cli.UnknownCommandException

Dear teams,
When startup xoom designer using cli, it raises UnknownCommandException as fowllowing:

Exception in thread "main" io.vlingo.xoom.cli.UnknownCommandException: The informed command is not supported --currentDirectory /Users/xxx/Desktop/xxx/xxx/DDD/designer
	at io.vlingo.xoom.cli.task.Task.lambda$triggeredBy$1(Task.java:44)
	at java.util.Optional.orElseThrow(Optional.java:290)
	at io.vlingo.xoom.cli.task.Task.triggeredBy(Task.java:44)
	at io.vlingo.xoom.cli.CommandLineInterfaceInitializer.main(CommandLineInterfaceInitializer.java:26)

Is there any limitation about the '--currentDirectory' args?

Thanks & Regards,
Frankie

Exotic characters in request leads to "Missing content with timeout."-error response.

I have been playing around with a XOOM Starter generated example, not using the dispatch-feature for resources. I have a running version with a Sapper-based ui, capable of creating instances of my domain object, and modify them. However, whenever I use "non-standard" characters, like æ, ø, å or é in my request data I seem to get a "Missing content with timeout."-error response.

I reckon it has something to do with encoding and content length mismatch due to the usage of "double-byte" characters, but I've been unable to figure out the remedy. I've also noticed this behaviour in the XOOM starter app itself, when I naively tried to create an aggregate with a danish name containing the danish letter 'ø'. I wonder if this a feature or a bug? (The vlingo version was 1.5.1, btw).

Below is the excerpt of an example request that fails (produced when pushing the Generate-button on the last page of the XOOM starter UI). The only difference in this request, from one that succeeds, is that I've replaced the 'e' in 'project' with an 'æ' in the project directory path (see the "projectDirectory" path below).

(copied from chromes DevTools-section):

GENERAL:

Request URL: http://localhost:19090/api/generation-settings
Request Method: POST
Status Code: 400 Bad Request
Remote Address: [::1]:19090
Referrer Policy: strict-origin-when-cross-origin

REQUEST HEADERS:

Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: da,en-US;q=0.9,en;q=0.8,en-GB;q=0.7
Connection: keep-alive
Content-Length: 3250
Content-Type: application/json
dnt: 1
Host: localhost:19090
Origin: http://localhost:19090
Referer: http://localhost:19090/generation
sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
{context: {groupId: "com.capfire.healthcare", artifactId: "journal", artifactVersion: "0.0.2",…},…}
context: {groupId: "com.capfire.healthcare", artifactId: "journal", artifactVersion: "0.0.2",…}
deployment: {clusterNodes: 3, type: "DOCKER", dockerImage: "journal-app", kubernetesImage: "", kubernetesPod: ""}
model: {,…}
projectDirectory: "/Users/boerrild/Work/learn/vlingo/xoom-start/projæct"
useAnnotations: false
useAutoDispatch: false

RESPONSE HEADERS:

Content-Length: 29

REPONSE BODY

Missing content with timeout.

Another difference from the succeeding request, is the Content-Length, which is 3249.

(Fun-fact: The danish letter 'æ' is the concatenation of 'a' and 'e' and is pronounced like the second 'e' in 'eject')

missing static import assertNotNull

Just ran into a small code generation issue for the test sources.

When using the datetime type for a state field the tests generate an assertNotNull check on the datetime field. But no static import is added for it causing a compile error.

unable to run

try running on MacOS

first issue
./xoom
bash: ./xoom: /bin/bash^M: bad interpreter: No such file or directory

explanation is here
The ^M is a carriage return character. Linux uses the line feed character to mark the end of a line, whereas Windows uses the two-character sequence CR LF. Your file has Windows line endings, which is confusing Linux.

after fixing this

second issue
bash-3.2$ ./xoom
Error: Unable to access jarfile /xxx/starter/bin/vlingo-xoom-starter-dist.jar

in bin directory is only vlingo-xoom-starter-1.3.0.jar

Updating from localStorage in Aggregate Dialog

@abdullahcalisir12 I think this one is related to #20 and #21 that was evidential not actually fixed, or at least it is still a problem if *reentering the GUI with the previous project description already in localStorage.

  • What is meant by reentering the GUI is a complete shut down of the server browser tab, and then restarting the server and reaching a new browser tab. It would seem that there is necessary operation state regarding aggregates and/or value objects that is not being persisted and/or restored under the "reentering the GUI" situation.
  1. Returning to the dialog and updating some aggregate field names and/or types, does not mark the dialog as changed so the Update button is perpetually disabled.
  2. Returning to the dialog when Value Objects are in use in the aggregate type, there is no way to edit existing Value Objects. The Value Object types seem to not exist in localStorage as separate definitions, or are not being considered as existing. However, the aggregate definition still has fields that have a Value Object type, but the Value Object type seems to have no meaning other than the name.

Framework generated code and business code may conflict

Context : a Building object has been defined in the gui. The code generator produced an interface Building with the following static method :

  static Completes<BuildingState> create(final Stage stage, final String id, final String name, final String address) {
    final Address address = stage.world().addressFactory().uniquePrefixedWith("g-");
    final Building building = stage.actorFor(Building.class, Definition.has(BuildingEntity.class, Definition.parameters(address.idString())), address);
    return building.create(id, name, address);
  }

There is a name conflict between the framework code and the business code on the address field. A basic workaround in this case was to change the framework's address variable to _address. However, in general:

  • no assumption should be made on the actual business code by the framework (it should be agnostic of the actual business' variables and methods' names and work despite of this),
  • the framework code should be encapsulated so that it cannot interfere with the generated user code.

In this case, this part should be completly encapsulated :

    final Address address = stage.world().addressFactory().uniquePrefixedWith("g-");
    final Building building = stage.actorFor(Building.class, Definition.has(BuildingEntity.class, Definition.parameters(address.idString())), address);

Improve Generation Output Directory

The Generation page currently defaults the output path to D:\..., which is possibly valid only for a Windows based filesystem. It may not be valid at all since some Windows filesystems will not have a D: drive.

The Generation page should instead default the project generation directory to a value that represents the current user operating environment.

String generationPath = System.getProperty("user.home") + File.separator + basePackageName + generationCount;

The basePackageName is the String value that has been entered in the Context page. This implies that the basePackageName must be set prior to generation, and the generationPath must change when the basePackageName changes.

The generationCount suffix is initially the value 1. Every generation performed following the first the generationCount is incremented by 1, yielding 2, 3, 4...

The increasing value of generationCount can be manually deleted by the user in order to overwrite the previous generation, if desired. Requiring user editing forces a clear and explicit user choice, not am implied determination by Starter that could be responsible for loss of work.

Aggregate Dialog Needs Error Summary Near Disabled Update Button

When there are one or more errors detected on the Aggregate Dialog it can be difficult to find where the actual errors are.

Please create an error summary in a scrollable listbox centered between [Save] / [Update] and [Cancel] to the left and [Clear Fields] to the right. as follows:

                 +------------------------------------------------+   
                 | • State field 'completed' missing type     | ↑ |           
[Save] [Cancel]  | • API 'POST /trades' requires method       | ↓ |   [Clear Fields]
                 +------------------------------------------------+              

Starter UI for Value Objects: Edit and Scope

  • The Value Object combo prevents editing the Value Object fields. When clicking on the VO name, the state fields are not refreshed, so user can only edit the Aggregate state fields.

  • The Value Objects created in the context of a given Aggregate are not available for other Aggregate.

  • Questions? Ask @danilo-ambrosio

Xoom-Designer Generation Failure

Action: Project Generation
OS: Windows 10
Java Version: 1.8.0_312
Designer Version: 1.8.9-SNAPSHOT
Target: filesystem
Error Type: CODEGEN_FAILURE
Designer Model:

 {
"context": {
"groupId": "com.archforce",
"artifactId": "order-taking",
"artifactVersion": "1.0.0",
"packageName": "com.archforce.ordertaking"
},
"model": {
"persistenceSettings": {
"storageType": "JOURNAL",
"useCQRS": true,
"projections": "EVENT_BASED",
"database": "IN_MEMORY",
"commandModelDatabase": "MYSQL",
"queryModelDatabase": "MYSQL"
},
"aggregateSettings": [
{
"api": {
"rootPath": "/orders",
"routes": []
},
"aggregateName": "Order",
"stateFields": [
{
"name": "id",
"type": "String"
}
],
"methods": [
{
"name": "accept",
"parameters": [],
"useFactory": true,
"event": "OrderCreated"
},
{
"name": "validate",
"parameters": [],
"useFactory": false
},
{
"name": "price",
"parameters": [],
"useFactory": false
}
],
"events": [
{
"name": "OrderCreated",
"fields": [
"id"
]
},
{
"name": "OrderValidated",
"fields": [
"id"
]
},
{
"name": "OrderPriced",
"fields": [
"id"
]
}
],
"consumerExchange": {
"receivers": []
},
"producerExchange": {
"schemaGroup": "",
"outgoingEvents": []
}
}
],
"valueObjectSettings": [
{
"name": "UnvalidatedCustomerInfo",
"fields": [
{
"name": "firstName",
"type": "String",
"collectionType": ""
},
{
"name": "lastName",
"type": "String",
"collectionType": ""
},
{
"name": "emailAddress",
"type": "String",
"collectionType": ""
}
]
},
{
"name": "UnvalidatedAddress",
"fields": [
{
"name": "addressLine1",
"type": "String",
"collectionType": ""
},
{
"name": "addressLine2",
"type": "String",
"collectionType": ""
},
{
"name": "addressLine3",
"type": "String",
"collectionType": ""
},
{
"name": "addressLine4",
"type": "String",
"collectionType": ""
},
{
"name": "city",
"type": "String",
"collectionType": ""
},
{
"name": "zipCode",
"type": "String",
"collectionType": ""
}
]
},
{
"name": "UnvalidatedOrderLine",
"fields": [
{
"name": "orderLineId",
"type": "String",
"collectionType": ""
},
{
"name": "productCode",
"type": "String",
"collectionType": ""
},
{
"name": "quantity",
"type": "float",
"collectionType": ""
}
]
}
]
},
"deployment": {
"type": "NONE",
"dockerImage": "",
"kubernetesImage": "",
"kubernetesPod": "",
"clusterTotalNodes": 3,
"clusterPort": 50011,
"producerExchangePort": 19762,
"httpServerPort": 8081,
"pullSchemas": false
},
"schemata": {
"host": "localhost",
"port": 9019
},
"projectDirectory": "C:\Users\luogl\VLINGO-XOOM\com.archforce\order-taking1",
"useAnnotations": true,
"useAutoDispatch": true,
"generateUIWith": "ReactJS",
"generateUI": false
}

Stacktrace:
java.lang.NullPointerException
at io.vlingo.xoom.designer.codegen.java.model.aggregate.EventHandler.equals(EventHandler.java:43)
at java.util.HashMap.getNode(HashMap.java:580)
at java.util.HashMap.containsKey(HashMap.java:597)
at java.util.HashSet.contains(HashSet.java:204)
at java.util.stream.DistinctOps$1$2.accept(DistinctOps.java:173)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
at io.vlingo.xoom.designer.codegen.java.model.aggregate.EventHandler.from(EventHandler.java:28)
at io.vlingo.xoom.designer.codegen.java.model.aggregate.AggregateTemplateData.(AggregateTemplateData.java:50)
at io.vlingo.xoom.designer.codegen.java.model.ModelTemplateDataFactory.loadTemplates(ModelTemplateDataFactory.java:54)
at io.vlingo.xoom.designer.codegen.java.model.ModelTemplateDataFactory.lambda$from$0(ModelTemplateDataFactory.java:40)
at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:269)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
at io.vlingo.xoom.designer.codegen.java.model.ModelTemplateDataFactory.from(ModelTemplateDataFactory.java:41)
at io.vlingo.xoom.designer.codegen.java.model.ModelGenerationStep.buildTemplatesData(ModelGenerationStep.java:21)
at io.vlingo.xoom.codegen.template.TemplateProcessingStep.process(TemplateProcessingStep.java:22)
at io.vlingo.xoom.designer.ModelProcessingManager.lambda$processSteps$3(ModelProcessingManager.java:67)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:485)
at io.vlingo.xoom.designer.ModelProcessingManager.processSteps(ModelProcessingManager.java:67)
at io.vlingo.xoom.designer.ModelProcessingManager.lambda$generate$1(ModelProcessingManager.java:36)
at io.vlingo.xoom.common.completes.FutureCompletes$State.lambda$functionWrapper$8(FutureCompletes.java:576)
at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:616)
at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:591)
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
at java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:575)
at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:943)
at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:457)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)

[UI] Aggregate Dialog API URI Path Confusion

We are trying too hard to enforce the use of an .../{id}/... in the URI path that it's causing problems. Literally I am prevented from editing the URI prior to the /{id}/ text. This causes big problems in the API design. The following should work:

Root path:
/
Path:
animalTypes              POST ...
Path:
/animalTypes/{id}/name    PATCH ...
...

Instead I am forced to have the /{id}/ as the first segment of the URI and I can't override it. This means that the above PATCH example would have to be like this, which is wrong:

Root path:
/
Path:
/ animalTypes    POST ...  
Path:
/{id}/animalTypes/name     PATCH ...
...

Thus if I want to design the API to be anywhere near to correct, I am forced to rework the design and also use a trailing / where there should not be one (or it is not required nor does it make sense):

Root path:
/animalTypes   <=== move the prefix here
Path:
/     POST ...   <=== requires trailing / such as: /animalTypes/    because the Path text cannot be empty
Path:
/{id}/name     PATCH ...  <===== this now works, but at the expense of the POST URL
...

Can we just allow the URI to be entered by the user as they wish and scan for the required /{id} as existing anywhere in the URL for non-POST APIs? If the /{id} doesn't exist, the it is an error. Please don't try to enforce a specific location for the /{id} pattern.

XOOM Designer Project Version Didn't Transition

On the latest git pull the pom.xml for xoom-designer was still at:

<version>1.7.1-SNAPSHOT</version>

Rather than:

<version>1.7.6-SNAPSHOT</version>

I don't know what happened, but it appears from history that the file was never updated to the correct 1.7.6-SNAPSHOT version and then accidentally overwritten with 1.7.1-SNAPSHOT.

Exception is thrown when generate project is invoked

[pool-2-thread-6] ERROR io.vlingo.actors.Logger - Exception thrown by Resource execution
io.vlingo.xoom.starter.task.template.TemplateGenerationException: Failed.
at io.vlingo.xoom.starter.task.steps.StatusHandler.lambda$failureHandling$4(StatusHandler.java:58)
at io.vlingo.xoom.starter.task.steps.StatusHandler.handle(StatusHandler.java:43)
at io.vlingo.xoom.starter.task.steps.StatusHandlingStep.process(StatusHandlingStep.java:19)
at io.vlingo.xoom.starter.task.template.TemplateGenerationManager.lambda$processSteps$1(TemplateGenerationManager.java:26)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at io.vlingo.xoom.starter.task.template.TemplateGenerationManager.processSteps(TemplateGenerationManager.java:26)
at io.vlingo.xoom.starter.task.template.TemplateGenerationManager.run(TemplateGenerationManager.java:20)
at io.vlingo.xoom.starter.task.Task.run(Task.java:44)
at io.vlingo.xoom.starter.task.TaskExecutor.execute(TaskExecutor.java:19)
at io.vlingo.xoom.starter.restapi.GenerationSettingsResource.lambda$startGeneration$0(GenerationSettingsResource.java:26)
at io.vlingo.common.BasicCompletes$Executables.executeActions(BasicCompletes.java:478)
at io.vlingo.common.BasicCompletes$Executables.registerWithExecution(BasicCompletes.java:436)
at io.vlingo.common.BasicCompletes$BasicActiveState.registerWithExecution(BasicCompletes.java:852)
at io.vlingo.common.BasicCompletes.andThenConsume(BasicCompletes.java:92)
at io.vlingo.common.BasicCompletes.andThenConsume(BasicCompletes.java:108)
at io.vlingo.xoom.starter.restapi.GenerationSettingsResource.startGeneration(GenerationSettingsResource.java:26)
at io.vlingo.http.resource.RequestHandler1.lambda$null$0(RequestHandler1.java:57)
at io.vlingo.http.resource.RequestExecutor.executeRequest(RequestExecutor.java:25)
at io.vlingo.http.resource.RequestHandler1.lambda$handle$1(RequestHandler1.java:57)
at io.vlingo.http.resource.RequestHandler1.lambda$execute$4(RequestHandler1.java:78)
at io.vlingo.http.resource.RequestExecutor.executeRequest(RequestExecutor.java:25)
at io.vlingo.http.resource.RequestHandler1.lambda$execute$5(RequestHandler1.java:80)
at io.vlingo.http.resource.RequestHandler.runParamExecutor(RequestHandler.java:62)
at io.vlingo.http.resource.RequestHandler1.execute(RequestHandler1.java:80)
at io.vlingo.http.resource.RequestHandler1.execute(RequestHandler1.java:87)
at io.vlingo.http.resource.ResourceRequestHandlerActor.lambda$handleFor$3(ResourceRequestHandlerActor.java:45)
at io.vlingo.http.resource.ResourceRequestHandlerActor.handleFor(ResourceRequestHandlerActor.java:31)
at io.vlingo.http.resource.ResourceRequestHandlerActor.handleFor(ResourceRequestHandlerActor.java:51)
at io.vlingo.http.resource.ResourceRequestHandler__Proxy.lambda$handleFor$e376e271$1(ResourceRequestHandler__Proxy.java:46)
at io.vlingo.actors.LocalMessage.internalDeliver(LocalMessage.java:121)
at io.vlingo.actors.LocalMessage.deliver(LocalMessage.java:53)
at io.vlingo.actors.plugin.mailbox.concurrentqueue.ConcurrentQueueMailbox.run(ConcurrentQueueMailbox.java:108)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:830)

Bugs + Improvement ideas in Dialog

If I edit one of my defined Aggregates and don't change their name, I can't Update.
If I rename them and give them back the name they had before, the validation is also triggering.

Methods should have the possiblity to either choose Query instead of or leave out Event.
I think this is pretty much a priority because of simple GET /{id} requests. Maybe this is already possible, but not expected by the UI.

The default get("/plurals") REST endpoint should be on the UI
(3.2.) and the last time I generated, it handled this::plurals which calls Aggregate.plurals(), which is undefined (in an earlier version it was defined, right?)

image
If we already do something like this, which is far less closed off than HTTP verbs, we could do this for other CRUD operations, too.

Now enough nagging, I like the new schemata interop features!
Nice work @danilo-ambrosio 😄

JDBCStateStoreActor readText() failed because: ERROR: relation "tbl_portfoliodata" does not exist

Hello,
we have created a project for a portfolio. (Same project as #4)

We want to retrieve some data (get request).
Some errors already got fixed by us. See this commit for more details.

Our latest error is the following one:

17:25:59.032 [pool-2-thread-2] ERROR i.v.s.s.s.jdbc.JDBCStateStoreActor - JDBCStateStoreActor readText() failed because: ERROR: relation "tbl_portfoliodata" does not exist
  Position: 201 for: 16
org.postgresql.util.PSQLException: ERROR: relation "tbl_portfoliodata" does not exist
  Position: 201
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2510) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2245) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:311) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:447) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:368) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:109) ~[postgresql-42.2.10.jar:42.2.10]
	at io.vlingo.symbio.store.state.jdbc.JDBCStateStoreActor.read(JDBCStateStoreActor.java:104) ~[vlingo-symbio-jdbc-1.3.4-SNAPSHOT.jar:na]
	at io.vlingo.symbio.store.state.StateStore__Proxy.lambda$read$9b0a896c$1(StateStore__Proxy.java:56) ~[vlingo-symbio-1.3.4-SNAPSHOT.jar:na]
	at io.vlingo.actors.LocalMessage.internalDeliver(LocalMessage.java:121) ~[vlingo-actors-1.3.4-SNAPSHOT.jar:na]
	at io.vlingo.actors.LocalMessage.deliver(LocalMessage.java:53) ~[vlingo-actors-1.3.4-SNAPSHOT.jar:na]
	at io.vlingo.actors.plugin.mailbox.concurrentqueue.ConcurrentQueueMailbox.run(ConcurrentQueueMailbox.java:108) ~[vlingo-actors-1.3.4-SNAPSHOT.jar:na]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_172]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_172]
	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_172]
17:25:59.041 [pool-2-thread-3] INFO  c.w.p.i.p.PortfolioQueriesActor - Query state not read for update because: ERROR: relation "tbl_portfoliodata" does not exist
  Position: 201
io.vlingo.symbio.store.StorageException: ERROR: relation "tbl_portfoliodata" does not exist
  Position: 201
	at io.vlingo.symbio.store.state.jdbc.JDBCStateStoreActor.read(JDBCStateStoreActor.java:116) ~[vlingo-symbio-jdbc-1.3.4-SNAPSHOT.jar:na]
	at io.vlingo.symbio.store.state.StateStore__Proxy.lambda$read$9b0a896c$1(StateStore__Proxy.java:56) ~[vlingo-symbio-1.3.4-SNAPSHOT.jar:na]
	at io.vlingo.actors.LocalMessage.internalDeliver(LocalMessage.java:121) ~[vlingo-actors-1.3.4-SNAPSHOT.jar:na]
	at io.vlingo.actors.LocalMessage.deliver(LocalMessage.java:53) ~[vlingo-actors-1.3.4-SNAPSHOT.jar:na]
	at io.vlingo.actors.plugin.mailbox.concurrentqueue.ConcurrentQueueMailbox.run(ConcurrentQueueMailbox.java:108) ~[vlingo-actors-1.3.4-SNAPSHOT.jar:na]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_172]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_172]
	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_172]
Caused by: org.postgresql.util.PSQLException: ERROR: relation "tbl_portfoliodata" does not exist
  Position: 201
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2510) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2245) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:311) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:447) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:368) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159) ~[postgresql-42.2.10.jar:42.2.10]
	at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:109) ~[postgresql-42.2.10.jar:42.2.10]
	at io.vlingo.symbio.store.state.jdbc.JDBCStateStoreActor.read(JDBCStateStoreActor.java:104) ~[vlingo-symbio-jdbc-1.3.4-SNAPSHOT.jar:na]
	... 7 common frames omitted

Cannot generate on Mac

When I push the final Generate-button I get an error. Well hidden in stack traces in the console, I realise that the "mvnw"-tool is missing execution permission. Maybe add a note to the README to also run

chmod 755 resources/archetypes/mvnw

in addition to

chmod 775 xoom

Working with lists within xoom designer gui

Hello,

I've tried 1.7.7 - to try the list/set feature and within the designer, I was unable to find a dialog, which would enable me to specify List/Set type on aggregate nor value object level. Is there something I should do to see that?

Thank you,
Petr

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.