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.

DeepBlack ~ Java-based weblog app

I found this gem on the Hibernate developer's mailing list this morning.

It's released under GPL, and I've been developing this for the last year or so and while I consider it a early beta, it's really got a lot of features, and I definitely believe it's a strong alternative to any webblog app out there, including Moveable Type.

DeepBlack is found here: http://deepblack.blackcore.com

And I do eat my own dogfood. To see it in action:
http://www.blackcore.com/blog

Looks nice Tim! And you gotta like this part:

Roller is another excellent blog program that's been gaining a good audience. I even admit to looking around the Roller code in the CVS every once a while for ideas.

Glad to hear we helped!

Posted in Java at Jun 13 2003, 06:55:57 AM MDT 2 Comments

Testing from Kung-Log

I'm writing this post using Kung-Log. In the list of blogging clients in the latest issue of MacWorld, it received the highest rating. It's pretty cool, but IMO, NetNewsWire is better.

Posted in General at Jun 12 2003, 08:39:16 PM MDT Add a Comment

Customizing JSPWiki

I've installed JSPWiki on this server in order to better support collaboration among developers. In particular, I hope to get user's tips and tricks for my demos and downloads. However, JSPWiki out-of-the-box is ugly. Dave has done a good job in making Roller's Wiki look good. So here's my question: How did you do it Dave? Rather than digging for CSS files and what not - can you hook me up with the info. I'll try to document my customization process when it ensues.

Posted in Java at Jun 12 2003, 05:22:40 PM MDT 5 Comments

The Marquises

Remember my buddy (Brett) from the Galapagos Islands? Well now he's in the Marquises. Below are the pictures that Brett and his fiance, Tiffany, sent us today.

Anaho Bay The Crew
Orca Waterfall
sunset wave

Posted in General at Jun 12 2003, 02:58:39 PM MDT Add a Comment

vi plugin for Eclipse

I found this this vi plugin for Eclipse, thanks to the previous URL trail. It's kinda cool - it works - but it's a pain that you have to "load vi" each time you open a new file.

Posted in Java at Jun 12 2003, 02:06:22 PM MDT 4 Comments

[ANNOUNCE] AppFuse 0.8 Released!

Not much new in this sucker ~ the main reason for this release is to demonstrate self-registration (and auto-login) in a CMA (Container Managed Authentication) environment. I also upgraded most of the dependent packages (i.e. Struts, Hibernate) to their latest releases, and added a binary release as an optional download. [More, Download, Release Notes]

For those of you that might not know, AppFuse is a project I created in order to help me ramp up web development projects faster. I've found it takes a long time to start a project and get the directory structure, build files (incl. ant tasks for junit/cactus/canoo) and all that jazz in place - so I created appfuse. I created it for myself, I'm using it currently at Comcast, and it works great. You might say that "Maven already does this" - and you're right, but I wanted to do it the Erik Hatcher way (after reading his book). I may make an attempt to mavenize the project in the future, but I currently don't see the need.

Posted in Java at Jun 12 2003, 01:08:14 PM MDT 2 Comments

Is XDoclet the best thing since Ant?

I think XDoclet is the best thing since Ant but that's probably because I use it daily (and nightly on on other projects). If you're not using XDoclet now, chances are you soon will be - and then you'll wonder - What took me so long? Calvin Yu gives his take on JSR 175.

I'm very excited about the new Metadata feature that's going to be in 1.5. I'm usually in agreement with the view that adding new language features is just making Java more complex, but I think metadata is going to put a whole new emphasis in automating repetitive tasks. This should also bring xDoclet to the forefront as a necessary tool for Java development.

(emphasis mine) Let's just hope that Sun tries to use some of the goodness that the XDoclet team has put together. XDoclet rocks - if you don't believe me, you must like editing your web.xml and struts-config.xml (among other deployment descriptors) by hand. I did that for years - and my opinion is that using XDoclet is easier.

Posted in Java at Jun 12 2003, 10:41:22 AM MDT 1 Comment

[JDO] Hibernate will provide an implementation if it's good

From Gavin on the hibernate-devel mailing list:

If JDO becomes an accepted standard, Hibernate will provide an
implementation. That is what I have always said. At present there are
simply too much problems / limitations with JDO for it to become accepted.
JDO 2.0 may fix that, but thats pure speculation since no-one knows what
JDO 2.0 might look like.

But we will continue to support and improve our own APIs since they will
always be more appropriate to the problem we are trying to solve: ORM. JDO
is a generic databinding API. Hibernate is not.

To me this says "You don't have to choose between JDO and Hibernate." You can chooose Hibernate and if JDO ever becomes good enough (as a standard), then you can (hopefully) find comfort in the fact that Hibernate will support it.

Posted in Java at Jun 12 2003, 09:36:45 AM MDT 1 Comment

SourceForge's Release Process Sucks

Dave asked earlier today if we should move Roller to be hosted at java.net rather than sourceforge.net. I responded with "SourceForge works for me" and didn't see any reason for a move. But after dealing with trying to release 0.8 of appfuse all night, I'm ready for something better. The release process sucks. I have to FTP files to upload.sourceforge.net (anonymously) and then, when the files are completed, selected them as files to release through the web UI.

The problem is that I've been trying to upload for the last 24 hours, and it keeps failing at different points in the upload process. So, here's the worst part - you can't "delete" from the FTP site - you have to release the file, and then delete it. What a pain in the ass - I've done this about 10 times now. My XP machine seems to be the source of my ftp-connection-dropping problem, so I've moved over to my Linux box. So now I'm ready to upload all my files, and look what SF gives me:

We're Sorry.
The SourceForge.net Website is currently down for maintenance.
We will be back shortly

Fuckers.

Posted in Java at Jun 11 2003, 11:03:26 PM MDT 9 Comments

[Hibernate] Open Session in View Pattern

I get this question a lot when folks check out my struts-resume application - so I figured I'd document it here - and then I can just send future developers a URL. The question is this:

Why do you tie your View to your Model Implementation by putting a Hibernate Session in your Service Interfaces?

I have a couple of reasons. The first reason is that I initially had ses.currentSession() and ses.closeSession() at the beginning and end of each DAO method. In fact, I found this old e-mail where you can see an example. This seemed to work for me and I was happy with it. However, I got an e-mail from Gavin (Hibernate's Lead Developer) that I was doing it all wrong. He said that I should use one session per request, rather than one on each method. Why? For performance reasons and to allow rolling back the entire session, rather than just a method. At least that's why I remember him saying.

So I refactored and implemented the Open Session in View pattern in conjunction with the Thread Local Session. You can checkout my ActionFilter and ServiceLocator for the View and ThreadLocal, respectively.

The problem now is that I pass my the Session object from my View -> Business Layer [example: UserManager] -> DAO Layer. So I'm tightly coupled with Hibernate, which I don't mind, because I really, really like Hibernate and have no plans to implement an alternate DAO (even though the architecture allows it). Even if I did choose to implement a new plain ol' JDBC DAO Layer, I can always get a java.sql.Connection from the Session using ses.connection(). Another option I've thought of is to just pass the ServiceLocator between the different layers, and call ses.currentSession() or ses.connection() when it's needed. But that seems to be the same thing I was doing before when I was opening/closing at the method level.

Comments and suggestions, as always, are welcomed and encouraged.

Posted in Java at Jun 11 2003, 02:12:31 PM MDT 8 Comments