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 "java". 1,588 entries found.

You can also try this same search on Google.

Bloody Noses and Struts Chapter Progress

I've gotten three bloody noses in the last 36 hours - and I don't seem to recall ever having them before in my life! Yikes - is the stress getting to me?! Oh well, I'm sure I'll be fine. I read on a website today that bloody noses are way over-emphasized and they aren't a big deal at all.

I'm at 22 pages on the Struts chapter now, doing Exceptions and how Struts lets you declare exceptions in your struts-config.xml -- pretty cool stuff. The bad part is that I've never used them before, so it's kinda tough to write about them - at least in the context of Struts. I tried to use Strut's ApplicationException (now renamed ModuleException) last summer on a client's project - and it was too buggy to use. Now it seems to to work as I originally expected it to, and it's pretty sweet. I do feel like I'm building an application to show functionality though, rather than developing an application to fulfill some requirements, which is unfortunate. I'd rather build an application that employs KISS, and shows the easy way to do things. It's like using design patterns because your manager thinks they're a good idea, but you could get the project done in half the time without them. Sure, your app might not be extendable in the future, but if it doesn't live past 3 months, what's the point?! Of course, I think using the Validator and Tiles is easy, and many developers think that's the complicated part. If my learning curve was up to snuff, Exception and Modules (a.k.a sub-applications) would be easy. Soon they will be, though I still may never use them.

Tomorrow is my last day (for a while) as a full-time employee of Raible Designs. I've certainly enjoyed the last year, but I've missed the office comradery and face-to-face interaction. It'll be good to get back into an office, but I'm sure I'll miss coding in my living room within a week, and wish I was back here.

I'm going to get my mugshot tomorrow for the Wrox book - I've convinced Abbie and Julie to go with me so we can get some good family photos - should be fun. After that, I'm going to fill out the paperwork - W2's - for the new gig, and then off to a project kick-off party! Sounds like my kind of project already!! It's got a good name too - Project Fiji. One of the things I'm looking forward to is implementing Struts and Hibernate (if they'll let me) using XDoclet. I've done it in my sample project and AppFuse (expect a new release in a week), but it'll be awesome to cut our development time in half right away! Especially when the first deliverable is due January 15th!

If I'm good (and I can figure it out), I hope to use Maven on the project as well. It should be interesting to be the primary Java Developer on the project, along with a Web Developer and Oracle DBA. I've always been the web developer - but I've learned so much in the past year and a half (since I met Struts), that I feel more than comfortable being the Java guy. You know what the best part is - I feel like I've learned more from the java.blogs community than I have from studying for certifications, or from any conferences I've been to. Keep it up - learning is awesome!

You know what the better part is? Julie just said to me - "thanks for making all my dreams come true." Enough said, life is awesome - even with toilet paper stuffed up my nose and a chapter that seems like it'll never get done.

Posted in Java at Dec 16 2002, 03:56:38 PM MST 1 Comment

Commons Validator 1.0.1 Released

This release contains only bug fixes - there are no new features in this release. You can download the binary or source distributions, or simply checkout the Validator web site. I expect that will be included with tonight's nightly build of Struts.

Posted in Java at Dec 15 2002, 05:14:43 PM MST Add a Comment

RE: Struts? WebWork? Tapestry? Cocoon?

Aslak tipped me off about Anthony's Wafer research project. There I found the feature matrix of all the web application frameworks they've looked at. I don't know when this matrix was last updated, but I question a few of the entries for Struts. In particular:

  • Template Languages - it supports Velocity and XML
  • Security - it supports adding a role attribute to your action-mappings to secure servlets, as well as roles in Tiles, Struts-Menu and the logic:present tag library to limit access when using container-managed security. I'm guessing that they mean a different type of security here.
  • Documentation - Apache doesn't host an online demo, but I've seen many, for instance my strutscx demo [strutscx home]. There's also the stxx project. I'm guessing the development team has to host one to fit the satisfy the requirement here. It does have a number of tutorials though, including my favorite Strut By Strut. Example code is all over the place, O'Reilly has been pumping out a lot of it lately.
  • IDE Integration - Easy Struts and the Struts Console.
  • WAP/WML - The Struts WML Tag Library.

I hope this helps to boost Struts' credibility on this matrix. I'm off to Barnes and Nobles to write some more on Tiles and Exception Handling with Struts. It's open 9-11 everyday and all the local libraries closed at 5 today. I'm about halfway through the chapter (page 15). Tomorrow will be fun-filled with a full day at the library and hopefully I will finish. Then an all-nighter (maybe? I hope not) on Monday night to proofread, and then send on Tuesday. I doubt I can get my struts-resume app done by Tuesday night, so I'll probably turn that in later in the week. Although, using XDoclet, Hibernate and Erik's StrutsGen tool, I might just be able to pump the whole app out in a couple of hours!

Posted in Java at Dec 15 2002, 02:33:37 PM MST Add a Comment

Tomcat Deployment App

On of my clients has asked me to setup a deployment app. Basically, we have seven instances of tomcat setup through one Apache webserver. Apache proxies to each instance based on different domain name. They want the ability to upgrade each instance with the click of a button. Here's my idea:

  • Create a Struts-based app that allows file upload, where they can upload a war file.
  • Part of the file-upload process is selecting which servers they'd like to upgrade.
  • Based on the server names, the war file is copied and expanded in the tomcat/webapps/appname directory for each server.

Will this work, and can I do this through a webapp? It'd be cool to do steps 1 and 2 with a webapp and have step 3 run by Ant. Is it possible for a webapp to call Ant? The second piece that they're probably going to want is the ability to setup these virtual slices on the fly, from a web page as well. That might be a little tougher, as it would involve: editing http.conf/workers.properties, creating a new user for the slice, copying/expanding a base Tomcat install, editing the server.xml for new ports, creating a new MySQL instance for the slice, and finally, creating startup scripts. Yeah, I might have to pass on creating that app - probably not logical to do it from a webapp. Especially when it only takes about 10 minutes to setup right now.

Posted in Java at Dec 15 2002, 07:17:58 AM MST 4 Comments

Jabber Journal #5

Jabber Journal #5 was published yesterday. If you ever have a need to host an IM server, Jabber is the way to go. Pretty damn easy to setup and I'm guessing easy to talk to as well - it's just XML. I bought Programming Jabber a couple months back, but haven't used it yet. Jabber registers users by creating an XML file in it's directory - so it'd be pretty easy to create new jabber users when someone creates a new user in the database, and then you could dole out a jabber id for them as well.

Posted in Java at Dec 14 2002, 05:41:13 AM MST Add a Comment

Should I be using DBUnit?

Here's a question for you: Should I be using DBUnit in AppFuse and struts-resume? I've heard of it before, but have never used it. It sounds good:

The Dbunit database testing framework is a JUnit extension which sets up your database in a known state before executing your tests. This framework uses xml datasets (collection of data tables) and performs database operations before and after each test. The Dbunit framework supports both the clean insert and the refresh strategies.

Actually, know that I think of it, of course I should be! Currently, I use an Ant Sql task to create my database, and then Hibernate's SchemaExport class to create the tables. I have no way to automagically enter data into the database. I suppose I could use another sql task in my build file, but it sounds like this job is more suited for DBUnit. I don't want to give up Hibernate's table generation as it's smart and adds new columns when I add new columns to my VO. Hopefully these two can work together nicely.

I also found this Best Practices guide on using Hibernate. The first line about using fine-grained objects has motivated me to refactor my User class.

Write fine-grained classes and map them using <component> or <component-element>. Use an Address class to encapsulate street, suburb, state, postcode. This encourages code reuse and simplifies refactoring.

Posted in Java at Dec 14 2002, 01:37:09 AM MST Add a Comment

Maven and CVS Repositories

As I woke up this morning, I thought "Maven must have a way to checkout development builds from CVS." So I think I can still use it and get all my needed 3rd-party jars. They all have CVS Repositories and most are hosted by Jakarta or Sourceforge. Now I just have to figure out how to do that.

Posted in Java at Dec 14 2002, 01:08:41 AM MST 2 Comments

New Job, Struts, Testing Frameworks and Maven

I found out this afternoon that they want me for the job I interviewed for yesterday. I'm expecting to start on Wednesday. It's a small team of 3 folks and should be a lot of fun. I'm really looking forward to getting back into an office environment where I can converse with co-workers and such. After blogging for the last few months, I feel like the java.blogs guys are my co-workers, but it's still fun to talk and interact with folks. I never used to like it - I'd bring my lunch to work everyday, and hunker down like a code monkey the whole time - just trying to get my 8 hours in and get outa there. I'd get annoyed when people would stop to talk about their weekend or other random stuff. Now I'm going to be that guy - I'd better watch for the telltale signs of get the hell out of my cube! I wonder if we'll even have cubes? The floor where my interview was had just cleared out a bunch of folks - it was empty when I went in there. When I say cleared out, you know what I mean. Needless to say, there is plenty of space and plenty of computers available -- it'll be interesting to see what I get.

My last project had horrible machines - NT4 Gateways with 4MB video cards and about 700 Mhz. And this was last year!! I had just bought a brand new Dell 8100 P4 1.5 Ghz 2 weeks before I started the gig - so you can imagine my disappointment. And I was running XP at the time, albeit a beta version. But still, I felt like I was taking a huge step back in time. So I brought in my own Windows 2000 CD on my 8th day on the job. It all looked to be going pretty smooth (and the install was about to finish around 7 a.m. - I got there at 5) when everyone started rolling in. The video drivers weren't compatible and I was forced to humbly call tech support and tell that how I had violated all the rules. This place at least has Windows 2000, and I have my Powerbook, so all should be good. I just hope I can get a dual monitor setup - there's nothing quite so enjoyable.

This evening I did some minimal development on AppFuse. I spent most of the day writing the Struts Chapter. I'm on page 12 and expect to do 10-20 more pages. It was fun writing because I described tools that make developing Struts apps easier: Ant, XDoclet, JUnit, StrutsTestCase, and Cactus among others. I dug in a little to the Testing frameworks and played with them, but nothing too serious. I can waste many hours coding and I need to finish writing, then code later. I used 2 very cool tools today. The first is Canoo's WebTest. It basically is a framework built on top of HttpUnit that allows you to write all your tests as Ant tasks. It's fricken sweet as you don't have to really write any code, and it just worked for me. Check out this file (XML) to see how easy it is.

The 2nd tool was written by Erik Hatcher to generate JSPs and a resource bundle based on a Struts ActionForm. I hadn't tried it out until tonight and it just worked - my favorite feature in any software. The one area I think I might run into issues (in generating all this code), is when I have ArrayLists of beans on a form. I think Hibernate will allow this using Sets, Lists and other types of Collections, but I'm doubting that XDoclet's strutsform task will support it and I don't think Erik's too; generates nested tag libraries or anything like that. This is unfortunate because I'll probably get a wild hair up my you-know-what and want to create this functionality. And there goes my deadline, right out the window. Need.... to ... stay ... focused..!

Lastly, I made an attempt to mavenize AppFuse. It was pretty easy at first, as you're only required to alter this XML file to fit your project's needs. I realized I didn't have much as far as a CVS repository, mailing lists, etc., but I also realized that these would be almost essential to any project. And they'd certainly make things a lot simpler - even on a small team. When I got to the dependency section (which is what I really need), I sorta gave up. Here's my dependencies and their presence at the Maven Repository:

So while Maven looks great, it doesn't offer all the third-party jars I need. Is it possible to partially integrate? Also, I found the documentation to be a bit lacking on how exactly to configure each dependency. Is there a standard naming convention or versioning to rely on? It'd be great to have a list and possible versions - or even XML fragments you can copy/past. Can we, as developers, contribute nightly builds to the repository? I'd love to use both AppFuse and Maven at my new project, but I hate waiting on things to happen. If I can do anything to make the above modules/versions present in Maven, let me know.

Posted in Java at Dec 13 2002, 06:23:07 PM MST 1 Comment

JBoss and J2EE Certification

I don't know if you've read this article that says JBoss is going to develop an open source implementation of J2EE 1.4. Of course, they already did this with 1.3, they just never got J2EE Certified, so they were unable to claim this. The interesting part about this article is that Marc Fleury said (on Wednesday night) that he never said a word of what was published in the article. Furthermore, he and the JBoss group has no interest in becoming J2EE certified, especially because of the $300,000 price tag. However, after the article was written, and received all this press from it - he is now going to get certified. How ironic is that?!

Posted in Java at Dec 13 2002, 05:55:47 PM MST Add a Comment

E-Mail Notification of Comments

I requested a new feature today for Roller - the ability to receive e-mail notification when comments have been posted. I mentioned this wouldn't be too hard using the mailer tag library. So I got slightly motivated and did it myself. I think to add it to Roller, we should make it a little more configurable, but here's what I added above the form in weblog/comment-form.jspf:

... define mailer and c taglibs of course ...

<c:if test="$\{param.method == 'update'\}">
    <mt:mail server="smtp.domain.com">
        <mt:setrecipient type="to">[email protected]</mt:setrecipient>
        <mt:from><c:out value="${param.email}"/></mt:from>
        <mt:subject>Comment: <bean:write name="blogEntry" 
property="title" scope="request" /></mt:subject>
        <mt:message><c:out value="${param.content}"/>

<c:out value="${param.name}"/>
<c:out value="${param.url}"/>
        </mt:message>
        <mt:send>
            Doh! An error has occurred sending comments notification!<br />
            <mt:error id="err">
                <jsp:getProperty name="err" property="error"/>
            </mt:error>
        </mt:send>
    </mt:mail>
</c:if>

I had to put those \'s in their in order to get past Velocity. The one pain with the mailer tag library is everything comes through with the spacing as set in the JSP. That's why the name and url variables are squished all the way over to the left.

Posted in Java at Dec 13 2002, 07:21:56 AM MST 2 Comments