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 "la blue girl episodesorgasm denial web tease". 1,368 entries found.

You can also try this same search on Google.

Christmas Break

Pulled the Engine! The past week has been great. Not only did I stay off the computer for most of the week, but I had a ton of fun with my Mom, Dad, sister, Julie and the kids. My parents flew in last Tuesday, and that marked the beginning of my Christmas Break. On Wednesday and Thursday, my dad and I pulled the engine on the Bus. Ironically, the first day we couldn't figure out how to get it out, but w/in 5 minutes of consulting How To Keep your Volkswagen Alive, we had the solution. The bus is a bit different from a bug - there's only 3 bolts (instead of 4) and one of them is on the inside of the engine compartment. Daddy's Bus should be ready for the shop sometime in January.

The weekend was awesome - complete with mimosas on Christmas morning while unwrapping presents. Abbie and Jack are at a terribly cute age - and it was a blast to see their eyes light up when opening presents. It was tough to get them to open the next present b/c they were so enthralled with the one they just opened. After all was said and done, Abbie is now riding a "big girl" bike and we have a trampoline in our back yard. That should work out nicely when we get our first surprise snow storm. ;-) Fortunately, the weather has been gorgeous (almost 70!) for the past week.

Yesterday was an epic powder-day at Copper Mountain. My sister and I headed up in the morning and skied (she snowboarded) all day in 10" of fresh powder. We're heading up again this weekend for the New Year (Breckenridge this time) and it's supposed to snow in the hills for the next 3 days. Yeeeeeeeeaaaaaa hhhhhhhhhaaaaaaawwww!! Two days at my client this week and then back up to the wonderful pow-pow. Next week, the contract with my client finishes up and I get to return to our office in downtown Denver. I'm pumped because that means I get to start riding my bike to work again. I took it in for a tuneup today and should get it back in a couple days.

2006 is going to be a good year. I get about 2-3 e-mails a week about mentoring and consulting and it looks like I'll be quite busy. I hope to squeeze in some time for Spring Live and AppFuse in January and hope to have AppFuse 1.9 released in the next few weeks. My Dad's 60th birthday is in mid-January, so my family is heading to Cancun for a week. Should be a good time for sure. :-D

Cancun

Posted in General at Dec 28 2005, 08:55:26 PM MST 3 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

RE: Oracle donates ADF Faces to Apache MyFaces

I read the news initially on the AMIS Technology blog, which points to the original news-breaker on the IT-eye Weblog. This is huge for the JSF community IMO. The main compelling feature behind component-based frameworks is components. Without components, there's not much point in them.

By christmas a website and mailing list will be available for the incubator project. You will also be able to download the source code. By New Year a subversion repository should be available with the source code. And the intention is to move out of incubator by JavaOne 2006, which I think is in May.

So why is Oracle doing this? Well it's obvious that Java needs to have a good component based framework to compete with .NET. And Oracle believes that JSF can be this Framework, but a good implementation is needed, which is what ADF Faces provides.

What does ADF Faces, or better Apache Faces Cherokee contain? More than 100 components, an Html AJAX renderkit (but it doesn't use HttpXmlRequest, but iframes), a dialog framework, personalization, skinning, and a lot more.

I wonder if Oracle has a solution for the "everything is a post" problem? ;-)

JSF is cool, and easy to be productive in, but so is Tapestry, WebWork and Spring MVC. I find it somewhat ironic that the Struts committers turned down Shale as Struts 2.0, but they voted in WebWork.

I think component-based frameworks might be the way of the future. However, after playing with OpenLaszlo for the past few weeks - I can't help but think that this is what component-based frameworks should be. Many components, easy to use, and the output is a rich-client out-of-the-box. In addition to the Flash output they have now, I've heard rumblings that OpenLaszlo may support other outputs in the future (i.e. XHTML/Ajax).

It's pretty cool to see continued excitement and innovation in Java. Competition is good, and will only make each of these frameworks stronger and easier to use.

Posted in Java at Dec 12 2005, 02:26:45 PM MST 8 Comments

Quick Guide to Prototype

Ryan Campbell has put together a very nice Quick Guide to Prototype. In the past, I've used the Unofficial Prototype Documentation by Sergio Pereira. Ryan's guide is a good learn-it-quick reference, while Sergio's documentation makes a nice reference manual. Hat tip to the Ajaxian gents.

Posted in The Web at Dec 03 2005, 05:57:19 PM MST 3 Comments

Free Forums from Nabble.com

Nabble seems like a pretty cool site:

Our forums are truly public, democratic and absolutely free. Nabble's advanced community filtering gives you only the best content without the need for moderation. Find forums that interest you or easily start your own in minutes.

I first found out about Nabble a few days ago when I started seeing messages on the AppFuse mailing with a from address of "sent by Nabble.com". I did some searching and found they have a set of AppFuse Forums. The cool thing about these forums is they're not only a set of mailing list archives, but they also allow you post to the mailing list. Nabble forums are similar to Jive Forums (like OpenSymphony has) - they keep the forums and the mailing lists in synch, which is pretty cool IMO.

I spoke (via e-mail) with Will Lin - one of the co-starters of the Nabble project. Here are a few things he had to say about Nabble:

The goal of Nabble is to do the discussion right, just like Google did the search right. There are many problems with the current forms of discussions in mailing lists, message boards, user groups etc. Most importantly, (1) the search, most forum search are broken, a lot of people use Google's site:archive.domain.com to search discussion archive - what a hack, because Google does not index all the messages especially the recent ones.

In the mailing list case, developers get mad because users post dumb questions repeatedly, but the users don't have a good way to search past discussions ... (2) moderation, most discussions rely on one or two strong moderator to resolve spam and flame wars, with Nabble, all the members can work togeter to rate up (promote) top contributors, and rate down (drive out) spam and trouble makers; (3) cataloging - similar topic discussions should be able to be combined for browsing and search.

One of the coolest features of Nabble is you can create your own forum, and skin it however you like. I've done this for AppFuse, and created an easy to remember alias at http://appfuse.org/forums. You can also check out the easily-searchable Roller Archives, as well as many other OS project's mailing list archives.

Posted in Java at Nov 30 2005, 10:20:07 PM MST 5 Comments

Edit Java webapps Redux: Jetty Launcher and Equinox

A few weeks ago, I realized I was developing webapps the hard way, by re-deploying everytime I made a change. It's important to have a build process that can create a WAR and deploy, but it's also important to have a system where you can edit/save/view changes w/o ever deploying.

I spent some time this weekend working with Jetty Launcher, Eclipse 3.1 and the latest version of Equinox. Below are instructions on how to make the two work together. Once you've completed the steps below, you should be able to launch Jetty and edit/save Java files or JSP files in Equinox - and the changes will show up immediately in your webapp. No deployment or Ant/Maven interaction necessary.

I've tested this setup on Eclipse 3.1, using both OS X and Windows XP.

Step 1: Install Jetty and Launcher

Download and install Jetty. I tested 5.1.4 and 5.1.6 and both seem to work (6.0.0 Beta does not). In Eclipse, go to Help » Software Updates » Find and Install. Select Search for new features to install and click Next. Click on the New Remote Site button and enter "Jetty Launcher" for the name and "http://jettylauncher.sourceforge.net/updates" for the URL. Click OK, continue to download and restart your workspace.

Step 2: Install Equinox and create Eclipse project files

Download Equinox 1.5 beta 1 and extract to your workspace (I generally use c:\Source on Windows and /Users/${username}/dev on OS X). Download Maven 2.0, install it, and add $M2_HOME/bin to your $PATH. From the command line, cd into the equinox directory and type "mvn eclipse:eclipse". Get a cup of coffee or soda while you wait for Maven to download all the dependencies.

Once the project files have been created, open Eclipse and go to File » New » Project » Java Project. Click Next and type "equinox" in the Project name box. Click Finish to begin importing the project. You'll probably get an error like the following. Click OK to continue.

Eclipse Error

Click Next to continue (I had to click it a few times before it took me to the next screen). On the next screen (Define the Java build settings), select the web directory and click Configure inclusion and exclusion filters. Click the Add button for Exclusion patterns and enter "WEB-INF/classes/" (the trailing slash is important).

You're not done yet, now you need to define the M2_REPO variable that points to all the downloaded dependencies. Click the Libraries tab and then the "Add Variable" button as seen below.

Eclipse Error

Click the Configure Variables button and add a new one with a name of M2_REPO and Path of to your local Maven repository (/Users/${username}/.m2/repository on OS X and C:\Documents and Settings\${username}\.m2\repository on Windows). Click OK, Cancel and then Finish.

Step 3: Configure Jetty Launcher for Equinox

In Eclipse, go to Run » Debug and select Jetty Web in the Configurations panel. Click the New button. In the "Use Options" section, use "web" for the webapp root and (optionally) "/equinox" for the context name.

Jetty has issues running applications that use commons-logging, so you'll need to turn off all the INFO logging from the projects that Equinox uses. To do this, click on the Arguments tab and add the following to the list of VM arguments:

-DDEBUG -DDEBUG_PATTERNS=org.appfuse -DDEBUG_VERBOSE=-1

This can be placed on the line below the -Djetty.home argument. For more information on logging in Jetty, see the Jetty logging and debugging tutorial.

Step 4: Start Jetty in debug mode and modify to your hearts content

Click Apply and then Debug, and watch Jetty startup. If you go to http://localhost:8080/equinox/users.html in your browser, you should see a log message like the following:

11:44:25.855 DEBUG  [SocketListener0-1] org.appfuse.web.UserController.handleRequest
(UserController.java:24) >29> entering 'handleRequest' method...

You should be able to click on "UserController.java:24" to navigate to the UserController.java class. In this class, modify the log.debug(...) message, save the file and hit refresh on your browser. The console should spit out your updated log message. If it didn't, go to Window » Preferences » Workspace and make sure Build automatically is checked.

As far as I can tell, edit/save/refresh will work for .java and .jsp files, but not for .xml files. For that, the Jetty Launcher adds a Stop/Restart Jetty icon to your Eclipse toolbar. This setup seems to work great, except for the fact that you can't see when Jetty is done starting up in the console.

NOTE: I tried to get a similar setup working with the Tomcat Eclipse Plugin (v3.1 beta) and the Eclipse Web Tools Project (v0.7.1). Neither worked as smoothly, and the WTP wouldn't even deploy to Tomcat.

Posted in Java at Nov 28 2005, 11:58:15 AM MST 8 Comments

RE: WebWork joins Struts

From the struts-dev mailing list:

Between the Clarity hubbub and the Java Web Alignment brouhaha, it came up that WebWork would like to merge with another framework. Ted and Don followed up with the two core WebWork developers, Patrick Lightbody and Jason Carreira. As it turns out, they are very interested in merging WebWork with Struts. An archive of our discussions is available as a Quick Topic thread.

As some of you know, the underlying idea behind Ti was to use WebWork as the core of Struts Action Framework 2.x. Conceptually, WebWork and Struts 1.x are very similar. We've often said, without embarrassment, that WebWork does many things better than Struts 1.x. Meanwhile, WebWork has the ability to provide a layer of almost full backwards-compatibility for Struts 1.x, and we have already demonstrated we can integrate Beehive's (very cool) Page Flow with WebWork.

Patrick Lightbody:

Yes, it's true. The WebWork development team (Jason and I) have been working with the Struts development team (Don Brown and Ted Husted) and have come to the conclusion that the best thing for Java community would be to merge WebWork in to Struts.

Read Ted's email here, but the gist of it is this: WebWork is a great technology, and Struts is a great community. It's a perfect match and bringing the two together will only be better for WebWork and Struts users alike. The only down side for me is that I'll be working less with OpenSymphony, but I believe that is a small price for all the great benefits that come from this merger.
...
With this renewed energy, larger development team, and larger community, the combined efforts of Struts and WebWork will surely make the Struts platform the easiest, fastest, and most powerful Java web framework available. We hope that all the WebWork users and developers are as excited about this as we are and are ready to take WebWork to the next level.

IMO, this is good for both Struts and WebWork. WebWork gets the additional marketing it needs, and Struts users get a kick-ass framework to develop with. If you're a Struts user and haven't tried WebWork, prepare to be impressed. I was and still am.

I plan to upgrade AppFuse and Equinox to WebWork 2.2 as soon as its released. Hopefully I'll be able to migrate both the Struts and WebWork versions to SAF 2.0 w/in a few months.

Posted in Java at Nov 27 2005, 04:18:55 PM MST 4 Comments

Roller 2.0 Hidden Feature: Different Editor Themes

Roller 2.0 has a pretty cool feature that doesn't seem to be documented. You can apply different looks to the editor UI by passing in a "look" parameter to one of the editor URLs. Below are three that ship with Roller 2.0:

Looking in the theme directory, there appears to be two other options: lavender and blueslate. However, they appear to render the same look and aren't nearly as pretty as the other three.

I discovered this parameter by looking in theme/banner.jsp. Looking at this file, it appears you can change the default by defining a "editor.theme" property in roller.properties.

Posted in Roller at Nov 26 2005, 10:15:51 PM MST Add a Comment

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

Are you doing client-side validation in your JSF applications?

Are you doing client-side validation in your JSF application? I am in Equinox and AppFuse, but it seems somewhat primitive. I'm using David Geary's corejsf-validator.jar from his Core JSF book. It hooks into Commons Validator, and while it does work - it has some issues. First of all, if you have it in your classpath when testing, it screws up Ant-style path matching in Spring (applicationContext*.xml doesn't work). Secondly, it puts all the JavaScript validation functions right in your page, rather than in an external file that can be cached by your browser.

In reality, I believe that JSF should include client-side validation as part of the spec. After all, all of the other popular Java web frameworks support it. Then again, Rails is growing in popularity and AFAIK, it doesn't support it. In addition, the popular Java webapps I've seen (JIRA, Confluence, Jive Forums) don't use it either. I'm not trying to advocate that we should all be using client-side validation in our apps, I'm merely saying it should be an option in the standard web framework for Java.

The only public (and open source) option I've found is the Commons Validator support in Shale. Will this work in a MyFaces application w/o Shale? Are there other client-validation frameworks for JSF I don't know about? Or is the best option "don't use client-side validation with JSF?"

Posted in Java at Nov 24 2005, 09:02:39 AM MST 6 Comments