I’m back again with another post about the Emergency Services Application to show the new features that we just add and how to get started with the project. Some new modules were added but the start up time was reduced dramatically. During this posts I will show how to download, start and use the application in your machine.
Introduction
After doing the first release of the second version we (@calcacuervo, @ilesteban and @salaboy) were focused on allowing the builds to be much easier and correct some well known issues. We also work to get the iPhone Accelerometer and the Android Accelerometer exposed with some applications to be able to use the generated event stream to simulate the patient vital sign.
This application was built to show how to architect applications using BPM, a Rule Engine and Complex Event Processing. The aim of the application is to provide a generic architecture to implement flexible solution t hat uses the previous mentioned topics as basic principles.
The application is right now decoupled in 7 logical modules that are responsible for different activities. We tried to maintain as decoupled as possible each module to provide a flexible and pluggeable architecture. If you don’t like the implementation of one of these modules, you can easily replace it for one that cover all your needs.
Each module is a functional block that allow the overall application to run and interact with different services. This allows you to customize each module configuration to run smoothly on your specific environment.
Main Modules Introduction
The following sections describe each module responsibility:

Model
This module contains your domain objects that represent the information that your application is interested to handle. This module now contains some extra utility classes and some WorkItemHandlers that will be used by the core module. I’m planning to create a separate module with these technical assets, but for now they can live there for practical reasons.
Core
The core module contains all the Domain Specific Services interfaces and implementations. This project can be expanded as a multi module pom project in the future for storing one single service per project, allowing more flexibility for deployments.
World UI
This module allows us to see what is happening in the real world. You need to think about this module as a view of our world that allows to generate interactions. For real implementations this module can be seen as external sources of events that will be directly plugged to the core module with external connectors
Task Lists UI
We currently have two different implementations of this module. This module represent the software that is being used inside the Emergency Services company. You will find in the project source code that a Standalone implementation and a Web Application provide the same functionality. Two more implementations are being created for demonstrating best practices and for mobile phones.
Running the Application
We first need to download the source code using git from: https://github.com/Salaboy/emergency-service-drools-app
Once you get the source code in your machine go inside the project structure and run:
mvn clean install
This will build all the modules and allow you to start playing with the application. If you get problems with maven dependencies you need to add a new certificate to your JDK to allow maven download snapshots from Plug Tree (org) repositories hosted in cloudbees.com. I strongly recommend you doing this to get always the latest version of our projects.
“Make sure that java trusts the PlugTree repository by adding it’s public key to the cacerts file. To do that, follow these steps:
- Browse to
https://repository-plugtree-org.forge.cloudbees.com/snapshot/
- Select “Tools->Page Info” from the menu.
- Select the “Security” icon and then click the “View Certificate” button.
- Select the “Details” tab.
- In the “Certificate Hierarchy” pane, select “*.forge.cloudbees.com” and then click the “Export…” button at the bottom of the dialog.
- Save the certificate in a file (I used “publickey.forge.cloudbees.com”) and select the “X.509 Certificate (PEM)” format.
- Execute the following command (you may need to adjust the arguments for
alias
,keystore
, andfile
based on your installation and where you saved the public key):
sudo keytool -import -alias mail.redhat.com -keystore /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/security/cacerts -file ~/publickey.forge.cloudbees.com
When prompted, the default keystore password is “changeit”. ” -> copied from the project wiki: https://github.com/Salaboy/emergency-service-drools-app/wiki/Fedora-14-install
The Run Module
We have developed a special module that facilitates running all the application modules. we are planing to create a graphical interface to start up all the modules but it is still work in progress. Right now you can start the application using maven and one terminal per module that you want to start up.
To start up the application there are are some dependency restrictions. We obviously need to start the application core before starting the UIs.
If we are planing to use an external event generator (sensor) we need to bind it before generating emergencies in the world UI application. If we are not planning to use external sensors we can go ahead without running the sensors module.
Let’s run the following modules:
emergency-service-core, emergency-service-world-ui, emergency-service-tasklist-ui-web
For starting the application you should open three different terminals/consoles in your computer and have maven installed.
From the first terminal, standing inside the run/ module you need to run:
mvn -Pcore
Once core is started you can start world ui and task lists web ui.
From a different terminal you need to run: mvn -Pworld-ui
From a different terminal you need to run: mvn -Ptasklists-ui-web
Interacting with the application
Now that we have the main three modules running we can start interacting with the application. Let’s create and emergency and let’s try to solve it. The following video guides you through the Heart Attack Scenario.
Video direct URL: http://www.vimeo.com/25374405
Useful URLs
Git: http://git-scm.com/
Maven: http://maven.apache.org/download.html
Emergency Services Source Code: https://github.com/Salaboy/emergency-service-drools-app
To clone the source code (for having a local copy of the source code) run in your terminal:
git clone git://github.com/Salaboy/emergency-service-drools-app.git
Task Lists UI – Web Implementation: http://localhost:8081/emergency-services/
Extra Modules
I will be covering the following modules in the next blog posts:
- Dashboard UI
- Sensors
- Documentation
Thank you again for providing these
After adding Maven proxies to get all the jar files I get compile errors
[INFO] Installing /Users/gs/drools/emergency-service-drools-app/emergency-service-taskslists-ui-swing/pom.xml to /Users/gs/.m2/repository/com/wordpress/salaboy/emergencyservice/emergency-service-taskslists-ui-swing/1.0-SNAPSHOT/emergency-service-taskslists-ui-swing-1.0-SNAPSHOT.pom
[INFO]
[INFO] ————————————————————————
[INFO] Building Emergency Service – Tasks List UI (Web) 1.0-SNAPSHOT
[INFO] ————————————————————————
[INFO]
[INFO] — maven-resources-plugin:2.4.3:resources (default-resources) @ emergency-service-taskslists-ui-web —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 7 resources
[INFO]
[INFO] — maven-compiler-plugin:2.3.2:compile (default-compile) @ emergency-service-taskslists-ui-web —
[INFO] Compiling 9 source files to /Users/gs/drools/emergency-service-drools-app/emergency-service-taskslists-ui-web/target/classes
[INFO] ————————————————————-
[ERROR] COMPILATION ERROR :
[INFO] ————————————————————-
[ERROR] /Users/gs/drools/emergency-service-drools-app/emergency-service-taskslists-ui-web/src/main/java/com/wordpress/salaboy/emergencyservice/web/task/AbstractTaskFormController.java:[17,62] package com.wordpress.salaboy.smarttasks.formbuilder.api.output does not exist
LikeLike
Hi Gary, did you add the certificates to the plugtree-org repositories?
“Make sure that java trusts the PlugTree repository by adding it’s public key to the cacerts file. To do that, follow these steps:
Browse to https://repository-plugtree-org.forge.cloudbees.com/snapshot/
Select “Tools->Page Info” from the menu.
Select the “Security” icon and then click the “View Certificate” button.
Select the “Details” tab.
In the “Certificate Hierarchy” pane, select “*.forge.cloudbees.com” and then click the “Export…” button at the bottom of the dialog.
Save the certificate in a file (I used “publickey.forge.cloudbees.com”) and select the “X.509 Certificate (PEM)” format.
Execute the following command (you may need to adjust the arguments for alias, keystore, and file based on your installation and where you saved the public key):
sudo keytool -import -alias mail.redhat.com -keystore /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/security/cacerts -file ~/publickey.forge.cloudbees.com
When prompted, the default keystore password is “changeit”. ”
Sorry, it was my fault, you should do the steps with this repository: https://repository-plugtree-org.forge.cloudbees.com/snapshot/
and not this one: https://repository-plugtree.forge.cloudbees.com/snapshot/
I’m updating now the post
Cheers
LikeLike
My settings.xml re-directs all dependencies to my installation of Nexus so others in my organization won’t have to repeat this. I added proxies for the repositories in your pom and in the pom for slick. I hope someday everything will be in Maven Central. I saw your notes on the certificate but Nexus proxies them all right without it. I think I am getting all the jars now. I no longer get unsatisfied dependency errors. I am only seeing compile errors.
LikeLike
It seems http://maven.alfresco.com/nexus/content/groups/public/org/activiti/activiti-engine/5.0/activiti-engine-5.0.pom is giving 503 errors. Anyone else also having this issye
LikeLike
It seems http://maven.alfresco.com/nexus/content/groups/public/org/activiti/activiti-engine/5.0/activiti-engine-5.0.pom is giving 503 errors. Anyone else also having this issue
LikeLike
Yes it’s a temporal issue.. It’s terrible but alfresco’s repo goes down very often.
LikeLike
Ok server is up but I ran into other issues. This may be because I am using mvn2 but Im unsure.
The unit-tests need to be given at least one @Test method. I forked and will submit a pull request soon.
Running the world-ui had to be started with an explicit goals $ mvn -Pworld-ui dependency:unpack exec:exec
LikeLike
Hmm that’s weird.. you should use maven 3.0.3. and inside the run module you should run mvn -Pworld-ui.
I will be waiting your pull request! if you want to participate adding more features please let me know.
LikeLike
where is the video? I dont know how to play the demo…
LikeLike
Hi Jack, You should be able to see the video that is hosted on vimeo. Sometimes, depending on your browser the vimeo player is not loaded correctly. I will add the link after the video frame just for you to access directly through the vimeo page.
Cheers
LikeLike
Thanks a lot for the sample. Am having a look at the HornetQ connector. However when I click on the Call 0->Phone Ringing!, I get the following NullPointerException
Problem accessing /emergency-services/task/op/operator/Default/99b11f97-87e3-4a53-b471-f4f8d965ee11-@-1/Call0-%3EPhoneRinging!. Reason:
INTERNAL_SERVER_ERROR
Caused by:
java.lang.NullPointerException
at java.io.Reader.(Reader.java:61)
at java.io.InputStreamReader.(InputStreamReader.java:55)
at com.wordpress.salaboy.smarttasks.formbuilder.model.GraphTaskOperations.(GraphTaskOperations.java:48)
at com.wordpress.salaboy.smarttasks.formbuilder.configuration.BuilderDefinitionsProvider.getTaskOperationsDefinition(BuilderDefinitionsProvider.java:82)
at com.wordpress.salaboy.smarttasks.formbuilder.api.SmartTaskBuilder.getTaskOperations(SmartTaskBuilder.java:282)
at com.wordpress.salaboy.emergencyservice.web.task.AbstractTaskFormController.taskInfo(AbstractTaskFormController.java:84)
at com.wordpress.salaboy.emergencyservice.web.task.EmergencyOperatorController.taskInfo(EmergencyOperatorController.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
Any hints into where I should look. Got to figure out , its not being able to find a configuration file.But which one and where ?
InputStream taskConfigurationFile = BuilderDefinitionsProvider.class.getClassLoader().getResourceAsStream(“operationDefinitions” + System.getProperty(“file.separator”) + fileName + “.config.json”);
try
{
TaskOperationsDefinition operationsDefinitions = new GraphTaskOperations(taskConfigurationFile);
}
catch
{
…
}
Best Regards,
Franklin
LikeLike
I got a lot of messages like that
Downloading: https://repository-plugtree-org.forge.cloudbees.com/snapshot/org/jbpm/jbpm-workitems/5.2.0-SNAPSHOT/maven-metadata.xml
[WARNING] Could not transfer metadata org.jbpm:jbpm-workitems:5.2.0-SNAPSHOT/maven-metadata.xml from/to PlugTree (https://repository-plugtree-org.forge.cloudbees.com/snapshot/): Not authorized, ReasonPhrase:Authorization Required.
I’ve followed the instructions about keytool correctly, but something happens
LikeLike
Hi Suesas,
It looks like the plugtree repository was wipe out -> http://repository-plugtree-org.forge.cloudbees.com/
You shouldn’t be getting errors with that artifact, because that artifact should be also located inside jboss repositories.
Can you check your local maven repository to see if you have that artifact? I imagine that you can also have troubles with smart-tasks artifacts.
If you have those problems you can just download/clone the smart-tasks project (http://github.com/salaboy/smart-tasks), build it with mvn clean install and then you will not need to access the plugtree repositories anymore.
Cheers
LikeLike
Hi,
I have downloaded the demo (version 0.3) with Drools 5.4.0.Final and jbpm5.2, and tried to run testcase “GenericEmergencyProcedureTest” and get the following error. Please help to show me what happened.
Thanks,
Tu Bo.
>>>> I’m creating the DefaultHeartAttackProcedure procedure for emergencyId = Emergency-6694b7da-6c34-4532-8930-5be2bcefce62
This InstanceId (just generated) = f1b0c1bc-616b-46ff-b59c-7838692577fe
java.lang.NullPointerException
at org.drools.command.runtime.KBuilderSetPropertyCommand.execute(KBuilderSetPropertyCommand.java:42)
at org.drools.command.runtime.KBuilderSetPropertyCommand.execute(KBuilderSetPropertyCommand.java:27)
at org.drools.grid.impl.GridNodeServer$1$1.execute(GridNodeServer.java:135)
at org.drools.grid.impl.GridNodeServer.messageReceived(GridNodeServer.java:65)
at org.drools.grid.impl.MultiplexSocket.messageReceived(MultiplexSocket.java:33)
at org.drools.grid.remote.mina.MinaIoHandler.messageReceived(MinaIoHandler.java:69)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:716)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:427)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:245)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:426)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:692)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:645)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:634)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:66)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1078)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
>>> Disconnecting Client = tasksQueue
LikeLike
Hello everybody!
I can’t run or compile Emergency Service project for some months, because I get a “Access denied” from this repository “https://repository-plugtree-org.forge.cloudbees.com/snapshot/”
However I use:
– alias: mail.redhat.com
– password: changeit
Downloading: https://repository-plugtree-org.forge.cloudbees.com/snapshot/org/drools/knowledge-api/5.3.1-SNAPSHOT/maven-metadata.xml
[WARNING] Could not transfer metadata org.drools:knowledge-api:5.3.1-SNAPSHOT/maven-metadata.xml from/to PlugTree (https://repository-plugtree-org.forge.cloudbees.com/snapshot/): Access denied to https://repository-plugtree-org.forge.cloudbees.com/snapshot/org/drools/knowledge-api/5.3.1-SNAPSHOT/maven-metadata.xml. Error code 401, Authorization Required
LikeLike
Hi, thanks for the interest. I will be cleaning the code soon. I didn’t get time yet to review exactly what is happening with those servers.
If you want to build the project as it is, I suggest you to clone the smart tasks projects and build it locally to resolve those dependencies.
Everything should work if you do that and don’t rely on the cloudbees build for that.
Cheers
LikeLike
Thanks for your response
I try that
LikeLike
Hi Salaboy !
I get this exception into the Core console, after click on “complete” button with “control” actor (Tasklists Web UI) :
Exception in thread “Thread-38” java.lang.RuntimeException: Client Exception with class class org.jbpm.task.service.hornetq.HornetQTaskClientConnector$1 using port 5446
at org.jbpm.task.service.hornetq.HornetQTaskClientConnector$1.run(HornetQTaskClientConnector.java:118)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.IllegalArgumentException: Unexpected collection type: class com.wordpress.salaboy.model.SelectedProcedures
at org.jbpm.workflow.instance.node.ForEachNodeInstance$ForEachSplitNodeInstance.evaluateCollectionExpression(ForEachNodeInstance.java:134)
at org.jbpm.workflow.instance.node.ForEachNodeInstance$ForEachSplitNodeInstance.internalTrigger(ForEachNodeInstance.java:81)
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:122)
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:185)
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:150)
at org.jbpm.workflow.instance.node.CompositeNodeInstance$CompositeNodeStartInstance.triggerCompleted(CompositeNodeInstance.java:260)
at org.jbpm.workflow.instance.node.CompositeNodeInstance$CompositeNodeStartInstance.internalTrigger(CompositeNodeInstance.java:256)
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:122)
at org.jbpm.workflow.instance.node.CompositeNodeInstance.internalTrigger(CompositeNodeInstance.java:88)
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:122)
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:185)
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:150)
at org.jbpm.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:47)
at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:162)
at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:143)
at org.jbpm.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:239)
at org.jbpm.workflow.instance.node.HumanTaskNodeInstance.triggerCompleted(HumanTaskNodeInstance.java:90)
at org.jbpm.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:301)
at org.jbpm.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:277)
at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:326)
at org.drools.process.instance.impl.DefaultWorkItemManager.completeWorkItem(DefaultWorkItemManager.java:116)
at org.jbpm.task.service.hornetq.CommandBasedHornetQWSHumanTaskHandler$GetResultContentResponseHandler.execute(CommandBasedHornetQWSHumanTaskHandler.java:303)
at org.jbpm.task.service.TaskClientHandler.messageReceived(TaskClientHandler.java:153)
at org.jbpm.task.service.hornetq.HornetQTaskClientHandler.messageReceived(HornetQTaskClientHandler.java:55)
at org.jbpm.task.service.hornetq.HornetQTaskClientConnector$1.run(HornetQTaskClientConnector.java:107)
… 1 more
I think that JBPM5.xsd is missing because I get “Error 404” with “http://plugtree.org/smart-tasks/JBPM5.xsd” URL. I found this link into UIHelper.config.xml (Tasklists Module)
Can you send me by mail or add JBPM5.xsd file
Thanks,
Fuetit
LikeLike
Hi there,
did you start all the modules? Are you running the master branch? or another one?
Cheers
LikeLike
Hi
I start Core, Tasklists and Citymap
And I run master branch
Thanks
LikeLike
Hi Salaboy,
I have moved honetQ properties (UIHelper.config.xml) into Java classes of SmartTask FormBuilder component and I get the same exception:
RuntimeException: Client Exception with class class org.jbpm.task.service.hornetq.HornetQTaskClientConnector$1 using port 5446
at org.jbpm.task.service.hornetq.HornetQTaskClientConnector$1.run(HornetQTaskClientConnector.java:118)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.IllegalArgumentException: Unexpected collection type: class com.wordpress.salaboy.model.SelectedProcedures)
….
I get this exception with master, v3, v4 branch and under linux and windows platform.
Thanks
LikeLike
What exactly are you doing when that error happens?
Can you share your screen with the error?
Does it happens when you complete the task? Which values are you including in the form?
LikeLike
Hi Salaboy
I find the problem, I change drools version 5.4.0 to 5.3.1 in master branch.
The emergency service demonstration is running (1 Core, 2 Tasklists, 3 Citymap) and HeartAttack and Fire scenario are completed.
Thanks
LikeLike
Cool, thanks for reporting back!
LikeLike
Hi Salaboy,
I’m getting the failures with the core service:
ERROR] Failed to execute goal on project emergency-service-core: Could not resolve dependencies for project com.wordpress.salaboy.emergencyservice:emergency-service-core:jar:0.3-SNAPSHOT: The following artifacts could not be resolved: com.wordpress.salaboy.smarttasks:smart-tasks-api:jar:1.0-SNAPSHOT, com.wordpress.salaboy.smarttasks:smart-tasks-jbpm5-impl:jar:1.0-SNAPSHOT: Could not find artifact com.wordpress.salaboy.smarttasks:smart-tasks-api:jar:1.0-SNAPSHOT in slickrepo (http://slick.cokeandcode.com/mavenrepo/) -> [Help 1]
Appreciate help
Cheers
Nbhangur
LikeLike
I do not even know how I stopped up here, however
I believed this publish used to be great. I don’t recognise
who you are however definitely you are going to a famous blogger
in case you are not already. Cheers!
LikeLike