Matt RaibleMatt Raible is a writer with a passion for software. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.
You searched this site for "eclipse". 283 entries found.

You can also try this same search on Google.

[TSSJS] Apache Geronimo Prime Time with Jeff Genender

I'm sitting in Jeff's talk now, getting ready to listen to him ramble on about Geronimo. The room is about half full, and it's one of the smaller rooms. However, people are still streaming in, and it's the furthest room from the main conference area.

Jeff started his presentation with a little "Open Source Arcade" fun. The cartoon depicted a pac-man game with JBoss and Geronimo and resulted in a loud applause from the audience. This talk is going to cover Geronimo's architecture, how to use it, how to configure it, what it doesn't have and address common concerns.

Geronimo is a conglomeration of best-of-breed open source projects. Rather than reinventing the wheel, Geronimo embraces and reuses other open source projects: Axis, MX4J, ServiceMix, Spring, ActiveMQ, Jetty, Tomcat, Derby, Tranql, Apache Directory Server and OpenEJB. There's many others, but these are the headliners.

Geronimo is a carpet roll. Just like a carpet, it allows you to roll-your-own application server. Rather than using all the pieces of J2EE, you can just pick the ones you need? Currently, Geronimo ships with a collection of pre-configured assemblies: j2ee-tomcat-server, j2ee-jetty-server, minimal-tomcat-server and web-jms-tomcat-server. The last two will be available in the 1.1 release. The nickname for minimal-tomcat-server is "Little G".

Why another J2EE application server? Because J2EE is now a commodity. You used to have to spend a lot of money for J2EE servers. Now open source projects have commodotize J2EE and flattened the landscape. Also, the other application servers are LGPL and Geronimo is Apache Licensed, which is much more friendly to businesses.

Geronimo isn't just an application server, but also a top-level apache project with a healthy and active community. There are many other components coming out of this project, including:

  • The Geronimo API/Kernel/Assemblies/App Server
  • GBuild - Open Source Testing
  • DevTools - Eclipse Plugin for Geronimo Application Development with the Web Tools Platform (WTP)
  • J2EE Specifications - open source versions, eliminating the jta.jar problem you get with Maven. In my experience, most of these work, but Geronimo's javamail implementation doesn't work last time I tested it.
  • Home for OpenEJB, ActiveMQ, ServiceMix, Yoko (Corba) and XBean - all stand-alone sub-projects.

The Kernel of Geronimo *is* what is known as Geronimo. It controls the component (GBean) Lifecycle. A GBean is the Glue, the Wrapper, a Plugin to the Kernel. It conforms to JSR-77, the J2EE Management Specification and controls lifecycle, running states and naming conventions. The GBean architecture allows for simple development - you just need to implement the GBeanLifecycle, declare the GBean in a Plan (IoC) and deploy it. Plugging in 3rd party components is easy - for example Apache Directory and Quartz. Jeff wrote an article showing how to do this.

Jeff is now walking through the directory structure, which is pretty standard:

bin
config-store
deploy
docs
lib
repository (similar to Maven 1's structure)
schema
var

If you're familiar with Tomcat, Geronimo's "bin" directory is very similar. There's startup.sh/.bat, geronimo.sh and you can also use java -jar ./server.jar to start the server. Apparently, many of the scripts were copied from the Tomcat project.

Interestingly enough, my MacBook Pro's battery has been *much* more efficient today. I've been running for about 2.5 hours and the battery says it still has over an hour left. I believe this is largely because I've had my airport turned off most of the day.

Geronimo's Web Console is one of the nicer looking consoles I've seen for application servers. The user accounts for this are set in $GERONIMO_HOME/var/security/users.properties. It was donated by Abock (sp?) and I believe it's built on Pluto. For deploying applications, you can use the web console, drop WARs/EARs into the deployer directory or use the deployer tool (deployer.sh). When using the deployer tool, you'll need to have a plan file.

A plan file is an XML document (external or internal depending on nature of plan file). It's a descriptor to extend your application (setup JNDI DataSources, etc.) and similar to jboss-web.xml and weblogic.xml. Embedded examples: geronimo-application.xml, geronimo-web.xml, geronimo-ra.xml. For external plan files, you can use any name for the file. This file describes the GBean's attributes and references, as well as its dependencies. There are many different types of plans to describe information: web, application, resource adapters, security, naming references, EJB, schemas (in $GERONIMO_HOME/schemas directory).

The $GERONIMO_HOME/var/config/config.xml is Geronimo's central configuration file and allows you to override default values, as well as configure (or disable) GBeans. However, you can use the web console to configure everything in this file - and often it's much easier.

Now Jeff is going to do a demo of deploying and configuring Roller on Geronimo. This should be good, especially since he expects Murphy's Law, "if something can go wrong, it will", to come into play. He's showing us the plan file and how he had to hide a few classes, to prevent Geronimo's classes from conflicting. Jeff tried to show us how Geronimo allows you to download JDBC Drivers from w/in the console. Doh! We're in a conference room without an internet connection. Jeff had a backup plan and was able to successfully create a connection pool. After creating a security realm, he deployed roller.war and it all worked.

What Geronimo doesn't have? It lacks full clustering with respect to EJB/JNDI/Distributed cache. It *does* have full clustering with session replication and fail-over for the Tomcat web component, which fits 90% of clustering use cases. Uses Tomcat Clustering GBeans. Also, it can't run with Java 5 (only with 1.4.2) b/c the Corba component doesn't work with Java 5.

Now Jeff is doing Q&A, so I decided to try out my connecting to the Net via Bluetooth. It's actually pretty fast, GMail is surprisingly fast. From Bandwidth Speed Test, here are my results:

Communications: 87.1 kilobits per second
Storage: 10.6 kilobytes per second
1MB file download: 1.6 minutes
Subjective rating: Slow

Posted in Java at Mar 24 2006, 01:39:01 PM MST

[TSSJS] Friday Morning: RIFE and Seam

This is my 2nd day in Vegas and so far this town is treating me fairly well. I haven't lost all of my money, but the $25/hand blackjack tables haven't been kind. Yesterday, I woke up with a glass full of Berocca next to my bed - which means I passed out before drinking it. I needed it too, Matt Filios won a poker tourney and a bunch of us enjoyed "bottle table" (with Kettle One vodka) to celebrate. Spendy and good, but painful the next day.

Last night, I heard it was Crazy Bob's bachelor party, so I went to bed early to avoid the debauchery. Julie and a good friend of mine are flying in tonight, so there will be plenty of that this evening. So after a good night's sleep, I'm up early and attending the conference. The first hour has a lot of good sessions: Introduction to Seam (Gavin), Dive into RIFE (Geert), OSWorkflow (Hani) and Transforming Enterprise Java into a Commodity (Geir).

I'm sitting in Geert Bevin's session titled "Dive into RIFE" and it's a pretty small audience - maybe 20 people. Geert is the CTO of Uwyn, a small custom application development company. He's the founder of RIFE and creator of many RIFE projects: RIFE/Crud, RIFE/Jumpstart, RIFE/Continuations, Bamboo (forum), Bla-bla List (RIA todo list), Drone (Information bot) and Elephant (blog).

What is RIFE? It's a full-stack component framework to quickly and consistently develop and maintain Java web applications.

  • Integrated layers allow you to quickly get results with a minimal amount of code
  • Best practices are enforced in a pleasant way, providing many additional features and a consistent approach throughout all applications
  • Components can easily be resused in many contexts
  • Creating maintainable applications is our first goal
  • A lot of attention goes to code-level developer comfort
  • Frustration reduction by instant changes and reloads
  • Creative solutions for difficult problems
  • Embraces established standards (XHTML, HTTP, SQL, ...)
  • Geared to developing web applications and doesn't abstract away too much
  • Everything besides the web engine is designed to be independently usable
  • Attention to the whole life-cycle of your application

Geer is now talking about all the different pieces of RIFE - how it has a JDBC abstraction like Spring JDBC, web services support (even publishing of RSS Feeds) and a content management framework. Now we're going to look at RIFE/Jumpstart.

What is RIFE/Jumpstart? It's a source archive that you unzip and run. It makes it easy to start with new RIFE applications and contains everything you need (including Jetty). It has immediate support for more common development environments (X-develop, Netbeans, Eclipse, IDEA and Ant). Geert just showed us a video of getting started with Jumpstart and how you can easily use X-develop to build and deploy the app to Jetty. The Jumpstart application currently uses JUnit, but since the RIFE teams is starting to use TestNG more and more, it's likely they'll change in the near future. RIFE Jumpstart looks similar to AppFuse, except they have the save+reload problem solved - using JVM HotSwapping.

Now I've moved to the Introduction to Seam session. Gavin King is the presenter and the room is packed. It's a big room, so that's saying a lot. Gavin is talking about JSF, how backing beans work and what's in the faces-config.xml. How does Seam compare to J2EE? Much simpler code. There's fewer artifacts (no DTOs). Less noise (EJB boilerplate, Struts boilerplate). More transparent (no direct calls to HttpSession or HttpRequest). It's also much more powerful for complex problems.

JSF is amazingly flexible and extensive. EJB interceptors support a kind of "AOP lite" and EJB3 is a powerful ORM engine. Everything (except for the JSP pages) is unit testable can be tested with JUnit or TestNG. For testing the view layer, Gavin recommends using Selenium.

A backing bean is often "pure glue" and is just noise. Furthermore, it accounts for more LOC than any other component. It doesn't really decouple layers, in fact the couple is more coupled than it otherwise would be. Gavin calls this "wedding cake architecture." These applications look good in the window, but don't taste good when you eat them. I get his point, but have to disagree on the taste of wedding cake. It's always been good at the wedding's I've attended. ;-)

By default, web applications in general do not work in a multi-window application. To make it work, it generally requires a major architecture change. A couple of other areas for improvement in traditional web applications: application leaks memory (not cleaning up session objects) and "flow" is weakly defined. Navigation rules are totally ad hoc and difficult to visualize. How can this code be aware of the long-running business process?

JBoss Seam - what does it do? It unifies the EJB3 and JSF component models. It simplifies Java EE 5, filling a gap. In addition, it integrates jBPM and makes it more developer-friendly. Deprecate so-called stateless architecture. Decouple the technology from the execution environment. Run EJB3 apps in Tomcat or in TestNG or use Seam with JavaBeans and Hibernate. Gavin is using Tomcat for the first time and thinks it's hot-deploy architecture is totally broken. Of course, he usually uses JBoss and never has a problem with hot-deploy. It's interesting to hear this from Gavin, especially since I've heard from others that Hibernate breaks the reloading - and it's not the server's fault.

I'm going to head to another session now, but I did look ahead at some of Gavin's slides. Interestingly enough, the jPBM pageflow definition's XML looks quite similar to Spring Web Flow. Speaking of flows, I heard an interesting comments from someone yesterday after they attended Geert's continuations talk. Apparently, after seeing his talk, they think that RIFE's continuations offer a much more elegant solution to pageflow than these "XML programming" mechanisms.

I tried to go to Hani's OSWorkflow talk, but he was doing Q&A when I walked in. Apparently, he finished 25 minutes early. Then I walked into Geir's talk only to find Dan Deiphouse finishing up an XFire talk. Oh well, there's nothing wrong with having a few minutes to mingle between talks.

Posted in Java at Mar 24 2006, 11:56:30 AM MST 7 Comments

The Ajax Experience Redux

When I found out about The Ajax Experience, I was a little disappointed.

This is a show I'd love to attend. However, it ends the day before Mother's Day - WTF is up with that?! For those of us who happen to be family men and are planning on attending JavaOne, this sucks. If I want to attend The Ajax Experience, I'd have to fly back on Sunday and then fly back to San Fran on Monday for JavaOne. Booo hisss. Looks like I'll be missing this show.

The Ajax Experience I'll admit, I sounded like a winey little beotch when I wrote this. In reality, the opportunity to go to two shows in the same town in San Francisco is a dream come true. And some how, some way, I've managed to get Julie's blessing to do this. It's her birthday that Saturday, and Mother's Day that Sunday - yet I'm free and clear to goof off in San Francisco with a bunch of geeks. I love this woman. ;-)

Are you going to JavaOne? What about The Ajax Experience? If you're going to be in San Francisco that weekend, let me know - maybe we can grab a brewski at the Thirsty Bear.

Posted in Java at Mar 11 2006, 12:01:48 PM MST 7 Comments

Jetty 6 Maven Plugin now works with SiteMesh (and Equinox)

The 1.6 version of Equinox contains commented-out settings for Maven 2 Jetty Plugin. The reason these are commented-out is because this plugin didn't work with SiteMesh at the time. I checked again today, and it looks like they got it fixed. See Brett's post titled Developing with Jetty: Where Have You Been All My Life? to see why this plugin is so cool.

Using this plugin (or the JettyLauncher in Eclipse) makes it pretty damn easy to do develop Java webapps. There's no longer a deploy cycle, just save and refresh your browser. IMO, it's almost as good as using a scripting language or developing with HTML/CSS/JavaScript.

I'd love to see someone develop a TomcatLauncher, a WinstoneLauncher and Maven 2 Plugins for both. AppFuse works with Winstone 0.8.1 (a wicked fast servlet container with a good story behind its name).

In other Jetty news, Jan Bartel posted a nice tutorial today titled How To Use JOTM as the XA Transaction Manager in Jetty6.

Posted in Java at Mar 10 2006, 12:08:31 PM MST 4 Comments

MacBook Pro: Kicking ass and taking names

I received my MacBook Pro this morning, and I've spent the day setting it up, doing some development and running some performance comparisons. The setup was easy: I just booted my PowerBook into Firewire mode and copied over all the files I needed. Everything works for the most part. I did have some issues with IDEA and Eclipse, but got both working after doing a few try and try-again shenanigans. Eclipse was crashing when I'd browse to set my workspace; typing it in manually fixed the problem. IDEA hung the first time I opened it; killing it and restarting fixed the problem.

As far as performance, this thing fricken' rocks! Safari launches in under a second and you're browsing before the dock icons hits the top of its first bounce. Firefox is a different story (likely b/c it hasn't been compiled for x86) - it takes 10 seconds to launch. The good news is once it's up, there doesn't seem to be any performance issues. Safari is amazing though - the speed does wonders for GMail and it actually feels like a desktop application.

When I mentioned yesterday that I was going to compare the MacBook to my desktop, Rob Williams said it wasn't a fair comparison. I agree - but I really wanted this machine to be the best machine I could possibly buy. With my (very unofficial) performance tests, it appears like it is. It's faster than my dual-core AMD 64 desktop machine that has 3 GB of RAM. Now, I have had the desktop for a couple months, so it's possible I'm suffering from OS Rot, but still - it's impressive it keeps up. Here are the numbers from my Performance Comparisons page:

For the tests below, I used Java version "1.5.0_06" and had the following variables set: JAVA_OPTS=Xms256M -Xmx384M, $ANT_OPTS=-Xmx256m. I used the CVS version of AppFuse (1.9.1-dev).

ComputerOperationTime (mm:ss)
HP Pavilion a1250n with Windows XP Media Center (dual-core 2 GHz AMD64 3800+, 3 GB RAM)appfuse: clean package-web00:15
appfuse: setup test-all01:51
PowerBook G4 with OS X 10.4.5 (1.33 GHz, 1 GB RAM)appfuse: clean package-web00:30
appfuse: setup test-all03:31
MacBook Pro with OS X 10.4.5 (2.16 GHz, 2 GB RAM)appfuse: clean package-web00:12
appfuse: setup test-all01:28

A couple of interesting things to note:

  • When I first got my desktop, it's numbers were 00:14 for "ant clean package-web" and 01:29 for "ant setup test-all". The MacBook Pro? 00:12 and 01:28. The Windows box had 1 GB of RAM when I ran those tests, but no matter how I tweaked the memory settings once I put 3 GB of RAM in, I've never gotten better numbers.
  • My PowerBook has been dog slow for several months now. When looking up the OS X version on it - I noticed it lists the memory as 512 MB. WTF?! I've had 1 GB in it every since I first bought it! What happened? Did half my RAM go bad or did someone steal half of it during a repair? Oh well, at least I now know the reason it was so damn slow. ;-)

Conclusion: The MacBook Pro is one of the best machines you can buy (laptop or desktop) for Java development. As for the battery life? I'm still doing the "calibration", so I'm not quite sure. Nor do I care - I plan on having this thing hooked up to my 20" cinema display that Virtuas was kind enough to get for me. The display combined with a mouse, keyboard and iCurve is a very nice setup.

Update: I pulled out the memory from my PowerBook and put it back in. Upon reboot, it resulted in the correct (1 GB) memory setting. The numbers above appear to be accurate regardless. I ran some tests again and times were actually slower (maybe because I'm on battery power).

Posted in Java at Feb 23 2006, 05:20:14 PM MST 27 Comments

The MacBook Pro's start arriving

MacBook ProDavid Heinemeier Hansson in MacBook Pro: So fast, oh, so fast:

The MacBook just feels freaking fast.
...
The MacBook Pro simply rocks.

Rob Williams in Eclipse on MacBook Pro:

First off, this machine is very fast. It is like having a G5 laptop. Apple says 4x over the G4. I was kind of skeptical about that. Not anymore.

Mine is due to arrive Friday morning at 10:30. Unlike everyone that compares their new MacBook to their old PowerBook - I'll be comparing mine to my dual core AMD 64 with 3GB of RAM. The MacBook is likely to lose, but it should put things in a more realistic perspective. Especially since I continue to use Windows and OS X an equal amount.

Thursday, 8:30 AM: From Fedex Tracking: 7:50 AM | On FedEx vehicle for delivery | LITTLETON, CO. Sweet! Looks like I'm going to have to ride into work a bit late. ;-)

Thursday, 9:30 AM: It's here! I'm heading into work with both machines to build it - so I probably won't have any benchmarks until this afternoon. I forget the initial steps to get the best battery life - anyone got those handy. As Julie said a few minutes ago, "No Wheelies!"

Posted in Mac OS X at Feb 22 2006, 07:54:24 PM MST 3 Comments

[ANN] Equinox 1.6 Released

For a good story of how Equinox helps, see Wayland Chan's Equinox to the rescue blog post.

This release's major new features are Tapestry 4.0 and WebWork 2.2.1 upgrades. In addition, I changed to use Maven's Standard Directory Layout. It makes IDE and using Maven plugins much easier, so it's a natural progression.

This release does not contain Maven support for running the integration tests with Cargo. This is because Cargo still seems a lot more complicated with Maven than with Ant. Hopefully I'll be able to figure out an easy way to get test-all functionality with Maven and Cargo in the next release.

All of the frameworks used in Equinox, as well as its build/test system is explained in Spring Live. A summary of the changes are below (detailed release notes can be found in JIRA):

  • Added custom exception page for Tapestry, as well as tapestry-flash.
  • Changed birthday date input to use WebWork's DatePicker component.
  • Added support for pre-compiling JSPs when building with Maven (on by default).
  • Added createDatabaseIfNotExist=true to jdbc.properties.mysql to auto-create the database when using MySQL.
  • Changed classes that extend *SpringContextTests to use AUTOWIRE_BY_NAME so more than one instance of an interface is supported.
  • Dependent packages upgraded:
    • Cargo 0.7
    • DisplayTag 1.1
    • Hibernate 3.1.2
    • Scriptaculous 1.5.2
    • Tapestry 4.0
    • WebTest build 1168
    • WebWork 2.2.1

Download. For more information about installing the various options, see the README.txt file.

Demos:

Known Issues: The Tapestry-Flash JAR was built with JDK 1.5 - so you'll need JDK 5 to run the Tapestry version. Howard Lewis Ship said he'd fix this tonight or tomorrow. Also, if you're on Unix, you'll need to run "ant fixcrlf" before you install anything. Finally, downloading dependencies might not work the first time. Running the "ant" or "mvn" command multiple times usually solves the problem.

See the roadmap for what's coming in the next release.

Posted in Java at Feb 21 2006, 04:35:08 PM MST 8 Comments

New MacBook Pro has shipped!

A week ago, Apple announced that it was shipping MacBook Pros with faster processors. At the time, this seemed like an excuse for Apple to change the shipping date from February 15th to the 28th. Since I was already disappointed by the extra 2-week wait, I upgraded to the 2.16 GHz chip. This bumped my ship date back even further - to March 17th.

However, I just received an e-mail from Apple saying that my laptop has shipped! WTF? Either there's a glitch in their system or I'm gonna be one happy camper at the end of this week. ;-)

Posted in Mac OS X at Feb 21 2006, 02:22:53 AM MST 9 Comments

MacBook Pros shipping with faster processors

This morning I was pumped to read that the MacBook Pro is shipping with faster processors. Of course, since there's a 2.16 GHz version available, I called today to upgrade. It's $300 more and it would delay my order by 3-4 weeks. I had to pass - I've been waiting long enough for a faster laptop. I'd gladly pay twice as much for an upgrade if it was shipped on the same date.

Posted in Mac OS X at Feb 14 2006, 05:57:47 PM MST 9 Comments

Want to be more productive with IDEA?

If you want to be more productive with IDEA, Patrick Lightbody has a good suggestion in IDEA Live Templates: more powerful than you think. Now where's the list of the built-in live templates? Does Eclipse have a similar feature?

Posted in Java at Feb 01 2006, 02:45:15 PM MST 4 Comments