I started off by redoing the original tutorial exercises from the Darkstar ServerAppTutorial and ClientTutorial. One of the goals while doing this was to come up with a basic skeleton to get a RedDwarf project up and running quickly. After getting each tutorial exercise running as a submodule in maven, I tweaked the pom's until I had a fairly clean approach.
Originally I had planned on documenting those minimal steps here. Instead, I chose to write my first maven archetype. I'm sure there are errors and such, but as you will see below, this should give you an entry point very quickly. (Getting the archetype catalog working in Nexus was another story because it took me a few hours to realize that you will get a 500 Server Error if you try to point to a repository group [like 'public'] instead of a specific repository [thus the long URL below]).
Ok, let's get started. First thing we need to do is use the archetype to create a basic structure:
I have bold-faced the actual typing involved... This will create a basic structure:F:\work>mvn archetype:generate -DarchetypeCatalog=http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-archetype-plugin:2.0-alpha-5-SNAPSHOT:generate (default-cli) @ standalone-pom ---
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml -> ardor3d-archetype (null)
2: http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml -> kryten-archetype (null)
Choose a number: : 2
[INFO] snapshot com.example.myapp:kryten-archetype:1.0-SNAPSHOT: checking for updates from eoti-public
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = '218a428a68f50b483a388f7fee54d2bb1ceec981'; remote = 'f1bcef05eca9d0e230f5dc8ff1fa0b8af1e8ab53' - RETRYING
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = '218a428a68f50b483a388f7fee54d2bb1ceec981'; remote = 'f1bcef05eca9d0e230f5dc8ff1fa0b8af1e8ab53' - IGNORING
Define value for property 'groupId': : org.eoti.kryten.test
Define value for property 'artifactId': : TestApp
Define value for property 'version': 1.0-SNAPSHOT: :
Define value for property 'package': org.eoti.kryten.test: :
Confirm properties configuration:
groupId: org.eoti.kryten.test
artifactId: TestApp
version: 1.0-SNAPSHOT (hit enter)
package: org.eoti.kryten.test (hit enter)
Y: : (hit enter)
[INFO] Parent element not overwrited in F:\work\TestApp\api\pom.xml
[INFO] Parent element not overwrited in F:\work\TestApp\client\pom.xml
[INFO] Parent element not overwrited in F:\work\TestApp\server\pom.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 25.844s
[INFO] Finished at: Sun Apr 11 23:26:34 PDT 2010
[INFO] Final Memory: 6M/11M
[INFO] ------------------------------------------------------------------------
F:\work>cd TestApp
F:\WORK\TESTAPP
│ pom.xml
│
├───api
│ │ pom.xml
│ │
│ └───src
│ └───main
│ └───java
│ └───org
│ └───eoti
│ └───kryten
│ └───test
│ └───api
│ MyApp.java
│
├───client
│ │ pom.xml
│ │
│ └───src
│ └───main
│ └───java
│ └───org
│ └───eoti
│ └───kryten
│ └───test
│ └───client
│ MyClient.java
│
└───server
│ pom.xml
│
└───src
└───main
├───java
│ └───org
│ └───eoti
│ └───kryten
│ └───test
│ └───server
│ MyServer.java
│ MyServerUser.java
│
└───resources
└───META-INF
app.properties
As you can see, this makes a multimodule project. The top-level pom specifies versions of libraries, repositories, etc. The API module provides a common library to be used by both the client and server [in this case, it just converts Strings to/from ByteBuffers. The server module is a minimalist server app and the client module is a minimalist client app (console i/o rather than swing from the tutorials).
To get started, we first need to build it
F:\work\TestApp>mvn clean installNext, we will startup a red dwarf server, deploy the app and dependencies to it, and then boot it.
F:\work\TestApp>cd serverThis utilizes a maven profile (named 'sgs-run') to do all the heavy lifting via the red dwarf maven plugin.
F:\work\TestApp\server>mvn validate -Psgs-run
In another terminal, go to the client subdirectory and start the client:
F:\work\TestApp\client>mvn validate -Pclient-runThe client-run profile just executes the client module (executable jar) with the dependencies in the classpath. When it starts up, it will log into the server then wait for you to type. Every time you hit enter, it will send the text you had typed to the server. The server will simply respond with a message telling you that it received the message. When you are done, type 'quit' or 'exit' to stop the client.
Once you are done and you want to stop the server, make sure to use the profile to stop it or you will have to kill it in the task manager (ie: do NOT use ctrl-c).
F:\work\TestApp\server>mvn validate -Psgs-stopIt will take about 1-2 minutes to shut down cleanly (in the 'sgs-run' window).
Now that you have a basic structure that you can easily run and test, start editing the code =)
NOTE: The URL has been changed:
mvn archetype:generate -DarchetypeCatalog=http://repository-malachid.forge.cloudbees.com/public-snapshot/archetype-catalog.xml
This tutorial helped me a lot.
ReplyDeleteThank you!
Glad it helped!
ReplyDeleteI tried your tutorial and I got an error platform windows 64 not supported, I believe this is because I'm running it in 64bit without the appropriate native files, any idea where I could get those? Thank you
ReplyDeleteHmmm.. The above was done on XP64... Are you running Vista, Windows7, ...?
ReplyDeleteWindows 7, using powershell
ReplyDeleteMaybe talk with mastershadow ( see their post in the forums ) as it appears they are using Windows7 64.
ReplyDeleteThanks for the tip, I'll send him a PM.
ReplyDeleteThanks for the article!
ReplyDeleteDo you know where can I get performance statements for RedDwarf? and a list of projects using it?
Thanks!
For projects using it, look here.
ReplyDeleteI'm not sure about performance statements.
Awesome Archetype Malachi. Nice Job.
ReplyDeleteThanks!
-Richard Warren
no problem! glad it helped!
ReplyDeleteExcelent maven plugin! Good job!
ReplyDeleteThank you =)
ReplyDelete