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,857 entries found.

You can also try this same search on Google.

J3Unit

J3Unit Over the weekend, I learned about J3Unit - a new object oriented JavaScript testing framework.

J3Unit is an object-oriented unit testing framework for JavaScript. J3Unit runs JavaScript tests directly in the web browser and can be automated using JUnit and Jetty. J3Unit builds on previous work by JSUnit and Script.aculo.us to provide a better way to automate JavaScript unit tests. Object-oriented JavaScript unit tests are written using the Script.aculo.us Test.Unit.Runner object, which is in turn built upon the prototype JavaScript library.

J3Unit has 3 modes of operation: Static Mode, Local Browser Mode, and Remote Browser Mode

To me, this looks similar to Selenium. I'd definitely like to explore using this package or Selenium in AppFuse.

Currently, AppFuse uses Canoo WebTest, which is based on HtmlUnit. The current version of HtmlUnit doesn't support Prototype, or any libraries that depend on it. The good news is "This will be quite simple to fix".

Posted in Java at Jan 09 2006, 05:41:42 AM MST 2 Comments

AppFuse and Equinox get some FishEye lovin'

In addition to many other java.net projects, the Cenqua guys have been kind enough to add FishEye to both AppFuse and Equinox's CVS repositories. You can now view FishEye goodies using the URLs below:

Later today, I'll see if I can hack java.net's browse CVS page to show FishEye instead of java.net. Thanks Cenqua!

Update: The hack is complete. IE gives a security warning b/c FishEye is only available at http (not https), but it works fine in Firefox. If you'd like to put FishEye into an embedded iframe in your java.net project, here's the JavaScript I used to do it. View source on any of AppFuse's java.net pages for more information. The JavaScript goes in your www/project_tools.html page.

function fisheye() {
    if (document.getElementById("browsesource") != null) {
        var fisheyeDiv = document.createElement("div");
        fisheyeDiv.className="app";
        var header = document.createElement("div");
        header.className="h2";
        header.innerHTML = "<h2>Browse source code with FishEye</h2>";
        fisheyeDiv.appendChild(header);
        var fisheye = document.createElement("iframe");
        fisheye.setAttribute("src", "http://fisheye5.cenqua.com/viewrep/appfuse");
        fisheye.setAttribute("border", "0");
        fisheye.style.width="99%";
        fisheye.style.height="700px";
        fisheye.style.border="0";
        fisheye.style.marginTop="10px";
        fisheye.style.marginLeft="5px";
        fisheyeDiv.appendChild(fisheye);
        document.getElementById("dirlist").insertBefore(fisheyeDiv, document.getElementById("browsesource"));
    }
}

Related: Fixing your java.net project's homepage.

Posted in Java at Jan 07 2006, 09:28:06 AM MST Add a Comment

Improving the Maven Repository

Brett Porter provides a few steps on how you can help improve the Maven repository. My advice? Convert your project to use Maven 2 as an experiment. That's what I did with Equinox 1.5. In the process I found 28 issues with POMs at ibiblio. If you're using Ant, you can use Maven 2's Ant Tasks to download your dependencies w/o going "whole hog" and converting everything to M2.

Yes, this is a somewhat twisted attempt to convince you to endure the same pain I went through. The best and worst part of Maven 2 is its transitive dependencies. If they can all be updated to be accurate by the project owner's - the problem will be solved. But how do you convince project owner's to do that? I wonder how good Ivy's metadata is?

Why is this whole debate important to you? Because Ant 1.7 is (supposedly) going to have a dependency download mechanism. It's likely you'll use it because it is a nice convenience. Steve Loughran is one of Ant's primary developers and he has this to say:

I do find the m2 tasks and repository hard to work with, and am debating a quick investigation of Ivy. Maybe focusing on one thing -library management- has let them do a better job than trying to be all of a next generation build tool.

The "best dependency downloading tool" debate is heating up. I wonder which one will win Ant Developers over? If it's M2, I can see the Apache folks smiling. However, if it's Ivy - at least we'll know it's not a political decision. It's because it simply does a better job. May the best tool win.

NOTE: I've yet to try Ivy, and don't know if I will. Especially now that I've fixed all the POMs I use at ibiblio.

Posted in Java at Jan 05 2006, 08:12:43 PM MST 9 Comments

Vongo

It's not everyday that the project you've been working on gets announced all over the news (even locally!).

Vongo

It's been a fun project to work on - with some pretty cool technology powering it all.

Posted in Java at Jan 03 2006, 08:48:26 AM MST 27 Comments

Welcome to 2006

Happy New Year everyone! 2006 should be a fun year. My goals? Happiness, Health - both driven from skiing, riding, playing with the kids and enjoying my job. I still can't believe they pay us to do this stuff. ;-)

Here's this site's stats for 2005:

Usage summary for www.raibledesigns.com

Summary by Month
Month Daily Avg Monthly Totals
Hits Files Pages Visits Sites KBytes Visits Pages Files Hits
Dec 2005 119264 74610 55759 15309 79374 31394669 459273 1672794 2238313 3577920
Nov 2005 129880 84543 49704 16179 83835 32018723 485388 1491145 2536299 3896414
Oct 2005 131901 82994 40667 15612 83189 31356652 484000 1260688 2572831 4088935
Sep 2005 172824 76604 39068 15540 78205 28408092 466208 1172056 2298141 5184735
Aug 2005 103628 70134 35565 13409 78966 28851892 415689 1102523 2174160 3212489
Jul 2005 99795 68139 40701 12741 76861 65666780 394998 1261744 2112311 3093646
Jun 2005 109682 74020 34614 12625 81955 29010554 378757 1038422 2220610 3290466
May 2005 109034 79885 38253 12285 105956 31142486 380848 1185869 2476438 3380075
Apr 2005 107043 70599 32273 12408 65138 21990095 372247 968207 2117997 3211297
Mar 2005 94572 71213 30085 11532 66829 22698368 357509 932640 2207624 2931733
Feb 2005 78524 57674 27428 9649 51844 15375733 270194 767992 1614896 2198686
Jan 2005 82797 58338 29049 10299 55016 18645468 319269 900548 1808480 2566734
Totals 356559512 4784380 13754628 26378100 40633130

Posted in General at Jan 01 2006, 06:00:54 PM MST 3 Comments

2005 - A Year in Review

2005 was quite a year for me. I found my dream job, after contemplating what's next in my career only a few months earlier. I attended TheServerSide Symposium in March and created some great memories with James Goodwill. There's nothing like losing all your money and then winning it all back at 6 in the mornin'.

Other March highlights include:

April was a fun month, and started off with a me heading to work for Microsoft. The joke worked so well it was picked up by news.com. DU repeated as NCAA Champions (again). The MySQL Conference and wine-tasting with Julie (for our 5th anniversary) rounded out the month.

May was a whirlwind month, where I headed to Norway after barely renewing my expired passport on time. My PowerBook died on the way over, but I still had a great time. I was featured on TheServerSide and started planning AppFuse 2.0.

The summer flew by: I got biled by Hani, toured with the "Bomb Squad" at JavaOne, drove through Yellowstone, bought a new bike, learned more about Ruby and Rails at OSCON (and learned how much fun a smackdown can be), and watched Jack turn 1.

Then things got busy: I had a great time at Java in Action, started The Bus Project, and enjoyed the beauty of Keystone with Bender and Snyder at the Colorado Software Summit.

To round out the year, I traveled and attended conferences like I was possessed (New Jersey, NFJS, San Francisco and Florida). Abbie turned 3, Roller 2.0 was released and the WebWork joined Struts after a multi-year rivalry.

Phew, it's been quite a year folks. Here's to 2006 being even better! My goals for the year? Happiness, health and more car bombs with family and friends. ;-)

Posted in Roller at Dec 30 2005, 12:13:25 PM MST 1 Comment

The Plan for AppFuse 1.9

The current plan for AppFuse 1.9 is to cram quite a bit of stuff into a single release. For example, the big "features" I'm planning on implementing are dependency downloading and the ability to use AppFuse as a single appfuse.jar.

However, there's still quite a bit of stuff on the roadmap.

After talking with the mailing list, the following seems like the best plan.

  • Fix remaining bugs in 1.9
  • Release 1.9 (hopefully in January)
  • Start 2.0 M1 with dependency downloading
  • Release 2.0 M1
  • Start 2.0 M2 with easily upgradeable version
  • Release 2.0 M2
  • Freeze feature enhancements and fix bugs
  • Release 2.0

If I can convince Virtuas to let me work on AppFuse in February and March, we might be able to release 2.0 in early April. If not, we probably won't finish it until sometime next summer.

Posted in Java at Dec 30 2005, 08:27:49 AM MST Add a Comment

Improving JSF in AppFuse

I've noticed the number of AppFuse users using JSF starting to pick up lately. This is probably mostly because Sanjiv Jivan and Thomas Gaudin (both committers) have started to use it on their projects. Thomas has been nice enough to write a couple of interesting blog entries on JSF and AppFuse. Click on the links below to read more.

Posted in Java at Dec 29 2005, 05:09:51 PM MST 1 Comment

Use Ant to auto-build your AppFuse project in Eclipse

One of the issues that AppFuse has is it's not that IDE-friendly. When I first started creating AppFuse (December 2002), Eclipse had already been released. However, I only used it as a fancy text editor, and didn't structure AppFuse to be Eclipse-friendly. Most of the unfriendliness is caused by XDoclet, but there's a way to fix that. Rather than using the default "Java Builder" to auto-build your Eclipse project, you can use Ant. Below is a set of instructions that show how to configure Eclipse 3.1 to use Ant as the builder for an AppFuse project.

Step 1: Right-click on your project and go to Properties. Select the Builder menu on the left and click the "New" button.

Builders

Step 2: Select "Ant Build" in the Configuration Type dialog.

Builders

Step 3: In the Properties window, select the appropriate locations for Buildfile and Base Directory (in the Main tab). In the Targets tab, set everything to the default target. Finally, in the Classpath tag set Ant Home to where you have Ant installed.

Builders

Personally, I haven't used this setup to work on an AppFuse project yet, but it seems quite useful. Hat tip to Erik Weibust to showing me how to do this while at The Spring Experience.

Posted in Java at Dec 29 2005, 12:26:20 PM MST 3 Comments

The future of the DisplayTag Library

From the displaytag-devel mailing list:

I am sorry if I am asking a stupid question but is there any activity going on in the project? There are no new releases for almost a year... Neither are there any news on the project page. In our project we have modified the 1.0 version a bit and would like to share these changes with the community.

Fabrizio's response:

See http://displaytag.sourceforge.net now ;)

the website was frozen to the last 1.0 release, also due an extensive refactoring to the build/documentation system (migration to maven 2, splitting of optional modules and examples, ...) but activity on the project never stopped.

1.1 is now near, and I switched the default homepage to the 1.1 documentation. Warning: it's not released yet, but nightly builds are up.

The biggest feature of 1.1 has to be the ability to do external sorting and paging.

If you're looking for Ajax support in the displaytag, look no further than AjaxTags. I haven't been able to get ajax:displayTag working in my projects because I'm using a newer version of Prototype. However, it looks like the next version of AjaxTags supports the latest version of Prototype.

In addition to AjaxTags, you can also use AjaxAnywhere. Here's the code you'll need to do that (after adding AjaxAnywhere to your project):

<aa:zone name="userTable">

<display:table name="users" class="list" requestURI="" id="userList" export="true" 
    excludedParams="*" pagesize="5" sort="list">
    <display:column property="id" sort="true" href="editUser.html"
        paramId="id" paramProperty="id" titleKey="user.id"/>
    <display:column property="firstName" sort="true" titleKey="user.firstName"/>
    <display:column property="lastName" sort="true" titleKey="user.lastName"/>
    <display:column titleKey="user.birthday" sort="true" sortProperty="birthday">
        <fmt:formatDate value="${userList.birthday}" pattern="${datePattern}"/>
    </display:column>
</display:table>

</aa:zone>

<script type="text/javascript">
    ajaxAnywhere.getZonesToReaload = function() { return "userTable" }
    ajaxAnywhere.onAfterResponseProcessing = function() { replaceLinks() }
    function replaceLinks() {
        // replace all the links in <thead> with onclick's that call AjaxAnywhere
        var sortLinks = $('userList').getElementsByTagName('thead')[0]
                                     .getElementsByTagName('a');
        ajaxifyLinks(sortLinks);
        if (document.getElementsByClassName('pagelinks').length > 0) {
            var pagelinks = document.getElementsByClassName('pagelinks')[0]
                                    .getElementsByTagName('a');
            ajaxifyLinks(pagelinks);
        }
    }
    function ajaxifyLinks(links) {
        for (i=0; i < links.length; i++) {
            links[i].onclick = function() {
                ajaxAnywhere.getAJAX(this.href); 
                return false;
            }
        }
    }
    replaceLinks();
</script>

Libraries used in above code: AjaxAnywhere 1.0.2, DisplayTag 1.0 and Prototype 1.4.0_pre4. You can also see a demo online or download the code.

Posted in Java at Dec 29 2005, 10:46:56 AM MST 26 Comments