Matt RaibleMatt Raible is a Web Developer and Java Champion. 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.

[DJUG] Portlets and Portal Architecture with Scott Ryan

The genesis of this talk is Scott's has talked to a lot of developers about web development and most don't understand all the features you get from portal servers. A lot of developers don't know how to sell them to upper management. Typically, they're very expensive, but you get a lot of functionality and features for the price. Portal servers are not just glorified web applications.

You all know what portals are, right? Yahoo is probably the most famous. RockyMountainNews.com uses a portal server, so does Denver Post. The top commercial offerings are BEA WebLogic, IBM WebSphere, Plumtree, Vignette, ATG and Microsoft Sharepoint. The first version of WebSphere was based on Jetspeed 1 and it was a pretty bad implementation. Plumtree was bought by WebLogic and is apparently a combination of .NET and SOA. Microsoft claims they're adding more portal-like stuff, but currently it's very document-management centric (reminds me of Alfresco).

On the open source side, the players are Liferay, Jetspeed, JBoss Portal, Exo, Metadot, Plone, PHP-Nuke and Magnolia. I didn't know Magnolia was a portal server, must be a new feature. Liferay is Scott's favorite, Jetspeed is pretty good, but not much out of the box.

Portals all started because companies had disparate websites and wanted a way of combining them into a single dashboard. Pieces of a portal:

  • Single Sign-on with a unified security model.
  • Security/Administration: Portals usually have a content-management component, which allow delegated administration. It's difficult to organize this initially, because of the need to create a hierarchical organizational structure of permissions.
  • Personalization: out-of-the-box you can customize the look-n-feel. A lot of times these are driven by rules engines, particularly in the open source arena. Content can often be customized so you can add/remove items that you're interested in.
  • Content Management: always comes with a portal because a portal is usually responsible for displaying content. Some include workflow and administration features, like locking, version and administration. JSR-170 defines an interface for accessing CMS systems.
  • Collaboration: this is the hot thing this year. Forums, discussions, blogs, RSS feeds, real-time chat, etc.
  • Administration: Creation of users, groups and roles. Page and portal layouts, themes, skins and CSS. Selective rights to users to modify desktops and portal attributes.
  • Search: Federated search, content repository and meta data search. Web page, database and file system search.
  • Interaction Management: Rule-based personalization, campaign execution and management. Event and behavior tracking. Content/Product centric marketing.
  • Commerce: Catalog, shopping cart, etc.

For doing portlet development, Scott recommends using a more native technology (i.e. Struts, JSF, PHP, JSP, etc.) and enabled it as a portlet using bridges. Development interfaces are offered via the web or many commons IDEs. You will need some XML, HTML, JSP, CSS and graphics experience to totally enable a portal. Sounds similar to the stuff you need to know for Ajax, eh?

Portals require a mix of development and configuration skill sets. The mix of configuration and development is determined by the platform. Try to lean away from the proprietary features but don't run away from them. Look for pre-build portlets, themes, skins, etc.

One big gotcha of portlet development is source code management. When Scott started developing with portlets, there was no such dev/test/prod setup - vendors just expected him to modify prod. Vignette has a "car" file archive, Liferay has a "lar" archive. These files allow you to easily deploy the changes required for a portlet to work. Apparently, this is still a space that needs a lot of work to allow good source-code control and the ability to rollback updates.

When rolling out a portal for an organization, it's important to start small and build features incrementally.

At this point, my laptop died - as in it went completely black. I hit the power button and it started up again, complete with the loud "bong" for all to hear. A few seconds after restarting, it went black again, so I gave up. After Scott's talk finished, I opened up and tried again - and now it's working.

The rest of Scott's presentation was very cool - he did demos of Liferay's and WebLogic's portals. Liferay looks very cool and a lot of their features remind me of Netvibes.com.

Posted in Java at Jun 14 2006, 07:15:31 PM MDT 4 Comments

DJUG Tonight: Portals, MyFaces and Dojo

Tonight's Denver JUG meeting should be a good one. Scott Ryan is going to do a presentation on Portals, followed by Bill Dudney on integrating MyFaces and Dojo. Both presentations look interesting, but I really like what's in Scott's description:

The real questions is what really makes up a portal and what makes it different from just a normal AJAX enabled website. In this basic concepts presentation we will look at the components that make up a modern portal framework. We will look at the common architecture of this framework and what pieces and parts you should expect to find inside a portal framework. We will examine several commercial and Open Source portal frameworks including PHP and Java based portal framework. We will look at some of the tools that enable you to develop and configure a portal and if we have time we will look at installing and developing with a common open source portal framework.

With any luck, I'll be able to blog both talks.

In case you weren't aware, Scott has also done a fair amount of work migrating AppFuse to Maven 2, along with Brian Topping. Scott has put together an appfuse-maven-plugin and Brian has converted an existing AppFuse project to Maven 2. Read more about the move to Maven 2 in this mailing list thread.

Don't forget the best part of DJUG - networking at the Rock Bottom Brewery!

Posted in Java at Jun 14 2006, 09:34:02 AM MDT Add a Comment

Seam 1.0

I've posted my thoughts on Seam 1.0 to my Virtuas blog. What are your thoughts?

It's great to see the release of Seam 1.0. Seam is similar to many full-stack frameworks like Rails, Rife and AppFuse in that it gives you all the pieces you'll need to build a kick-ass web application.

I've blogged my thoughts on Seam before, so there's no need to do that again. I like the idea, especially the lack of interfaces and the 3-files-for-each page idea. However, I don't know that this concept will fly with Java developers. I agree there's a need to simplify, but many of us are mesmerized by the de-coupling that Spring gives us. So now we're programming to interfaces, and every-so-often swapping implementations. I don't know that we can switch to this simpler model. And then there's the "EJB" thing. I think there will be a fair amount of developers that don't use EJB3 simply because it has the "EJB" name. The best thing the EJB Expert Group could have done for EJB3 would be to give it a new name.

The other thing I worry about with Seam is that it wasn't developed from an existing application. AFAIK, it didn't get extracted from a real-world application that had all the problems that Seam solves. I know that Gavin is a smart guy, and he's probably seen these problems in the real world, but there's nothing like developing a real-world application with a technology - and then extracting the framework from that.

In reality, I'm probably jealous. Seam has some really cool features, JBoss has done a great job of marketing it, and it seems to be a really cool way to develop applications. If I'm going to make AppFuse a direct competitor to Seam, it's gonna be quite the uphill battle.

Posted in Java at Jun 13 2006, 04:45:48 PM MDT 5 Comments

Integrating JCaptcha with Acegi and AppFuse

Jason Thrasher has put together a nice howto for integrating JCAPTCHA with AppFuse via Struts. If you're interested in making your application more secure for signup or authentication, check it out!

Posted in Java at Jun 13 2006, 01:43:29 PM MDT 2 Comments

Join the AppFuse Frappr Group

If you're an AppFuse user, please join our AppFuse Frappr Group. GlassFish may be winning in java.net stats, but I think we can beat them at the Frappr stuff. ;-)

Posted in Java at Jun 08 2006, 04:16:43 PM MDT 1 Comment

[ANN] AppFuse 1.9.2 Released

This release includes CSS Framework integration, EMMA code-coverage support and AppGen sub-package support. Thanks to the CSS Framework Design Contest Winners, Doug Hays and Mika Göckel for their help with this release.

To install and configure AppFuse for development, see the QuickStart Guide. Thanks to all the sponsors who have contributed products and free hosting to the AppFuse project.

To see how AppFuse works, please see the following demos (username: mraible, password: tomcat):

TIP: If you login as an administrator, you can change the theme by appending ?theme=themename to the URL. The default theme can be set in web/WEB-INF/web.xml.

Comments and issues can be sent to the mailing list or posted to JIRA.

NOTE: This release contains Acegi Security 1.0 RC2 rather than the recently released 1.0. This is because a couple issues were found with the 1.0 release. When Acegi Security 1.0.1 (or 1.1) is released, all AppFuse users are encouraged to upgrade.

This (hopefully) marks the last release from AppFuse 1.x. AppFuse 2.0 development should start shortly. See the roadmap for more details. I'd like to say it'll be done in the fall, but I already said it'd be done two months ago. ;-)

P.S. For those of you that won the CSS Framework Design Contest, I'll be contacting you within the week to get you your prizes.

Update: If you're building AppFuse on Linux, you should be aware of some non-English encoding issues. The solution is to add something like the following to your ~/.bashrc file.

export LC_CENGINE=en_US
export LANG=en_US
export LANGUAGE=en_US

Posted in Java at Jun 06 2006, 03:24:59 PM MDT 15 Comments

It's all about finding people and stickiness

From Malcom Gladwell's "The Tipping Point":

The Law of the Few says that there are a few exceptional people out there who are capable of starting epidemics. All you have to do is find them. The lesson of stickiness is the same. There is a simple way to package information that, under the right circumstances, can make it irresistible. All you have to do is find it.

Posted in Java at Jun 05 2006, 08:45:13 AM MDT 4 Comments

[ANN] AppFuse 1.9.2 RC1 Released

AppFuse The primary reason for this release is to integrate Mike Stenhouse's CSS Framework. Since this involves many UI changes, we're publishing a release candidate that uses Herryanto Siatono's "simplicity" theme. For the final 1.9.2 release, we hope to offer themes from all the CSS Framework Design Contest Winners.

To install and configure AppFuse for development, see the QuickStart Guide. Thanks to all the sponsors who have contributed products and free hosting to the AppFuse project.

To see how AppFuse in action, please see the following demos (username: mraible, password: tomcat):

Comments and issues can be sent to the mailing list or posted to JIRA (please use version 1.9.2). Hopefully we can release 1.9.2 final in the next week or so.

Update: I've finished a first stab at integrating the puzzlewithstyle and andreas01 themes. I've only tested these in Firefox so far, but you can see them in action on the demo site using the webwork and jsf flavors.

Update 2: 1.9.2 Final has been released.

Posted in Java at Jun 02 2006, 03:54:17 PM MDT 8 Comments

Knowledge of AppFuse and an appreciation of fine wine

It's not everyday you see a job that lists "Knowledge of AppFuse and an appreciation of fine wine" as optional skills. I asked Julie if she wanted to move to Napa Valley, but no dice. Too bad - sounds like a job I'd really enjoy. ;-) Thanks to Solomon for the tip.

Unfortunately, I'm still working on AppFuse 1.9.2 and I've given up on estimating when I'll be done. I'm having a hard time finding time to work on it between client meeting and being a good dad. The biggest frustrations so far are the good ol' component based frameworks: JSF and Tapestry. JSF sucks because of JSP and Tapestry is giving me fits because I can't seem to stuff a <span> inside a @FieldLabel. I'd like to think that component-based frameworks are more flexible than their action-based counterparts, but I'm finding quite the opposite so far.

Posted in Java at May 30 2006, 10:10:35 PM MDT 3 Comments

Is there a component like panelGrid that uses ul instead of table?

JSF 1.1 has a problem with JSP in that it can't bind components together when a page first loads. This is well documented in Improving JSF by Dumping JSP by Hans Bergsten.

The easy example of this problem is when you have <h:outputLabel> tags before <h:inputText> tags. The average JSF user might not notice the problem, but if you customize <h:outputLabel> to display "required field" indicators based on the "required" attribute of <h:inputText> - the issue slaps you in the face. The easy solution is to use <h:panelGrid> to layout your form data, and everything magically works. However, table-based forms are ugly and I'd much rather do pretty forms like this one.

In order to create pretty forms and get around the JSF sucks with JSP problem, I'm looking for a component similar to panelGrid - but it spits out <ul> and <li> instead of <table> and <tr>/<td>. Does anyone know of such a component? I asked this question on the MyFaces list this morning, but haven't had much luck.

I'm fully aware that Facelets (or Clay) will solve this problem. However, I'm merely trying to get AppFuse 1.9.2 released without making major changes. I suppose I could always go with ugly table-based forms, but I'd rather not.

Posted in Java at May 23 2006, 12:55:44 PM MDT 13 Comments