Updated Raffle app so that winner can choose his prize

I updated the Raffle application so that the winner can choose his prize. I need to get this on Git. In the meantime, check the source here. It still has it so that you can pick a prize and then a random winner.

http://brie.com/brian/blog-stuff/raffle09.zip

-brian

Posted in Uncategorized | Comments Off

Cereal Hack Raffle Application

Willow Schlanger and I participated in the Cereal Hack this last weekend. We built a Raffle application. We both worked in parallel. Willow built a version in PHP and I did mine in Java. Willow’s app was the most functional in the time for our 3 minute presentation. We didn’t win any awards, but our presentation went well. I continued to work on my Java version. You can download my Java version at the following link:

https://brie.com/brian/blog-stuff/

raffle08.zip is the version at the time of this writing.

I hope to put a link to Willow’s code soon.

-brian

Posted in Uncategorized | Comments Off

Running JBoss Application Server

This is about the JBoss Application Server, commonly known as JBoss AS. I have some posts that need the JBoss application server. If you visit the JBoss website, you will notice many projects that fall under it. Make sure you look for the application server.

Download JBoss AS server from the download site. http://www.jboss.org

GNU/Linux
http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.tar.gz

or

Windows
http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip

Unzip or untar it.

GNU/Linux

some_path$ tar zxf jboss-as-7.1.1.Final.tar.gz

Windows

c:\some_path> unzip jboss-as-7.1.1.Final.zip

Note the path where you started it. If you are using Maven from a different window, set the JBOSS_HOME to it in a different console. Replace <some_path> with the actual value.

Linux

 set JBOSS_HOME=<some_path>

Windows

 $ export JBOSS_HOME=<some_path>

After downloading it, change to the bin directory and start it as follows:

GNU/Linux

$ cd bin
$ ./standalone

Windows

c:\some_path> cd bin
c:\some_path\bin> standalone.bat

JBoss AS should start. Go to your web browser and check it out. http://localhost:8080

Posted in Java | Comments Off

Maven

I have some projects that use Maven. Here are the steps to get maven. Go to the Maven website. There is Maven 2 and Maven 3. Get the Maven 3 download. The name of the download is the following:

apache-maven-3.0.4-bin.tar.gz

If you are using Windows, you can download the version with the zip extension. Download it and unpack it on your local drive. Now add it to your path.

  • Linux (bash)
    export PATH=<Maven_home_directory>/bin
  • Windows
    set PATH=<Maven_home_directory>/bin;%path%

Now test it with the following command:

mvn -version

You should see version output similar to the following:

brian@rt13:~$ mvn -version
Apache Maven 3.0.4 (r1232337; 2012-01-17 00:44:56-0800)
Maven home: /home/brian/pkg/apache-maven-3.0.4
Java version: 1.6.0_18, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/java-6-openjdk/jre
Default locale: en_US, platform encoding: UTF-8

You now have Maven working.

Posted in Java | Comments Off

Changed comment policy

In order to comment, you have to be registered now. I thought the re-Captcha would cut out spam comments, but either there are good re-Captcha crackers out there, or a lot of people looking for trackback links. I am assuming trackback is the correct term. I am also not sure if WordPress is protecting against cross site scripting attacks as it seems to allow all html characters.

I have still been hacking a lot of Java EE stuff and I hope to post more.

Posted in Uncategorized | Comments Off

Some code would be nice!

We shall see if this turns to code.

1
2
3
4
5
   public class Hello {
      public static void main(String[] args) {
        System.out.println("Hello World!");
      }
    }
18
19
20
21
22
    class Example
      def example(arg1)
        return "Hello: " + arg1.to_s
      end
    end
1
2
3
4
5
6
#include <stdio.h>
 
int main(void) {
    printf("Hello World\n");
    return 0;
}
Posted in Uncategorized | Comments Off

Using Flex SDK on Linux

I just ran into a great post for integrating the Flex SDK with Eclipse. Adobe makes a free software version of the Flex SDK. When you look around for getting started with Flex Builder, just about everything points to Flex Builder, which isn’t available for GNU/Linux anymore. It is built on top of Eclipse, so I don’t know why adobe did this, but it is just one more reason to use free software tools that some vendor can’t jerk you in their direction. Springsource has some great projects working with the Flex SDK.

Posted in Uncategorized | Comments Off

Detachable Models with Wicket (Attempt one)

Here is the Code. To run it, unzip it. You need Java and Maven. To run it and view it, just issue mvn jetty:run . Point your browser to http://localhost:8080 . You can also import it into Eclipse using File->Import->Existing Projects into Workspace and then select the directory where you unzipped it. This is built upon code created for the Wicket In Action book, although the example in the book (Chapter 4.3) for this area is just fragments that compile, yet don’t run.

The great thing about Wicket is that it stores the state on the server and can work with the back button. The bad thing about this is that the Wicket models you provide for your pages get serialized and stored in a cache. Create a successful website and you may be doomed to a lot of cache of repeated that was content fetched from the database. Wicket uses what is calls detachable models to counter this problem. This sample has the detachable model working, yet I am not sure it is doing its job. The good part is that it works and now it is just a process of seeing where the problem lies. Caching is supposed to work so that when state is saved, the objects contained in the LoadableDetachableModel are not serialized. At load time, it uses the load method. Download the code and look at the following areas.

First, I created the html for a list view.

Index.html

<div wicket:id="cheeses">
<h3 wicket:id="name">Gouda</h3>
<p wicket:id="description">Gouda is a Dutch...</p>
<p>
<span wicket:id="price">$1.99</span>
<a wicket:id="add" href="#">add to cart</a>
</p>
</div>

Then I created the Index.java that corresponds to the html.

Index.java

public class Index extends CheesrPage {
public Index() {

// LoadableDetachableModel<List<Cheese>>
CheeseDetach myDetach = new CheeseDetach(getDAO());
// ListView<Cheese> bound to "cheese" on html
CheeseList myCheeseList = new CheeseList("cheeses", myDetach, getCart());
// Add it to the page
add(myCheeseList);
[snip]
}

The java code above creates a LoadableDetachableModel called myDetach. It uses a CheeseDAO by calling getDAO() to construct it. Then, it creates a ListView called myCheeseList passing the myDetach (LoadableDetachableModel) to it. It finally adds it to the page.

The interface for CheeseDAO extends Serializable. I had to do this so it would not
produce errors.

public interface CheeseDAO extends java.io.Serializable {
public Cheese getCheese(Long id);
public List<Cheese> getCheeses();
}

This is troubling. It should not produce errors if it is not trying to serialize it. Ugh! Remove the extends java.io.Serializable from the interface, recompile and watch the output as it runs. It will throw an error (or is it an exception that recovers?) complaining that it is not serializable. Ugh again!

The bonus side is that I did get an LoadableDetachableModel working for a ListView. That was a little tricky! I may be complaining about nothing. Look at the following files from the code.

  • Index.java
  • CheeseDAO.java
  • CheeseDAOImpl.java
  • CheeseDetach.java
  • CheeseList.java

These files contain the essential details. I hope to gain more insight as to whether this really is not caching.

Posted in Wicket | Comments Off

Bind to your model better with Wicket!

In this post, I still follow the Wicket in Action book, yet continue with the process of breaking out the concept into one simple project. This post takes the model (Customer object) and ties it to the page using the CompoundPropertyModel<Customer> object. I use paramaterized generics (<Customer>) part for the methods, so no casting of the return value needed for our callback (onSubmit). The code for this can be downloaded as hippo03.zip from my site and imported in eclipse. To run the code, you need Maven and Java. To run it, just use mvn jetty:run and point your web browser to http://localhost:8080/

The process is as follows. We create object used for model. Set the default model using the setDefaultModel for the Index.java page which extends WebPage.

We set labels so that they will use the getters from the default model. Maybe someday Java will have properties like Pascal! First, here is the Java code in Index.java creating the Customer object (our Model of MVC). I use setDefaultModel to set the model for our page (Index.html). I don’t know exactly why it is not setModel() like it is in our form, but I am still getting the details on Wicket, so I hope to figure out why later.

customer = new Customer();
customer.setFirstName("Jimmy");
customer.setLastName("Dean");
customer.getAddress().setStreet("123 Easy Street");

myModel = new CompoundPropertyModel<Customer>(customer);
setDefaultModel(myModel);

firstNameLabel = new Label("firstName");
add(firstNameLabel);
lastNameLabel = new Label("lastName");
add(lastNameLabel);
addressLabel = new Label("address.street");
add(addressLabel);

This following the html for the Labels. The labels match the attributes for the object.

<tr>
<td><code>firstName in Label</code></td>
<td wicket:id="firstName"></td>
</tr>
<tr>
<td><code>lastName in Label</code></td>
<td wicket:id="lastName"></td>
</tr>
<tr>
<td><code>street.address in Label</code></td>
<td wicket:id="address.street">1234 Any Street</td>
</tr>

Now, we shall add the form(myForm), passing the model as an argument to the form. At first, I thought that myForm would get the model from the Index page, but it does not, so I passed it the model as an argument for the constructor. In myForm, we first add the model, and then the fields. The attributes for the fields match the names of the attributes in the Customer object model, and therefore, the model binds them directly matches the fields directly to the object. Below, first is the java code and then the html.

The Java code (Form.java)

setModel(myModel);

fnameField = new TextField<String>("firstName");
add(fnameField);

lnameField = new TextField<String>("lastName");
add(lnameField);

streetField = new TextField<String>("address.street");
add(streetField);

Java code in Index.java

myForm = new Form1("myform",myModel);
add(myForm);

The html (Index.html)

<tr><td>First Name</td><td><input type="text" wicket:id="firstName" /></td></tr>
<tr><td>Last Name</td><td><input type="text" wicket:id="lastName" /></td></tr>
<tr><td>Street</td><td><input type="text" wicket:id="address.street" /></td></tr>

And, when the user hits the submit button for the form, we create a callback for onSubmit behavior.

protected void onSubmit() {
Customer customer =  getModelObject();
String street = customer.getAddress().getStreet();
// Probably should use logging here!
System.out.println("Customer street is " + street);
// do something with/to the customer
}

As the book notes, this ties the data close to the form construction. Make an UML class diagram of your model, hand it to your html designer, and it seems that you are almost all good to go. I am sure there are still little devils running through the details, but this provides good abstraction and takes the developer away from dealing with low level http dirty work. Yet, the book notes that the referenced attributes in quotes can’t be easily refactored if need be. I find that it makes MVC really clean and look forward to more.

Posted in Wicket | Comments Off

OpenOffice BASE and HSQLDB in server mode

The sample database for this post can be downloaded and used with GNU/Linux. It can also be adapted to Windows and Mac.

OpenOffice Base uses hsqldb as its back end database in embedded mode. If you are a developer like me, this doesn’t normally allow you to connect other tools to the database you have created in Base. In this post, I shall explore using hsqldb in server mode. This way, you get the luxury of using Base’s interface, yet at the same time the capability to connect other tools to it such as the JBOSS tools tutorial for developing a web application to display and edit your data. If you are a PERL hacker, you can use hsqldb-ber to connect to the server. In addition, the database server is started using Maven, so your database is even extra small when you zip it, because Maven is automatically downloading the jar for when you start the database.

These are the steps to follow. First, make sure that you have Maven installed on your system and java. If you don’t, install it/them using the following command:

$ sudo apt-get install maven2
$ sudo apt-get install openjdk-6-jdk
or
$ sudo apt-get install openjdk-6-jre

Start the hsqldb employee database using the following command:

$ ./startdb.sh

I assume that you have Base already installed. Assuming that you do, you can open the database in Base by just double clicking the employee.odb and it will open in OpenOffice Base. When you open the database file, you can browse the tables, a sample query I created named itemsorderedby363 and a report named by the same thing. The odb file contains a setting to the database in server mode. You can see the database settings by going to Edit->Databse->Properties. You can connect other applications to the database, do development, and at the same time have the luxury of using OpenOffice Base GUI interface. The data in the database comes from JBoss Demo Employee Database, yet adds the connection to the database and uses Maven for the hsqldb jar dependency.

I really like hsqldb and its robustness for development. You can easily zip your database and transport it around from machine to machine with zero configuration.

 

Posted in Uncategorized | Comments Off