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 "eclipse". 283 entries found.

You can also try this same search on Google.

W4T Eclipse and Yoxos - like MyEclipse

The W4T Eclipse product looks pretty cool. However, the demo seems to imply that you create web apps using INNOOPRACT's web framework. While it looks useful - who in their right mind is going to develop webapps based on some company's Java framework when there's over 30 open source ones out there? Would you want to tie your application to the success of one company?

W4T Eclipse seems to be based on Yoxos. How the heck to you pronounce that?! The good news is that Yoxos is only $20 whereas MyEclipse is $30. Both are cheap - if they work well, why not have both? Note: it doesn't look like Yoxos works on the Mac (MyEclipse does).

Anyone worked with Yoxos and know what plugins it bundles?

Posted in Java at Jul 09 2004, 09:40:38 AM MDT 4 Comments

Importing OS X Address Book into GMail

One of the problems with using GMail over .Mac is that I don't have easy synchronization of my contacts from OS X's Address Book. However, there is an easy way to get your initial set of contacts imported. Google is your friend - "export contacts gmail mac" brings up this howto. Here's the condensed version:

Very nice - GMail definitely has one of the best web interfaces I've ever used. Who says JavaScript sucks? wink

Posted in Mac OS X at Jul 08 2004, 08:58:07 AM MDT 3 Comments

[JavaOne] Developing Eclipse Plugins

I briefly broke my mantra this afternoon and went to a session on Java Studio Creator. I lasted just past the agenda before I walked out. It looked to be a justification talk - telling us that Creator was made for corporate dummies that don't write code for a living. I skipped across the hall to a session on developing plugins for Eclipse. It was quite interesting and really made it look easy to develop plugins. I almost fell asleep quite a few times, but that's probably from the booze still peculating in my veins.

The best thing I got from the talk was tips and tricks for developing with Eclipse. I watched Eric Gamma do a lot of shortcuts to and quick fixes that I didn't know about. I probably won't remember them past today, but they were cool nevertheless. Now I'm off to the hotel to charge my camera and get ready to pull an all-nighter before our early-morning departure.

Posted in JavaOne at Jun 30 2004, 06:17:01 PM MDT Add a Comment

Rendezvous for Windows, can be called from Java

Rendezvous rocks on the Mac. Wouldn't it be nice if you could use it between platforms or even in your Java apps? You will be able to shortly...

Apple released a developer's preview of Rendezvous Networking for Windows 2000 & XP at wwdc 04. ... Also released was support for various POSIX platforms, including Linux, Solaris, and FreeBSD, as well as making it callable from Java. [MacRumors]

Posted in Java at Jun 30 2004, 01:06:59 PM MDT 1 Comment

How do you make your source tree Eclipse/JUnit friendly?

I've never had a problem getting builds and unit tests to work with Ant. However, unit tests run faster in an IDE, so I'm trying to refactor some code to allow for testing in the IDE. My current directory structure looks like this:

-- project
   - web
     - WEB-INF
       - classes

I need both "WEB-INF" and "WEB-INF/classes" in my classpath. There's XML files under WEB-INF for Spring and Commons Validator, and there's a log4j.xml under WEB-INF/classes for log4j. These files are all in their natural locations as far as all the projects I've seen. However, Eclipse won't allow me to nest classpaths - so it's virtually impossible (as far as I know) to add both directories to my classpath. Any ideas how to workaround this Eclipse "feature" are appreciated.

For those "IDEA is better" folks - I agree. IDEA allows me to add web, web/WEB-INF and web/WEB-INF/classes to my classpath with no issues.

Posted in Java at Jun 02 2004, 12:46:10 AM MDT 6 Comments

[NFJS Denver] Racing Sheep, AppFuse and Spring

Today, I forgot my laptop at home and therefore didn't get a chance to do any real-time blogging. It was quite nice in fact. I realized I forgot everything about halfway into my drive (30 minutes) and decided it wasn't worth turning around. Therefore, it was a day for just sitting back and soaking it all in.

This was quite a conference. Never have I seen so many great minds and influential Java Gurus in one place. The speakers were awesome, and to make things even better - I got to meet and shake hands with most of them. Who says the community in Java sucks? I'll tell you what - the Java community in Colorado is rockin'! The online community in Java might be a little terse - but the face-to-face community is a different story.

Ugh - I just had one of those "write a huge long paragraph and then lose everything" moments. Who was at fault: a combination of IE and Roller. I accidently hit the back button and Roller kicked me back to the login page. When I clicked the forward button - Roller/IE didn't return me to my post -> hence I lost everything. Sometimes I hate webapps. Time to finish the rest of this post in an HTML Editor where I can hit Ctrl+S all the time.

The first session I attended this morning was Dave Thomas's Herding Racehorses and Racing Sheep. Thanks to Carl Fyffe for recommending it. The first part of it was about how developers have different levels of expertise and how they learn. Novices are productive and learn well if they have a specific set of instructions. This is in contrast to Experts - who are more efficient if they're given freedom and lack of rules. Most folks in the room considered themselves Experts. Dave estimated the room's average was 4.5. From there, we proceeded to talk about the fact that most developers think they're smarter than they really are. Lastly, Dave touched on Personal Knowledge Investment and how we all need to take time to invest in our own knowledge. It's your #1 defense against offshoring. You know its working if you still have a job at the end of the year. You know it's really working if you're doing what you want to be doing, programming in your preferred platform. This talked rocked and I highly recommend it.

After that I attended Rick Hightower's TDD for the Web Tier. It was a good talk and I learned about jWebUnit. This tool is similar to HttpUnit, but it simplifies the API. It has the same functionality as Canoo's WebTest - allowing to easily test interactions on a web page. It looks like a great way to test your view layer, though I prefer Canoo. The main reason is because Canoo Tests are a bit simpler to write - especially if your QA folks are writing them. I had some success with this at Comcast - where our QA guy actually wrote quite a bit of XML to test our webapp. Rick also covered Cactus fairly extensively (with examples) and a I learned some things about Cactus I didn't know. Cactus's beginXXX is for setting up client parameters, testXXX is for executing and testing server-side code and endXXX is for testing the client side response (i.e. an HTML page). Rick definitely has a lot of experience with test-driven development and has motivated me to learn to use my IDE more for testing. It's simply faster and therefore will make me a more efficient developer. Rick was saying that he uses AppFuse with MyEclipse all the time. He says he hardly ever has to restart Tomcat and he can easily run XDoclet on a single file. The update for Eclipse 3.0 M9 is due out in a week - I might have to make an effort to get AppFuse to be MyEclipse-friendly then.

Julie and Abbie showed up for lunch and Abbie got to run around and wink at all the boys. It was cool being able to introduce them to all my "Java buddies."

After lunch, there was an Expert Panel Discussion where we talked about all kinds of topics: Hibernate, Personal Knowledge Investment, Tools/IDEs and of course, .NET. From there, I attended Rick's talk on AppFuse. It was great to hear Rick's perspective of AppFuse. When I talk about AppFuse, I tend to talk a lot about the reasons I created it and how it came to be. Then I talk about the technologies it uses. Rick talks more about his experience with it and how you develop applications with it. He had a lot of code to show and the talk went really well. Then again, I'm biased. I've never heard Rick speak before this weekend, and I have to say - he's a lot better than I expected. He has a lot of humor and experience in his talks and was quite enjoyable to listen to. I hope to work with him someday, that'd be a good time. If anyone is learning more about AppFuse, and you're local - I'll be talking about it at the Denver JUG and Boulder JUG next month. I also plan on releasing AppFuse 1.5 and AppFuse Light this week.

For the last session of the day, I attended Rod Cope's Easy Enterprise Applications with JBoss, Hibernate, AspectJ, and XDoclet. Rod is going to be my new boss in a week, so it was definitely cool to hang out with him this weekend. Rod is a good speaker, but his presentation wasn't teaching me much, so I left. He was talking about how extracting 75 lines of Hibernate code (many try/catches, lots of transaction/rollback code) into aspects can save you a lot of time. I don't use aspects, I use Spring - and my Hibernate methods are typically 1-3 lines of code. I'm sure if I'd stayed, I could've learned more about AspectJ - but frankly, it doesn't interest me that much.

I snuck out of the room and went to the 2nd half of Spring in Action by Craig Walls. I met Craig for the first time at this conference and I thoroughly enjoyed talking with him. He seems to be a very easy going guy and he definitely knows a lot about Spring. I learned some different ways of writing controllers - extending the Abstract Controllers, rather than using the Controller interface and SimpleFormController. It was interesting to see how flexible Spring is and how his way takes about the same amount of code as the way I'm doing it. It was a good talk and I look forward to downloading his sample app. Hopefully he'll post a link soon on his blog. I'd be happy to host a demo.

What a great conference. I left with a headache today because my brain was so full.

Posted in Java at May 23 2004, 08:59:31 PM MDT Add a Comment

[NFJS Denver] Howard Lewis Ship and Creating Tapestry Components

Tapestry - "we try to make the simplest approach the correct approach." I haven't been blogging much of this session b/c I'm just sitting back and soaking it up. It's a good session and Howard is a good speaker. I'm learning a lot about Tapestry and it's philosophy about web development. I especially like the line-precise error reporting - it's something that all frameworks need to do better.

Tapestry looks very cool. You basically write an abstract Java class that has abstract methods for properties you define in an XML file. Tapestry them implements this class and its abstract methods. The class that Howard wrote to handle a login form is very simple - it's only about 7 lines long - and 4 of those are abstract methods! The HTML form is cool too - not much of the HTML has changed since it was bare-bones HTML. He's merely added some a few "jcwid" and "listener" attributes to some of the elements.

Tapestry is a large system of subsystems, all implemented behind interfaces. It ships with its default behavior (i.e. page/template pooling), but you can (supposedly) easily change this behavior or implement custom classes. Internationalization is a first-class citizen in Tapestry - no surprise here since it is in most MVC frameworks. Tapestry 3.1 will embed Hivemind at its core and will provide much easier integration with tools like Hibernate and Spring.

Tapestry's "Validation Subsystem" looks very rich - providing both client side and server side validation. It uses Field decorations to highlight both labels and fields when validation fails. By default, it promotes using CSS to change colors, backgrounds, etc. There are a couple of Helper Beans for validation: the Validation Delegate and the Validator. It's pretty neat that you can bind a label to a field in XML. Since HTML already allows binding <label>'s to form elements - you'd think that Tapestry could harness this by parsing the template. I suppose it's just easier to require the XML binding - then you don't have to worry about the user writing invalid HTML.

Howard is trying something new in this presentation - real-time coding. I use this in my presentations and it works pretty good. He's having some serious issues b/c he can't mirror his laptop's monitor with the projector. This obviously makes it difficult to code since the slide show is his monitor. I try to use pre-canned code (i.e. IDEA Live Templates) so there's less chance of fat fingering things. I also use a Mac - on which mirroring works great.

The "Page" object is pretty cool in that it contains a bunch of lifecyle methods you can override. Most frameworks don't have lifecycle methods. I guess Spring's SimpleFormController does with onSubmit, onBind. Lifecycle methods are a Good Thing IMO. The formSubmit() method is always called, regardless of validation errors. Therefore, you have to get the IValidationDelegate and check if it has errors before continuing. I wonder what the logic behind this is? Most frameworks seem to support automagical validation - with no further work required by the programmer. I guess it's kinda cool b/c you can continue with validation errors if you want to. Choice is always a good thing.

Howard just showed us a client-side validation example. The wicked cool thing is that the client-side script is configured in a .page file rather than in the HTML template. Most frameworks I've seen (that support client-side validation) require you put something into your template. This was a good talk, I'm definitely interested in Tapestry and excited to start learning it in the next couple of months.

Posted in Java at May 22 2004, 06:18:47 PM MDT 1 Comment

[NFJS Denver] Ramnivas Ladded and Aspect Oriented Programming

For the 2nd session of the day, I've decided to attend the session on AOP. My choices were Converting XML (Ben Galbraith), JSF (David Geary), What's new in EJB 2.1 (Monson-Haefel) and Runtime Code Generation (Glenn Vanderburg). I asked David about his JSF presentation and he said it was "boring" so I decided to skip it. This session, in the first 10 minutes, is pretty boring too. I might have to duck out of this and attend another session - but none of the other sessions really interest me. This one started this morning, and it seems to be a continuation of this morning session. It's mostly on AspectJ and he's doing the good ol' logging example. I don't really have an interest in using AspectJ since Spring's AOP is more than adequate for my needs. Oh well, I guess I'll stick around and relax.

Ramnivas is using Eclipse to compile his aspects, and shows us how if he uses "javac" to compile everything, no aspects are added. I'm guessing that there's some sort of plugin for Eclipse that allows for easy compiling of aspects. A new feature in AspectJ 1.2 is the ability to set an ASPECTPATH and then use "aj" rather than "java" to run code. This achieves the same effect as compiling the aspects in Eclipse. The "aj" script appears to just set the system classloader.

Now Ramnivas is showing us how you can use an aspect to define pointcuts on internal appserver classes. His example involves WebLogic, the J2EE Petstore and logging any EJB method calls. To use this, he has to start WebLogic with a custom script, that has a custom classloader defined. For some reason, we're now talking about log.debug() vs. if (log.isDebugEnabled()) { log.debug() }. Ramnivas thinks that most folks don't wrap their debug statements (the proper way). Who doesn't know about this?! I'd like to think that most developers are writing the 3-line version vs. the 1-line version.

An interesting quote: "So many things to show you - 3 hours is not enough." Maybe if we didn't have to wait 2 minutes for WebLogic to start each time, 3 hours would be plenty. ;-) Ramnivas just added logging to all the classes in the blueprints packages and then reloaded the page. There looks to be several thousand method calls occurring behind the scenes for a simple page. Of course, there's lots of tag libraries - but still - PetStore is a ridiculously complex application. Why did some ever impose this crap upon us as "best practices" for Java. IMO, best practices should be based around simplicity, maintainability, testability and performance. Does the PetStore even ship with unit tests? I'll bet it doesn't...

Now we're watching a pretty cool demo where Ramnivas is using aspects to enforce coding policies. In this example, he's using aspects to enforce rules in EJBs (i.e. no static variables, swing or threads). It interesting in that the aspects actually prevent compilation and display errors defined in the aspect. It's a neat idea, but I'm suspicious in that a lot of this AspectJ stuff seems to be Eclipse-specific. What I mean by this is that Eclipse seems to be required for compilation. Is it easy to aspect-enhance your classes using Ant? I would hope so.

Ramnivas seems to be quite the AspectJ expert. He mentioned that he wrote a book for Manning and has mentioned a couple of his contributions to AspectJ in this presentation. I admire authors that write and contribute to projects at the same time. It's often an indicator that the person knows what the hell they're talking about.

This afternoon's first session choices are as follows: JSF Advanced Topics (Geary), Intro to J2EE Web Services (Monson-Haefel), JSR166 (Glenn Vanderburg), Rhythm (Brian Boelsterli) and GUI Development (Ben Galbraith). Web Services and Rhythm are 3 hour presentations, so I might stay away from those - that's just too long for me. Now that I'm sitting in the 2nd half of a 3 hour presentation - it seems that these sessions are best attended in the first half. It's almost as if the presenter is trying to find things to talk about in the second half. Or maybe AOP is just a boring-ass topic. ;-)

I'd like to go to Brian's talk on Rhythm, since he's a good friend and mentor of mine. But then again, I learned Rhythm from him - and use it daily - so I don't know that I'd get anything out of it. Advanced JSF looks good, maybe I'll go to that one. For the 2nd session this afternoon, I'll probably attend Howard's Creating Powerful Web Forms with Tapestry. Maybe I should stick with JSF and Tapestry and make it a web-intensive afternoon. Both presentations are even in the same room!

Posted in Java at May 22 2004, 12:29:31 PM MDT 4 Comments

[ANN] AppFuse 1.5 Beta Released!

This release has lots of modifications that I've been meaning to make for quite some time. Specifically (1) removing the dependency on j2ee.jar and (2) removing Struts from the services layer. I also made improvements to Spring and its context file loading so you should be able to run unit tests from your IDE.

Other notables include full i18n support (with translations in Dutch, Brazilian and Chinese), improved setup-tomcat target (no additional JARs needed now), and an option to use Spring's MVC framework instead of Struts. If you'd like, you can read more about my conversion from Struts to Spring. Enjoy!

BTW, this upload was a little hefty for java.net at 12.5 MB - because of the iBATIS and Spring MVC option. My browsers (Mozilla and IE) kept timing out and I was getting a "Not enough space" error. To fix this, I had to increase the timeout on Mozilla. Here's the steps I went through:

  • Type "about:config" in the address bar.
  • Type "timeout" in the filter field and hit Enter.
  • Change "network.http.keep-alive.timeout" to 600 (10 minutes). The default is 300.

Posted in Java at May 04 2004, 03:57:41 PM MDT 10 Comments

Weather.com: WebSphere to Tomcat and Oracle to MySQL

At my current client we're going to migrate our application from Tomcat to WebSphere 5 in May. I'm dreading the move and really don't see the point, but alas - the client is always right. However, since my client reads this website, I thought maybe they'd be interested to see that Weather.com recently migrated from WebSphere to Tomcat.

"It was hard to run WebSphere and an IDE [integrated development environment] because of all the resources WebSphere took," recalls Jeff Cunningham, who leads the Internet application development team at Weather.com. "You had to run an instance of DB2 on your machine because WebSphere stored its configurations in DB2, so you had to have all that overhead. It was just really slow. I just started using Tomcat for development because it was so much faster."

The article goes on to say that they evaluated other app servers as well, but chose Tomcat because of the team's preference. They also discovered that Tomcat served up pages significantly faster than WebSphere.

Weather.com is also working on swapping out its Oracle database for the open-source MySQL.
...
"Now when I talk to senior management about moving from Oracle to MySQL they don't ask me, 'Are you sure?'" he says. "They ask me, 'When?'"

It's a great time to be an Open Source Consultant. ;-)

Posted in Java at Apr 29 2004, 11:05:57 AM MDT 16 Comments