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.

A good story.

A friend of mine, Cliff Nellis, is riding his bike across America for charity and fun. He left last weekend, and had an opportunity to send us (friends) an e-mail today.

Towing 50 pounds of gear, the heat, no clouds, no shade, no breeze, running out of food and water with 15 miles left, and ending with one climb after another heading west into Walsenburg proved to be a test to say the least. FOUR miles outside of Walsenburg, I finally passed a house, and even though there was only four miles left, I knew I had to stop for some water. The lady was really nice...gave me some cold water and a popcycle. Still those last four miles were tough. I completely BONKED.

It was very enjoyable for me to read, so I asked him if I could share it. He said sure - [ full story ].

From Denver, I will bike to San Diego, and from San Diego, I will bike across the southern coast to Miami, FL. The total distance covered will be roughly 4,600 miles. On the way, I will bike through some of the areas that have been hit by wildfires this summer. I will pitch a tent at campgrounds most nights. I will carry my gear in a one-wheel B.O.B., which is essentially a trailer for a bicycle. I am excited to bike through many scenic parts of the country, including Moab, Lake Powell, the Grand Canyon, Lake Mead, the Mojave Desert, and the Rocky Mountains. I also look forward to biking through major cities, such as Las Vegas, Los Angeles, San Diego, Phoenix, Houston, Mobile, Biloxi, Orlando, and Miami. Mostly, I look forward to meeting the people. On a previous cross-country bicycle trip, I found that the people make the trip. If all goes well, I am registered to compete in the Great Floridian Ironman on October 19, 2002, in Clermont, FL. [ Website ]

Posted in General at Aug 27 2002, 12:54:53 PM MDT Add a Comment

Bookmark a group of tabs.

A sweet tip from Russell:

I AM using Mozilla's awesome "Tab-Group Bookmarks" feature which basically opens up a folder of favorites all in one window with a tab per link. I've got everyone in the JavaBlogs section of my blogroll in one and I can just open it up and flip through the tabs one by one. The sites I want to respond to or read more in depth stay open, but the others get closed (quick middle-button click). It's working out really well to keep up with the blog list on the left.

To use it, it's very easy:

  1. Open all your favorites sites using tabs.
  2. Go to "Bookmarks" and "Bookmark this group of tabs..."

Doesn't get much easier than that, and he's right - it's WAY cool!

Posted in The Web at Aug 27 2002, 10:16:57 AM MDT 1 Comment

Mozilla 1.1 Released!

View Release Notes. Download: OS X, Windows, Linux.

Posted in General at Aug 27 2002, 02:54:48 AM MDT Add a Comment

Marc Fluery on Open Source

At JBoss, a lot of our professional motivation as developers is tied to the personal satisfaction that can be obtained through the Open Source lifestyle. It's about being your own boss, doing the work you enjoy, living and working where you want, collaborating with your peers worldwide, getting to see the kids grow up. [Full Article]

Posted in The Web at Aug 26 2002, 09:31:21 AM MDT Add a Comment

We've come a long way baby.

I stumbled upon The Internet Archive today. It's by far one of the coolest websites I've seen it a while. They have created the "Wayback Machine" which makes it possible to surf pages stored in the Internet Archive's web archive. In other words, you can checkout what Yahoo looked like in 1996. Kinda funny that 1996 is way back, eh?

Posted in The Web at Aug 26 2002, 09:09:06 AM MDT Add a Comment

Google ranks raibledesigns.com #1

in 2 different queries! I found via my usage statistics today that both "j2ee designs" and "raible" (of course) turn up this website as it's first choices. Cool, and after checking the cached versions, that was before adding new meta tags last week! swwwwwwweeeeeeeeeeeeeeeettttt

Posted in General at Aug 25 2002, 11:48:19 PM MDT Add a Comment

XDoclet and Struts Validator

From the struts-dev list and Erik Hatcher:

My XDoclet Struts Validator validation.xml (for Struts 1.1) has been posted to the XDoclet tracker.
I'm hoping it will be added to the codebase and put into the upcoming new release of XDoclet (although I'm using XDoclet from CVS builds). Read the HTML file attachment on the issue page above for an example of how it works. If you're hand-coding validation.xml and using ValidatorForm extensions then this is for you!

I can't wait to use XDoclet in my next project! On my current project, I've already written most of the ValidationForms I need. I used the Generator package to do this, but I hope to either (1) refactor my current project to use Castor/XDoclet like Roller, or (2) use it on my next project.

I ordered an Ant book this evening in hopes of learning a lot more about Ant. I think I know a lot, but there's always room for more knowledge.

Posted in Java at Aug 25 2002, 03:47:45 PM MDT Add a Comment

Private Weblogs in Roller

I've used a "quick and dirty" technique for making a private roller weblog for family members only. Maybe Lance can use this to create a private weblog for his mom ;-)

  1. Create a new roller user: i.e. "mom"
  2. Create a user for user's to login with (I just created another roller user): i.e. "kids"
  3. Add a new role (i.e. "family") to the "role" table in your database
  4. Add two new records to the role table so the "mom" and "kids" roles have the "family" role
  5. Add the following to web.xml:

    <security-constraint> 
        <web-resource-collection>
            <web-resource-name>My Family</web-resource-name>
            <description>Restricted to Family Members Only</description>
            <url-pattern>/page/mom/*</url-pattern>
            <url-pattern>/rss/mom</url-pattern>
            <http-method>POST</http-method>
            <http-method>GET</http-method>
        </web-resource-collection>
    
        <auth-constraint>
            <role-name>editor</role-name>
            <role-name>family</role-name>
        </auth-constraint>
    </security-constraint>
    
  6. Distribute the "kids" username/password to the appropriate parties.

Hope this helps!

Posted in Roller at Aug 25 2002, 03:19:54 PM MDT 2 Comments

Upgrading from Tyrex 0.9.7 to Commons DBCP.

I'm trying to upgrade from Tyrex 0.9.7 (ships with Tomcat 4.0.4 for connection pooling) to the Commons DBCP (ships with Tomcat 4.1.x for connection pooling). I've set it up according to these instructions. However, my connections don't seem to be getting closed, or it's closing the connection pool and I get a "connection is closed" error.

If I use this method to close connections, I get "connection is closed:"

    /** Closes a connection from the connection pool */
    public void closeConnection(Connection con) throws ServiceLocatorException
    {
        try {
            con.close();
        } catch (SQLException sqle) {
            logger.error("SQLException: " + sqle.getMessage());
            throw new ServiceLocatorException(sqle);
        } finally {
            if (con != null) {
                // try again
                try {
                    con.close();
                } catch (SQLException csqle) {
                    // ignore
                }
            }
        }
    }

I changed my closeConnection method (see below). It seems to work better (no closed connection error), but I am wondering about the open connections to mysql. When I monitor them (show status; watch Threads_connected), there are 3 at first (I'm guessing from my monitor connection, JDBCRealm and Connection pool). It gets up to 5, any tips on how I can tell if connection pooling is working?

    /** Closes a connection from the connection pool */
    public void closeConnection(Connection con) throws ServiceLocatorException
    {
        try {
            con.close();
        } catch (SQLException sqle) {
            logger.error("SQLException: " + sqle.getMessage());
            throw new ServiceLocatorException(sqle);
        } finally {
            // try again
            try {
                if (!con.isClosed()) {
                	con.close();
                }
            } catch (SQLException csqle) {
                // ignore
            }
        }
    }

I think the problem is that it's not creating a "pooled" connection. When you are using a connection pool, con.close() should just return it, not actually close it - right?

In my getPooledConnection method, I'm getting "Non-Pooled Connection" each time.

    /** 
     * Retrieves a connection from the connection pool
     */
    public Connection getPooledConnection() throws ServiceLocatorException
    {
        try {
            ds = (DataSource) getEnvContext().lookup(Constants.JNDI_DB);
        } catch (NamingException ex) {
            logger.error("NamingException: " + ex.getMessage());
            throw new ServiceLocatorException(ex);
        }
        
        try {
            if (ds instanceof ConnectionPoolDataSource) {
                ConnectionPoolDataSource poolDataSrc = (ConnectionPoolDataSource) ds;
                PooledConnection pc = poolDataSrc.getPooledConnection();
                con = pc.getConnection();
                if (logger.isDebugEnabled()) {
                    logger.debug("Pooled Connection");
                }
            } else {
                if (logger.isDebugEnabled()) {
                    logger.debug("Non-Pooled Connection");
                }
                con = ds.getConnection();
            }
        } catch (SQLException ex) {
            logger.error("SQLException: " + ex.getMessage());
            throw new ServiceLocatorException(ex);
        }
        return con;
    }

If you have a WAG/suggestion, please enlighten me!

Posted in Java at Aug 24 2002, 04:12:15 AM MDT Add a Comment

Problems with UserTransaction/Tomcat on OS X

I'm having some problems getting a "UserTransaction" to work in a Struts Action on Tomcat 4.0.4 in OS X with JDK 1.3. The same code works fine on Windows XP/Red Hat Linux 7.2-.3 with JDK 1.4. Maybe it's a JDK 1.3 issue? Any suggestions/tips are appreciated.

Posted in Mac OS X at Aug 24 2002, 04:01:36 AM MDT Add a Comment