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 "netbeans". 49 entries found.

You can also try this same search on Google.

[TSSJS] Java Web Frameworks Sweet Spots BOF

I've finished composing my "Java Web Framework Sweet Spots" document and presentation for tonight's BOF at TSSJS. Unfortunately, the BOF is at 6:30 and Crazy Bob's wedding is at 6. So I won't be able to make it to the wedding, but I do hope to have a toast to Bob and his new bride. I have been successful in securing beer for the BOF, so you'd better get their early if you want a free one. Caesar's doesn't have kegs, so it's $6/beer and we've purchased 100 of them for attendees. After that, it turns into a cash bar. Thanks to Virtuas, Codehaus, SourceBeat and yours truly for pitching in for the free booze.

My presentation tonight will be short and sweet. Rather than going through each framework author's responses, I'm just going to highlight their "sweet spot" responses. This allows me to get away with creating a measly 8-page presentation, as well as have a more interactive session. I've taken everyone's responses to the 6 questions I asked, and compiled them in a document. This document is available on the Virtuas site, just click on the link below to download it.

» View Java Web Framework Sweet Spots

Posted in Java at Mar 24 2006, 05:27:24 PM MST 28 Comments

[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

[ANN] Equinox 1.5 Released

This release's major new feature is dependency downloading using Maven 2's Ant tasks. The main reason I used Maven 2 over Ivy is because I've heard rumors that Ant 1.7 will include dependency downloading - and they're planning on integrating the work that Maven has already done.

One of the nice things about using Maven 2's Ant Tasks, is you can download Maven 2 and generate your Eclipse or IDEA (possibly even Netbeans) project files using "mvn eclipse:eclipse" or "mvn idea:idea". You can also use Maven 2 to build and test things if you like. The only thing that doesn't currently when using Maven to test Equinox is the web tests with Cargo. I can try to get those working if there's enough demand. For now, you'll have to use Ant if you want to test the UI.

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):

  • Removed packaged JARs in favor of Maven 2's Ant Tasks. Dependencies are now downloaded on-demand, greatly reducing the size of Equinox-based applications.
  • By specifying compile, test and runtime dependencies in a pom.xml file, Equinox applications can now be built with Maven 2. The only difference between building with Maven 2 and Ant (at this time) is that the M2 build does not support testing with Cargo. However, there is an M2 Cargo plugin so this shouldn't be hard to fix if you have that itch.
  • Added DWR, Script.aculo.us and Prototype to simplify Ajax development.
  • Added Beandoc support - simply run "ant beandoc" to see javadoc-style documentation of Spring context files.
  • Refactored UserManagerTest to be UserManagerImplTest; renamed UserManagerIntegrationTest to UserManagerTest.
  • Changed BaseDAOTestCase to extend AbstractTransactionalDataSourceSpringContextTests.
  • [Hibernate] Added example ehcache.xml to web/WEB-INF/classes for default cache settings.
  • [JSF] Removed client-side validation because corejsf-validator.jar causes issues with Spring's Ant-style path matching.
  • [Spring] Fixed number editor and edit logic in UserFormController.
  • [Struts] Fixed issue with installation where ContextLoaderPlugin was loading ApplicationContext a 2nd time b/c the listener was not being commented out.
  • Dependent packages upgraded:
    • Cargo 0.6
    • Hibernate 3.1
    • iBATIS 2.1.6
    • JPOX 1.1.0 Beta 4
    • MyFaces 1.1.1
    • PostgreSQL JDBC Driver 8.1 Build 404
    • Spring 1.2.6
    • Struts 1.2.8

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

Demos:

The basic Equinox download contains all the various web and persistence framework options in the "extras" folder. If you have issues replacing the web framework or persistence engine, please enter an issue in JIRA and I'll build and upload a customized version for you.

Posted in Java at Dec 28 2005, 07:14:43 AM MST 4 Comments

Equinox 1.5 Beta 1 Released

This release is mainly to test out dependency downloading using Maven 2's Ant tasks. In addition, a few bugs have been fixed, but there's quite a few more on the roadmap. I plan to fix all of these before releasing 1.5 in a couple weeks.

Please test out this release if you have a chance. One of the nice things about using Maven 2's Ant Tasks, is you can download Maven 2 and generate your Eclipse or IDEA (possibly even Netbeans) project files using "mvn eclipse:eclipse" or "mvn idea:idea". You can also use Maven 2 to build and test things if you like. The only thing that doesn't currently work with Maven is the web tests with Cargo. I can try to get those working if there's enough demand. For now, you'll have to use Ant if you want to test the UI.

The download is much smaller now - barely over 1MB vs. ~20MB for 1.4. Most of the size comes from the Maven 2 Ant Tasks - which is a 869KB JAR. Of course, I could've made the distribution even smaller and required you to download the JAR and put it in $ANT_HOME/lib, but I decided to make things easier by including it.

For more information about installing the various options, see the README.txt file. Currently, you can use the following persistence frameworks:

  • Hibernate
  • iBatis
  • JDO (JPOX
  • OJB
  • Spring JDBC

And a number of web frameworks too, as listed below with links to demos.

Update: I forget to mention that I owe a big thanks to Carlos Sanchez. He (and the other Maven developers) have been great in helping to resolve all the issues I found with transitive dependencies.

Posted in Java at Nov 26 2005, 04:51:48 PM MST 4 Comments

Editing Java webapps instead of edit/deploy/reload

For the last few years, I've always done Java webapp development the hard way. Yeah, I'm the guy that makes Dion cringe (although I'm pretty sure he's not referring directly to me). I edit a class/jsp/xml file and run "ant deploy reload". Then I wait a few seconds for my context to reload in Tomcat. Luckily, I do mostly test-first development, so it's rare that I have to open my browser to test stuff. However, with the power of CSS and Ajax, manual testing in a browser is becoming more and more useful (although Selenium may solve that).

I've long resisted the power of the IDE, b/c I've always trusted Ant and felt confortable with the command line. However, I'm ready for a change. I'm ready to start developing Equinox and AppFuse-based applications using the edit/save/auto-reload cycle. So how do I get started? Where's the instructions for setting up my IDEs to work this way?

I prefer to use Eclipse and IDEA for development - so I'll likely try to get this working in both. If I get it working, I'll make sure and provide good documentation so others can do the same. I'm also willing to make any changes in project structure to make this happen; modifying build.xml (or pom.xml) to accomodate shouldn't be too difficult.

Posted in Java at Nov 07 2005, 09:16:03 AM MST 23 Comments

Made it to Java in Action

I just arrived at Disney's fancy "Yacht Club" for the Java in Action show. Today was a fun day - Julie and I took Abbie and Jack to Magic Kingdom and had a great time. Abbie got to meet Mickey Mouse, Winnie the Pooh, Eor and Tigger. She was scared of Mickey, but warmed up to Pooh and friends pretty quickly. It was weird - it kept raining off and on throughout the day, but it didn't seem to put a damper on anyone's spirits. Unlike Colorado, rain doesn't cool anything down. In fact, the humidity seems to crank the temperature up a notch or two.

Tomorrow is a full day - I have a 3 hour tutorial on web frameworks in the morning, followed by an hour of Ajax + Spring in the afternoon. After that, it's back to vacation-mode until I return to Denver next Tuesday.

I'd post the slides from my talks, but they're starting to make less and less sense (in downloadable form) as I add more images and less bullets. Besides, I plan on coding and conversing for most of the talks. That's the fun part of speaking at conferences - who wants to listen to a presentation anyway? Why does the good conversation have to take place in the hallways? Can't it happen right in the room?

Posted in Java at Oct 06 2005, 04:15:17 PM MDT 5 Comments

New Laptop

When I saw Russell's Why I Might Switch Back... post a couple of weeks ago, I found myself wanting to write a response. My response was going to be I completely agree and I was going to bitch about how slow my PowerBook is (once again). Then, later that day, I was doing something with iPhoto and I thought - I really do like OS X. It's the Mac hardware that I don't like. And it's not the look of the hardware (I love that), it's the fricken speed!! Most PowerBook users I know don't switch b/w computers a whole lot - whereas I spend 50% of my time on a fast Windows desktop. When I go from something that's so fast to something so slow, it's quite painful.

Last week, I started working with a new client - developing an application with Spring, Hibernate, WebLogic and Eclipse. Installing WebLogic on OS X was pretty easy, thanks to this article. Even remote debugging with Eclipse was pretty easy to setup. However, when I started running WebLogic locally and trying to debug it with Eclipse, it was extremely frustrating. I've never seen the spinning beach ball so much in one day. When other developers would watch me work, it was embarrassing how slow my computer was. And it's not like I had a whole lot running: Mail, Safari, Eclipse, WebLogic and iTerm.

Over the past couple of months, I've started debating if my next laptop should be a PC. It's not like I hate the Mac or don't like my PowerBook - but Java development on a Mac is far slower than on a PC equivalent. The problem is that I really like the PowerBook's form-factor. I'm so comfortable using the keyboard, right-clicking with the Control key, and all that jazz - that I'd probably have a hard time adjusting. I realize that a lot of my PowerBook bitching might seem unfair - as I'm often comparing a Desktop to a Laptop.

What I'd really like is two laptops: a PowerBook for doing all non-Java stuff and a PC for doing Java stuff.

My dreams came last Friday when my client handed me a brand new Dell Latitude D610. It's got Windows 2000, a 1.6 GHz CPU and 1 GB of RAM. To be honest, I expected it'd have a lot bigger processor. However, the fact that it doesn't makes it easier for me to show you how fricken slow my PowerBook is.

I used AppFuse for this test and ran ant clean war 3 times on each. I had ANT_OPTS set to -Xmx256m, JAVA_OPTS set to -Xmx512m and I'm using the latest 1.4.2 JDK available for each respective platform. It's possible my PowerBook suffers from some OS Rot, but it's still amazing how much faster the Windows laptop is.

  • PowerBook: 58.3 seconds
  • Latitude: 17.3 seconds

Holy ass-kicking batman!

My PowerBook has a 1.33 GHz CPU and 1 GB of RAM. It'd be interesting to do the see the numbers for a PowerBook with a 1.67 GHz processor. Here's to hoping OS X with a 1.6 GHz Intel processor can keep up with Windows for Java development.

Posted in Java at Oct 02 2005, 11:25:17 AM MDT 25 Comments

Rails is 8 times slower than Spring+Hibernate

Might as well start off this week by getting people's blood boiling. ;-) According to a comment on Dion's blog:

Having done extensive performance (scalability means different things to different people) testing on both Rails and a comparable Spring/Hibernate/JSP2 webapp (no one seems have have done any sort of benchmarking on Rails, or they simply don't care, I don't really know, but since benchmarking is what I do... :-)) I can say that Apache2/FastCGI/Rails is about... 8x slower than the comparable Tomcat/Spring/Hibernate/JSP2 solution. And that is with caching turned on in Rails (using Rails 0.9.5...)

Quite frankly, 62 req/s on a Dual Opteron with 4GB of RAM rendering a simple view with no DB access is too... damn slow.

Personally, I still think Rails looks like a great (and easy) way to develop webapps. I just wonder if there's some truth to the "can't scale" argument. I guess the best way to find out is for me to develop an application like AppFuse with Rails, and then hammer it (and AppFuse) with JMeter to see what kind of results I get.

On a sidenote, I wonder when Rails will hit the illustrious version 1.0? They released 0.1 last week - which is a bad version number for marketing. If it's as mature as folks claim, why not make the next release 1.0? That version number alone will likely allow developers to use it more in big companies.

Posted in Java at Feb 28 2005, 06:25:27 AM MST 15 Comments

Pick the web framework you think is cool

Ever since I started adding additional web frameworks into AppFuse, people have asked me "which framework should I use?" I've often told them "use what you know." If you have in-house knowledge of Struts, use it. I thought this was good advice because I believed that existing knowledge leads to greater productivity.

Lately, I've started to change my philosophy. I'm starting to think it's more important to use the web framework you're passionate about. The one you want to learn more about. After reading Kathy Sierra's "Does it really matter if your tool is cool?", it seems this is a good idea. She writes:

Coolness (or just perceived coolness, it really doesn't matter) is linked to passion. The cooler you perceive your tools to be, the more passionate you are about those tools. And passion, while it might lead to the "everything is a nail" syndrome, has an extraordinary amount of value!

Obviously there's quality of life... a life with passion is certainly more fun than one without. And the more passion, the greater the chances that a person has what psychologists label optimal experiences. And the more optimal experiences one has, the more likely one is to describe life as being "happy". So, passion = optimal experiences = happiness. And research says happy people are generally more productive. Certainly they're more spirited and fun to be around...

So I guess passion leads to greater productivity, not existing knowledge. So which web framework do you think is cool? Which one are you passionate about?

If I had to choose based on my passionate choice, and the one that I think is the coolest, I'd have to go with Tapestry or possibly JSF (JSF would be a lot cooler if it let me put my JSPs in the WEB-INF directory instead of in the root). These are the frameworks I want to learn more about. 6 months from now? Maybe Laszlo or JDNC.

Posted in Java at Dec 09 2004, 04:47:25 PM MST 17 Comments

[ANN] AppFuse Light 1.0 - a.k.a. Equinox

For those of you looking for an AppFuse Light, I have good news for you. I've actually been sitting on it for several months now, but now I'm prepared to release it. It's name is Equinox and it's much, much simpler than AppFuse. Equinox has only one build-time dependency (CATALINA_HOME being set for the servlet-api.jar). There's no code generation and no features - not even security. However, it supports building, testing and deploying from Ant, and even has support for managing Tomcat out-of-the-box.

To get started with Equinox, you can download the QuickStart Chapter from Spring Live. This chapter shows you how to develop a simple webapp using Struts, Spring and Hibernate - which talks to an HSQL database. Struts and Spring are integrated using the ContextLoaderPlugin and all tests are designed to be run out-of-container using JUnit and StrutsTestCase. Equinox ships with project files for both Eclipse and IDEA so you can develop and run the tests in either of these top-notch IDEs. There's also a demo available. Thanks to Boér Attila for the kick-ass CSS.

If you like what you see in the QuickStart Chapter, there's much more in the other ERP chapters of Spring Live - now available for download. Too see what's in the other chapters, checkout the Chapter Summaries.

This is a nice milestone - feels good to have made it this far. Have a good weekend!

Posted in Java at Jul 09 2004, 04:38:01 PM MDT 34 Comments