Tuesday, February 25, 2014

Easy Spring MVC, Maven and Intellij IDEA

Its odd that there isn't a Spring MVC Maven archetype. 

But creating a Spring MVC from one of the standard Maven archetypes is easy, and there are many tutorials online to do it. I've done it myself many times. 

I created a video that shows how to do it. I wanted to try to create a skeleton Spring MVC Maven project in Intellij IDEA in 10 minutes (spoiler: I couldn't). I wanted to do it without referring to any online articles or tutorial. So even though there aren't any Spring MVC archetypes, its really easy to do so yourself.

Here's the video:




Thursday, February 6, 2014

Correct way to use DB sequences in JPA

I have a sequence defined in an existing database (mine is PostgreSQL) for the primary key. I want to use JPA (implemented by Hibernate) to use this sequence when persisting (inserting) a new object.

The below is the correct way to do it.


First, basic JPA stuff. The column name.

Next, we need to have 2 annotations @GeneratedValue and @SequenceGenerator. With the former referring to the latter. It looks a little redundant to me, but hey... I'm just a programmer.

Third, we specify the the sequence name (as in the DB). We need to include the schema as well.

Finally, we specify the increment.

ps. I seem to need to restart the server (Glassfish 3) almost each time I make changes to JPA annotations (it was giving me "XxxXxx class is not recognized by Java persistance" etc etc). So if the above doesn't work for you, try restarting the server first.

Friday, January 24, 2014

Creating a Sencha client side app with IntelliJ IDEA and Maven

This assumes you already have a project open in IDEA. I use IDEA 13.

First create a new module. 


Type in a module name.


We will create a module from a Maven archetype (maven-archetype-webapp). In my case, the group id and artifact id aren't important.


IDEA creates the new module for us.


Second, this module will contain a Sencha GXT application, so we need to set up our dependencies. We edit our pom.xml to add in these dependencies. We are dependent on the Sencha jars, and the GWT jars (first 2 red arrows below). We also need the GWT Maven plugin, so we can compile the GWT app from IDEA (the 3rd arrow below).


Below is the text (for copy and paste purposes).
    <dependencies>
        <dependency>
            <groupId>com.sencha.gxt</groupId>
            <artifactId>gxt</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>2.5.1</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>uibinder</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>2.5.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

I think its a little irritating that the archetype does not create a java folder for me. So I have to do that. And to tell IDEA that the folder contains all the Java source files and that it should compile all the source files. Doesn't IDEA already know this? Its the standard source location after all... Oh well... We create the folder.

And indicate to IDEA that its a source folder.

(select the module, then select the new folder java, and click the "Sources" button.)



Third, we now add a GWT module (which is basically a Xxxx.gwt.xml file, plus one or more entry point classes). IDEA will create the XML file, and 1 entry point class. If necessary, more entry points can be added later. It also creates an HTML and a CSS file which will load the (GWT-compiled) Javascript which will display the GWT module.


Choose a name for the GWT module.


Fourth, we need to "change" the GWT module to a GXT module. Some Sencha inherits and stylesheets do not work with the standard GWT ones. So we open the Xxxx.gwt.xml file and modify it for GXT (below: red box). Also, I like to add a rename-to attribute. If in the future I add RPC calls to the Sencha app, this attribute will be the URL that the AJAX calls to.

Fifth, most people use GWT development mode to do quick development. To do this in IDEA, we need to create a new configuration. We create a new GWT configuration (and give it any name). Make sure the correct project module is selected (if you have more than 1 like I do). And we also tell development mode to load all our GWT modules. 





We test the configuration: running the configuration will basically start a Jetty server that serves the GWT module (in development mode).
It works.



Finally we add a Sencha widget to make sure this works with Sencha.



Done.






























Friday, July 5, 2013

Using a Publish-Subscribe messaging pattern in Vaadin

The events system described by the Book of Vaadin is quite primitive. It's a standard Observer pattern (aka Listener pattern). 

Unfortunately, since the Listener requires access to the source object, this makes it highly coupled (the listener has to know about the source). 

What's worse is, in a practical sense, since Vaadin events do not "bubble" (not on the server side at least), its very difficult "get the handler to the required component" without violating all kinds of information hiding best practices.

What we really want is a publish-subscribe architecture that is similar to Parsley's in Flex.

GWT does provide a SimpleEventBus. And Vaadin does include this. And blogger Alex Tretyakov has here a great example of how to use it. As of this writing, its the best example out there.

Wednesday, July 3, 2013

Creating a Vaadin application using M2Eclipse (aka m2e) gives an error

I use M2Eclipse (and m2e-wtp) to create a vaadin-archetype-application. It works, but M2E keeps complaining about the below error.

"Plugin execution not covered by lifecycle configuration: com.vaadin:vaadin-maven-plugin:7.1.0:update-theme (execution: default, phase: generate-sources) "

Yes its a harmless error. But its irritating for an OCD like me. This is (probably) because m2e doesn't know about some of Vaadin's Maven goals:

  1. compile-theme
  2. update-theme
The way I solve let m2e know about it is:
  1. search the pom.xml for m2e's lifecycle config. Do a search for "org.eclipse.m2e".
  2. m2e will have tried to put some goals into vaadin-maven-plugin's plugin execution. e.g. <goal>resources</goal>
  3. put in the missing <goal>compile-theme</goal> and <goal>update-theme</goal>.
  4. update the Eclipse's Maven config. The easiest way is to quick fix ⌘1.

Tuesday, March 12, 2013

Dune HD "Error: file can't be played"

I recently got a "Error: file can't be played" when I tried to play a file in my Dune HD player (it was working less than 12 hours ago).

How I solved it was to re-flash my firmware. It doesn't seem to have any adverse effect besides wasting my time. Here's how I did it in my Dune HD.


  1. Go to "Setup -> Miscellaneous -> Firmware Upgrade"
  2. Select "Check Available Updates"
  3. It tells me "no new firmware version available" (If there is a new firmware, I'd suggest upgrading. If so, you can ignore the below steps.)
  4. Select "Show all versions".
  5. Select the current version (it stated there "current")
  6. Select "Upgrade"

Hths



Player: Dune HD Smart B1
Player purchased in: 2012
Player firmware: 121018_0846

NAS: Synology DS212

Wednesday, December 21, 2011

Eclipse settings

Eclipse settings are saved in the workspace/.metadata.


So for example my workspace is /gerardsetho/workspace,
then my Subclipse repository directories are stored in: 
/gerardsetho/workspace/.metadata/.plugins/org.tigris.subversion.subclipse.core/.svnProviderState


Might be useful when upgrading Eclipse versions (e.g. I wouldn't have to retype all the SVN repositories).