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 "matt". 663 entries found.

You can also try this same search on Google.

[DJUG] JUG Central and BPEL

Last night, I attended Denver's JUG meeting. Below are my notes from the event.

I'm at DJUG listening to Christian and Kris (from Adigio) talk about their experience with using Spring, WebWork, Hibernate, Lucene and SiteMesh to develop JUG Central (I wonder if they knew this name and concept already exists?). JSPs are for the view and MySQL powers the data. This presentation is designed to explain a bit about each framework, and also tips/tricks and pitfalls they experienced when developing the site. They started working on the application in August of last year and deployed it into production in December.

Christian said they weren't going to go into the how for each framework, but Kris has had quite a few slides on SiteMesh so far. I don't blame him - it's a great tool and only a handful of folks (of about 50-60) have heard of it.

SiteMesh Pitfalls: Poor integration with Velocity and some other frameworks. BTW, if you're using Tapestry - Erik Hatcher recently created a JIRA patch with a Tapestry Decorator.

Now Kris is talking about WebWork and since he's a framework junkie, apparently this is going to be the largest part of the presentation. I think one of the nicest parts of WebWork is its auto-type conversion. The only other frameworks I've seen that have this is are JSF and Tapestry. For those that like WebWork and don't like JSF - you might find it disturbing that the WebWork actions (and their tests) in AppFuse are very similar to the JSF managed beans. I would take it as a compliment if I were a WebWork developer.

One nice thing about XWork's action configuration is you can specify a "method" parameter for a particular action. Struts recently added this with its MappingDispatchAction. I'm using this on my current project and it works quite well. Kris really likes WebWork's front-page controller pattern - where you use the <ww:action> tag to execute the action when the page is loaded. Personally, I don't have a problem with going through actions to get to my view templates. Kris finished up his WebWork piece with a plug for AppFuse (thanks!) and WebWork in Action. Congrats to all the authors - wonder if it'll be published before WebWork Live?

Now Christian is talking about Hibernate and its mapping files - and how you can generate your database schema from them - or generate your mapping files from a database. They used XDoclet to generate the mapping files in this particular project.

Hibernate Pitfalls: Think about lazy-loading early. Problems arise when you try to share Hibernate-managed objects across (Hibernate) sessions transparently. Christian mentions that Spring's OpenSessionInViewFilter is a nice way to solve the problem.

Hibernate Tips: Spring simplifies using Hibernate and makes declarative transactions easy. Read Hibernate in Action before starting development. Plan to spend some time learning how to express your data model with Hibernate relationships (one-to-one, one-to-many, many-to-many, etc.).

Christian is now talking about Spring and how it works. After thinking and writing about Spring so much in the last year, I'll just skip over regurgitating this part. ;-) His main recommendation: use real injection instead of appContext.getBean("beanName").

Other tools used: Lucene for searching and POI for indexing Word, Excel and PowerPoint files. Velocity used for templating e-mail messages.

Service-oriented Architecture (SOA) with Business Process Execution Language (BPEL)
Presented by Kevin Geminiuc and Owen Newnan from Policy Studies

This point of this presentation is to communicate what it's like to implement BPEL in a J2EE Container. BPEL is a layer on top of web services. BPEL is a programming language that you can use to program business processes. Allows you to divorce your business process from being human-centric to being document-centric. At Policy Studies, they're using iLog JRules rules engine and Oracle's BPEL implementation.

Benefits:

  • Process Visiblity
  • Process Agility
  • Powerful Language
  • Open
  • Backed by "the Big Boys" (BEA, Microsoft, IBM)

History: Formerly knows as BPEL4WS, WSBPEL. Open standards based. Orchestrates web services with SOA.

Where we are today: Emerging technology (prepare to bang your head against the wall). .NET and Java products exist, as well as J2EE container integration.

BPEL is: BPEL is not:
  • A programming language for business processes
  • A language for specifying e-business transactions
  • XML-based layer atop WSDL
  • A declarative and procedural language
  • Designed for human workflow
  • A JSR spec (207 and 208 are related though)
  • Mature Technology
  • Your typical web services application
    • asynchrony as well as synchrony
    • callbacks
    • composite synchronous services

BPEL & WS Standards: BPEL, XPath, WSDL, WS-Addressing, SOAP, XML-Schema, WSIF (Axis), TBD (WS-ReliableMessaging and JSRs 207/208). Note that since BPEL depends on web services (which is not a truly reliable service). Because of this, there are some proprietary extensions available.

At this point, I became bored with the presentation and quit taking notes. While the speakers had good intentions with their knowledge sharing, their delivery needed some work. The code walkthrough and demos were presented with a monotonous and unexcited tone, and a handful of folks left during this part. In summary, BPEL looks like a good way to orchestrate your various business processes. It allows you to call web services, EJBs and whatnot simply by defining their locations and methods in XML.

In his demo, Kevin used Oracle's BPEL Designer, which is an Eclipse plugin that has a nice drag-n-drop editor for managing your BPEL XML files. He also used Oracle's BPEL Process Manager, which seemed to be a lot like Jetspeed - you just drop in the .ear and then deploy your processes to it. The only bad part about the Process Manager is it's administration/deployment interface only runs in IE.

If you're using BPEL in your projects, I'd be interested to hear the tools you're using. As far as open-source BPEL process engines, they mentioned Twister and ActiveBPEL.

Posted in Java at Feb 10 2005, 07:05:39 AM MST 5 Comments

JTidy Filter

For those folks looking for pretty HTML when doing a "view-source", they might want to check out the JTidy Filter. I tried to integrate this into AppFuse, but no dice. It never prettied up the HTML - maybe it's a SiteMesh conflict or something, who knows. I doubt I'll add this to AppFuse. Mostly because no customer/project has ever asked for this and because I couldn't get it to work (failed the 10 minute test, but I actually spent an hour on it).

Posted in Java at Feb 09 2005, 09:11:59 AM MST 9 Comments

AppFuse not for Rookies

Adrian Sutton hits the nail on the head:

...for seasoned veterans who understand (its) technologies well, AppFuse should be a big time saver. I can see a lot of beginners getting into very deep water with it though.

AppFuse can help you get started quickly, but it won't help you really learn how to use the different technologies. Its tutorials are designed to show you how to CRUD a simple object, but that's about it. For learning the different frameworks, that's what books are for. Technical authors put a lot of time and energy into writing. A good way to show your appreciation is to buy their books. :-D

My Recommendations:

Posted in Java at Feb 08 2005, 04:04:59 PM MST 7 Comments

Generate your iBATIS mapping files with sql2iBatis

From the iBATIS mailing list:

Hi everyone, 

I just wanted to remind everyone of Alex Egorov's sql2iBatis tool. 
I've recently had the chance to try it.  If you have a database that's
already created, this will save you a lot of time.  It will kickstart
your project.

Given DDL, it generates the SQL Mapping files and the JavaBeans.  It's
super simple and extremely fast.  You may want to tweak the Perl to
generate bean field naming conventions to your liking, or just
refactor it afterwards.   You might also want to run the source
through Jalopy or your favorite IDE formatter to achieve the
formatting you want.

However you cut it, this tool will save you tons of time (even if you
don't use everything it generates...deleting is faster than writing).

http://alxeg.narod.ru/ibatis/index.html

Cheers,
Clinton

Too bad it's a perl script. It would be nice to add something like this to AppFuse so you could get the same generate-mapping-files thing like Hibernate has with XDoclet.

Posted in Java at Feb 02 2005, 07:10:11 AM MST 5 Comments

So Struts is Dead, huh?

So most folks think Struts is Dead, huh? I've got news for you folks. Struts has been dead since 2002. For that matter, most Java frameworks have been dead for the last year. Most folks think Struts is dead because there won't be any new and whiz-bang features added in future releases. I'm willing to bet the other Java Web Frameworks won't add any whiz-bang features in the next few years either. Sure, WebWork might get a little XMLHttpRequest lovin' for client-side validation, and Tapestry might get pretty URLs - but both of these are features that these frameworks should've had in the first place. So what's the big deal? At least the Struts Developers have the guts to stand up and say "we're in maintenance mode". Shouldn't all framework developer's be able to say this? It's really quite an accomplishment.

IMO, the only developers that shouldn't be saying this are Tapestry and JSF folks. Both of these teams should be saying - "we're going to make our frameworks easier." If these frameworks are going to be the future of Java web development, there's some work to do. The JSF folks should be saying, "we're going to fix all the stuff that's broken". This "stuff" includes POST for everything, lack of bookmarkability, and bad validation messages (the good news is the validation messages should be fixed in JSF 1.2). I think Tapestry needs some simplification too. In my experience, most Tapestry pages (by design) require 4 files. One for the Java class, one of the HTML template, one for the page specification and one for the i18n keys. This should be easier. It'd like to see two required files (template and Java class) and the others are optional. Maybe annotations could eliminate the page specification? I think there's a lot to be learned from frameworks like Ruby on Rails: default everything, allow overriding.

I think that Shale will be good, but only if it learns from the other MVC frameworks available. If I were on the team, I'd take the good things from all the others: IoC, Interceptors, HTML templates, etc. I wouldn't stop there either - there needs to be good examples of how to integrate it with middle-tier frameworks like Spring, Hivemind and EJBs. Often developers will take examples as recipes - so the more detailed and simple, the better. The Struts developers have quite an opportunity to make something great, let's hope they don't just create another framework.

Posted in Java at Jan 31 2005, 06:48:01 PM MST 13 Comments

Short and sweet contracts

This has been a good month for Raible Designs. Not only did I manage to land a new gig, but I've also had a couple of 1-day contracts. The first one was an architectural review (at the beginning of the month), and yesterday I delivered a presentation on TDD and Spring for a client. These short-n-sweet gigs are a lot of fun. It's a good way to get out and meet members of the Java Community and see what tools they're developing with. The first client is using Struts, Spring and Hibernate. The second client wanted to use Struts, but after my talk, they're thinking about Spring MVC. They plan on using Spring to make EJBs easier, and they're using TopLink on the backend.

The only bad part about yesterday's experience is I developed a full-body ache as soon as I left the client's site. I managed to catch a cold from Abbie this weekend, and that turned into a cold+fever last night. I've had the fever ever since and didn't go into work today. It's really shitty timing for getting sick - we have a deadline on Thursday and we're heading to Oregon to see my parents this weekend. Last I checked, my fever was at 102°F. Hopefully, I'll wake up tomorrow and it'll be gone.

Posted in Java at Jan 25 2005, 08:38:50 PM MST 6 Comments

AppFuse at Dallas JUG

Apparently, the Dallas JUG will have the pleasure of listening to a presentation on AppFuse this Wednesday. I can't seem to find any information on their site, but someone forwarded me an e-mail that looks genuine. You know a project is getting popular when other people are giving presentations on it! ;-)

Posted in Java at Jan 25 2005, 08:35:38 PM MST 4 Comments

AppFuse Startup Video?

Dion wants to see an AppFuse Startup Video like Mike Clark's CruiseControl Action Movie. While this sounds like a good idea, I think I'd be shooting myself in the foot if I created it. Why? Because then more folks would start to use AppFuse, and hence, I'd have to answer a lot more e-mails on the mailing list. Being a top-ranked project on java.net doesn't help. You might think that there's a lot of issues with AppFuse, and that's why the mail traffic is so high, but that doesn't seem to be the case. Most questions seem to be along the lines of "Why did you do this?", "What do you think about adding X technology?" or "My Hibernate relationships don't work."

Few of the issues relate to AppFuse directly (i.e. build file and directory structure), but many of them relate to the technologies it depends on. Good HowTos should lead to a lot less Hibernate questions, and I hope to work on that before the next release. As far as the other questions, I need to add some links from the FAQ to the mail archives so I can quite repeating myself. I think a lot of the mail traffic is just an indication of a successful open-source project. In other words, when you get popular - you have little time to develop anymore. I probably spend 1-2 hours per day just answering AppFuse e-mails.

Another unfortunate side-effect of this is that there seems to be a lot of newbies. When AppFuse was first released in April 2003, it seemed that only experienced, smart developers used it. Maybe this was because there wasn't any documentation (besides Pro JSP and Java Development with Ant, which explains the entire build.xml file), so folks had to really understand the dependent technologies to use AppFuse. Now there's questions about the basics of different frameworks. In most cases, I'd like to respond to a link to the framework's documentation - but sometimes the documentation just isn't there. I guess that's why frameworks like Ruby on Rails succeed - all the dependencies are part of the framework. If I tried to do that in the Java Community, it'd be project suicide. I'd spend all day answering questions like, "Why aren't you using Hibernate?", "Why Not Spring/JSF/Struts, etc." Furthermore, I'm not as smart as the framework developers, so it'd simply never happen.

But I digress. What's in it for me if I create an AppFuse Startup Video? I can see what's in it for Mike - his video is about a project he doesn't support (AFAIK) and the video should lead to more book sales. I suppose I could try and hook users that AppFuse is explained in Spring Live, but that's not really the case. Maybe I should just do an Equinox Startup Video. ;-)

Posted in Java at Jan 24 2005, 10:29:12 AM MST 15 Comments

RE: Hype: Ruby on Rails

Patrick thinks that Ruby on Rails is all hype.

Now maybe I'm just a bit biased since my framework isn't getting all the slashdotters oohing and awwing over it, but I think Ruby on Rails is way over hyped. The tutorial here is great and gave me a very good overview of what it does. At the end of the day, RoR is simply a RESTful CRUD framework.

I'd like to agree with Patrick, because that is my natural tendency when I see a project that everyone praises. But I know better. I think it's better not to speculate on the productivity or usefulness of a framework until you've used it to develop an app.

That's what I did with Spring, WebWork, Tapestry and JSF last year. Now I feel like I know "the truth" and whether one framework is better than the other. The truth is they all have strengths and they all have weaknesses. While one might work well for one project, it might not for the next. I think the best thing is that you don't setup yourself for framework lock-in. If you only know one web framework for Java, you should probably pick up a book and develop an app with another framework - just to see how things are done differently. Now that I've used all of the Big 5 in Java, I don't think it would be that hard to migrate an app from one framework to next.

So what am I trying to say? Don't bash on a framework until you've tried it. And I don't mean toying around with it on a Tuesday night, I mean using it for a real-world project. I'll probably diving in and doing a little Rails development later this year. Why? So I can see if all the hype is accurate. ;-)

Posted in Java at Jan 21 2005, 01:40:37 PM MST 8 Comments

Maven Console and setting properties

I've been using Maven at my new gig and the Maven Console in order to avoid its painfully slow startup times. Using a slow-ass PowerBook in conjunction with Maven makes my face turn read and my ears smoke sometimes, but I'm getting used to it, much to my dismay. While the console has made things tolerable, Maven itself keeps getting in the way. I hate how it *requires* me to run my tests everytime I build or deploy. So I've turned that off by creating a build.properties file with "maven.test.skip=true". The problem with the Maven Console is it doesn't let me turn tests back on, so I'm stuck with running "maven test -Dmaven.test.skip=false" when I want to run my tests.

There's two ways I can think of to solve this problem:

  • If "maven idea:multiproject" allows me to setup my project so that Tomcat/Resin/whatever can point to my source directory and I don't have to deploy. I'm a web developer, and I typically have to run "maven deploy" to test simple UI changes. That's why I turn the tests off - because I want a 1-2 second turnaround to see my changes. BTW, it's too bad there's no "eclipse:multiproject" goal.
  • Enhance the console so it's possible to set properties. For example, typing "-Dmaven.test.skip=false" would set the property so the next time I run "maven war", my tests would be run. That, or allow me to run "maven war -Dmaven.test.skip=false". Allowing this would also make it possible to run a single test from the command line, instead of all (the only current option).

Posted in Java at Jan 20 2005, 09:43:30 AM MST 11 Comments