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.

Hibernate's New Site

I can tell I've been out of the loop for awhile. Hibernate has improved their site and moved to their domain (hibernate.org). Cool - looks very nice fellas. I especially dig the fact that you're now hosting your own user forums.

I'm not doing much Hibernate work these days - my new gig already has all the persistence layer written with JDBC DAO's, so there's not much reason to re-write them. The funny part is that if I need to write a new DAO, it'd probably be faster for me to do it with Hibernate, but since politics require all technologies be approved - it'd never happen. Why do the tools developers use have to be approved? So new (and existing) developers don't have to constantly learn new stuff. Bad for brain, good for business.

Posted in Java at Sep 04 2003, 08:13:41 AM MDT 1 Comment

Maven vs. Ant

I presented my views on why we should use Maven over Ant today in a meeting. My basic reasons are simple: 1) the ability to download jars (and have a central repository for all projects) and 2) to have a standard directory structure and build/test/deploy mechanism. It's going over like a fart in a crowded room so far. The major pushback is because supposedly you can convert JBuilder's .jqx files to Ant build files. Has anyone does this? How does it work? They mentioned that if there is a converter for .jqx -> maven build files, then they'd be happy to try it.

If we do use Ant (high probability), now begins the arduous task of standardizing across projects, as well as creating a "lib" module in CVS to store all the jars for the different projects. Good thing I'm on vacation next week! ;-)

Posted in Java at Aug 22 2003, 04:13:54 PM MDT 9 Comments

PHP vs. Java - which is better?

I have a former client that has a customer. This customer asked them - "so when are you migrating from Java to PHP?" So evidently this person has the impression that the next wave of web applications will be written in PHP. My former client has asked me to provide an answer for their customer. If I translate it, I think they mean to ask "what is different between Java and PHP and why should we use Java over PHP." Here are my opinions - please add yours as you see fit. I must admit I don't know a whole lot about PHP, except that it's widely popular among the Linux/Apache/MySQL crowd and that it's similar to ASP in it's lack of a MVC architecture (yes, I know about the PHP MVC project).

  • I think Java is more of an industry standard, whereas PHP seems to be popular among hackers and hobbyists.
  • Java provides better separation of layers - key for testability. PHP has all the code embedded in the page, so you have to run it through a browser to test if database connections work (for instance).
  • Java is more scalable.
  • More folks know Java and it's easier to qualify someone's Java skills. How do you test someone knows PHP? Is there a certification?
  • More for-profit organizations use it.

If you're a Java or a PHP-lover, I'd love to hear your opionions (facts are always better). I'm going to point my client to this post, so keep it clean.

Posted in Java at Aug 22 2003, 03:52:33 PM MDT 98 Comments

Maven Questions: Webapp best practices and local repositories

I can't seem to subscribe to the Maven User Mailing List for the life of me, so I'll ask my questions here, and hopefully get some answers. The first question is regarding local repositories. Ideally, I'd like to put this on a network drive, so all developers can get to it by mapping a drive or something. When I try to use a network drive, I get the following error (WinXP, Maven CVS pull from yesterday):

Artifact '\\server\share\repository\velocity\jars\velocity-1.4-dev.jar' 
    not found to add to classpath 
java.lang.ClassNotFoundException: velocity 
        at java.net.URLClassLoader$1.run(URLClassLoader.java:199) 

The reason I'd like to use a network share (over an FTP server or HTTP server) is because then we can easily add the .jar files to the classpath in Eclipse or JBuilder. If Maven downloads the files to each user's local hard driver - then we can use an FTP server. Another option is to use the default (~/.maven/repository), but then each developer has to copy javamail and our custom jars onto their hard drive.

My second question is regarding webapp best practices with Maven. The Maven Tomcat Plugin seems nice, but it mangles my server.xml file. I'd like a solution similar to the way I've done it with Ant. I use a context.xml file and place this in $CATALINA_HOME/webapps and then I "deploy" the expanded war into Tomcat. Tomcat detects when any files change under WEB-INF/ and reloads the app. Works great. A better solution would be to point the docBase to target/webappName. So I guess what I'm saying is - should I just create a context.xml file and make my own custom "setup-tomcat" task (which does an ant:copy)? Then use war:webapp to refresh the app's files from source? How are you experts doing it?

Posted in Java at Aug 22 2003, 11:51:35 AM MDT 3 Comments

Maven and Automation of Build/Test/Deploy process

I've convinced the folks at my new project to use Maven for organizing, building and testing our projects. It's my recommendation because they have many (5+) webapps that all have the same dependencies. Maven was the obvious choice to eliminate duplication and standardize directory structures, etc. So my question is - how do I automate our build/test/deploy process? I currently use Anthill with Ant, and wish I could use it with Maven. Last time I checked, I couldn't. I've heard I could use CruiseControl. If that's true (and recommended over Anthill) - anyone got a HowTo?

Posted in Java at Aug 21 2003, 02:33:18 PM MDT 5 Comments

Tomcat 5.0.9 Alpha is now available for testing.

Download and Changelog. I won't be downloading or trying any more Tomcat Alpha's - I just don't have the time. Nor will I announce any more releases until a beta comes out. I can hear the Thank You's already... ;-)

Posted in Java at Aug 21 2003, 11:11:05 AM MDT Add a Comment

MySQL Problem: No operations allowed after connection closed

I asked the following question on the Hibernate Forums, but thought I'd put it here to see if anyone can help.

I'm using the open-session-in-view pattern and getting the following error at random:

2003-08-21 07:00:08,873 WARN [Thread-27] JDBCExceptionReporter.logExceptions(38)
    | SQL Error: 0, SQLState: 08003
2003-08-21 07:00:08,874 ERROR [Thread-27] JDBCExceptionReporter.logExceptions(46
    ) | No operations allowed after connection closed
2003-08-21 07:00:08,875 ERROR [Thread-27] JDBCException.(37) | Could not execute
    query java.sql.SQLException: No operations allowed after connection closed
at com.mysql.jdbc.Connection.checkClosed(Connection.java:2497)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:1287)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:1267)
at org.apache.commons.dbcp.DelegatingConnection.prepareStatement
    (DelegatingConnection.java:187)
at net.sf.hibernate.impl.SessionFactoryImpl.getPreparedStatement
    (SessionFactoryImpl.java:537)
at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:56)
at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:482)
at net.sf.hibernate.loader.Loader.doFind(Loader.java:136)
at net.sf.hibernate.loader.Loader.find(Loader.java:620)

I've used my same ServiceLocator.java class for the past 6 months on a couple of different projects (MySQL and Oracle), with no issues. But now I've developed a new app for a new client, and this error is popping up a LOT. Any ideas? I'm only closing the connection after my doFilter() method in a Filter.

It doesn't happen at all on my Windows XP machine (I've never seen the error). Only on Linux.

uname -a gives me:

Linux kgb08 2.4.20-8bigmem #1 SMP Thu Mar 13 17:32:29 EST 2003 i686 i686 i386 GNU/Linux

Tomcat 4.1.27, MySQL 4.0.13-Max-log, JDBC Driver mysql-connector-java-3.0.8-stable-bin.jar.

I've also seen it happen on MySQL 3.23.56, but now I can't seem to reproduce it.

Any ideas?

Posted in Java at Aug 21 2003, 07:50:12 AM MDT 11 Comments

Building high-content web applications

I've recently been tasked with rebuilding a JSP-based site using a Struts architecture. One of the issues (that I see) in the current architecture is that there are a number of JSPs with the text for the pages hard-coded in them. After re-writing this app, we plan on deploying it to 25+ customers - and we certainly don't want to have 25 different JSPs (with text) for each customer. I've proposed a database, but that might be a little resource intensive - so I'm wondering how folks have done this in the past (I'm sure it's been done before)?

Options I see are:

  • A Database table with the following columns (page_id, title, content, section_id).
  • Text files that are imported using <c:import url=""/>

What options have you used (feel free to add more) - if you've used the database approach - how do you define the page table? Maybe we should use the Roller way and use Velocity and OSCache.

Posted in Java at Aug 19 2003, 06:30:28 PM MDT 18 Comments

[ANNOUNCE] Struts Menu 1.3 Released!

Maybe I need to pay better attention. I didn't realize that Scott released the next version of Struts Menu 1.3. Feel free to check out my demo and then proceed to download it. I used the Tabbed Menu in my last project and the CoolMenu in the project at Comcast - both have been super easy to use and configure.

Posted in Java at Aug 18 2003, 09:38:32 PM MDT Add a Comment

Display Tag: Static Headers

One of the requests we get over on the display tag project is a way to have static headers. Basically, this means that a user could scroll down through all the records on a page and the header would stay in place. The next generation of the tag library has a <thead> and <tbody> that makes this fairly easy to do. For instance, just by adding style="height: 400px; overflow: auto" to the <tbody> tag - you get the desired effect. Cool stuff - only seems to work in Mozilla though. Any IE/CSS experts out there that can explain why it doesn't work in IE?

See Also: Display Tag: Static Headers - Revisited

Posted in Java at Aug 16 2003, 03:16:06 PM MDT 19 Comments