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 "appfuse". 771 entries found.

You can also try this same search on Google.

Sending POJOs to the UI instead of ActionForms

I'm starting to think that my Struts-based apps could be simplified if I didn't convert POJOs to Action Forms when retrieving them from the database. By this, I mean to say that I'd like to retrieve and display POJOs on the UI, and then capture their information (as Action Forms) when saving the form. The reason I want to do this is because of Hibernate's Lazy Loading feature and formatting Dates. Basically, Hibernate allows you to load children of an object lazily (i.e. resumes of a User), when the getResumes() method is called. I've created [a page|POJOsToForms] on my wiki to explain further and continue this discussion. Of course, you can always leave comments here if you'd rather - they cross-reference each other. The [RollingWiki|http://www.rollerweblogger.org/wiki/Wiki.jsp?page=RollerWikiPlugin] rocks!

Posted in Java at Jun 19 2003, 01:52:23 PM MDT 3 Comments

[ANNOUNCE] XDoclet 1.2 Beta 3 Released!

From the XDoclet News page:

This is the last milestone towards our next big release. Over 130 bugs are fixed. For a detailed change log, please refer to XDoclet 1.2 Beta 3 Change Log.

Cool! Downloading now...

15 minutes later: I suspected this as soon as I saw the download. You'll need to download XJavaDoc 1.0 along with this release. I installed this release (+ xjavadoc) in my appfuse-based project at Comcast, and everything just worked. I dig it.

Posted in Java at Jun 13 2003, 07:28:36 AM MDT 6 Comments

[ANNOUNCE] AppFuse 0.8 Released!

Not much new in this sucker ~ the main reason for this release is to demonstrate self-registration (and auto-login) in a CMA (Container Managed Authentication) environment. I also upgraded most of the dependent packages (i.e. Struts, Hibernate) to their latest releases, and added a binary release as an optional download. [More, Download, Release Notes]

For those of you that might not know, AppFuse is a project I created in order to help me ramp up web development projects faster. I've found it takes a long time to start a project and get the directory structure, build files (incl. ant tasks for junit/cactus/canoo) and all that jazz in place - so I created appfuse. I created it for myself, I'm using it currently at Comcast, and it works great. You might say that "Maven already does this" - and you're right, but I wanted to do it the Erik Hatcher way (after reading his book). I may make an attempt to mavenize the project in the future, but I currently don't see the need.

Posted in Java at Jun 12 2003, 01:08:14 PM MDT 2 Comments

SourceForge's Release Process Sucks

Dave asked earlier today if we should move Roller to be hosted at java.net rather than sourceforge.net. I responded with "SourceForge works for me" and didn't see any reason for a move. But after dealing with trying to release 0.8 of appfuse all night, I'm ready for something better. The release process sucks. I have to FTP files to upload.sourceforge.net (anonymously) and then, when the files are completed, selected them as files to release through the web UI.

The problem is that I've been trying to upload for the last 24 hours, and it keeps failing at different points in the upload process. So, here's the worst part - you can't "delete" from the FTP site - you have to release the file, and then delete it. What a pain in the ass - I've done this about 10 times now. My XP machine seems to be the source of my ftp-connection-dropping problem, so I've moved over to my Linux box. So now I'm ready to upload all my files, and look what SF gives me:

We're Sorry.
The SourceForge.net Website is currently down for maintenance.
We will be back shortly

Fuckers.

Posted in Java at Jun 11 2003, 11:03:26 PM MDT 9 Comments

RE: Dumbing-down AOP

Merrick Schincariol explains Aspect Oriented Programming (AOP) and attempts to dumb-it-down to my level. This is not an easy task, but he does it well. [Blogging Roller]

This is a great article - thanks Merrick. This is what I've always thought it was, but I was never quite sure. If all I need to do (to implement AOP) is add the aspect class to my classpath - this seems super simple. This doesn't make me want to refactor any existing projects to use AOP, but it does make me want to use it on my next project. Then again, appfuse and moblogger have a pretty small codebase at this point - maybe now is the time for refactoring?

Posted in Java at Jun 05 2003, 02:08:25 PM MDT Add a Comment

Hibernate's Query by Criteria (What I'd like to see)

After trying to work with Hibernate's new Query by Criteria feature in version 2.0, I've come up with a page detailing what I'd like to see. Basically, this page results from the API not working for my needs - and since it's still in its infancy, hopefully this document will help shape it future. I'll add a comments link on the document (to this post) for any feedback or comments.

Posted in Java at May 05 2003, 03:56:12 PM MDT 2 Comments

Struts + OJB Example at SourceForge

James Mitchell has contributed a modified version of Chuck Cavaness' Beer4All Shopping cart demo to the Struts' SourceForge Project. If you're looking for an example of using OJB with Struts, this is probably your best bet. From the struts-user mailing list:

Ok, just got off the phone with Chuck.  He said he doesn't mind, so here is
the version that I have:

  http://sourceforge.net/projects/struts/

Note - This is a simple webapp and not all the features have been
implemented.  I will continue to improve the codebase over the next few
months, but this is a "use at your own risk" sample application.

To deploy "as is", you will need to configure your database connection
(repository.xml) and create a database (or change the config) called 'ojb'
with a user 'ojb' and password 'ojb'.  Next execute the sql.sql against the
new database to create the necessary data and internal tables (OJB).

Use you best judgment to deploy on your container.  I can help if using
Tomcat, Resin, or JBoss/Tomcat.  Personally, I use JBoss/Tomcat so the
unzipped/exploded war should deploy if you extract it to
server/default/deploy.

Have fun!!!

--
James Mitchell
Software Developer/Struts Evangelist
http://www.open-tools.org

BTW, there are quite a few Hibernate example apps (appfuse, hibernate and struts-resume) at the Struts SF project as well.

Posted in Java at Apr 23 2003, 10:22:43 AM MDT Add a Comment

[ANNOUNCE] Struts Resume and AppFuse 0.7 Released!

There's nothing like tootin' your own horn. What's even worse is checking all this stuff into CVS and then uploading it on a dial-up connection. Anyway, here it is - the latest and greatest version of struts-resume and (finally) a version of appfuse. AppFuse is basically struts-resume w/o any resume stuff. There's not much new that's visible for struts-resume, the only real things are User Administration (no add, just list/delete/assign roles) and a smart-menu that stays expanded based on your previous selections. Here is a full list of what's new in 0.7 (both apps):

Features in 0.7
===============
- Upgraded to Hibernate 2.0 Beta 4.
- Upgraded to Struts 1.1 nightly build (2003.03.26) to fix Validator issue.
(http://tinyurl.com/87xa)
- Upgraded DBUnit to 1.6-dev to fix batchStatement error in Ant task.
(http://tinyurl.com/8ei2)
- Upgraded Canoo WebTest from build265 to build276.
- Upgraded XDoclet to nightly build (2003.03.28) for Hibernate 2.0
compatibility. Apache module is still customized for POJO -> ActionForms.
- Upgraded Display Tag Library to version 0.8.5.
- Renamed "test-canoo" task to "test-jsp".
- Added "db-load" as a dependency to running unit tests to get a fresh
database each time.
- In LoginServlet.java and BreadCrumbFilter.java, pre-pended contextPath
to authURL (i.e. "j_security_check") to get absolute path.
- Added User Administrator to list/edit/delete users. This feature
includes using indexedProperties on a form - still using XDoclet, but using
a subclass of UserForm, called UserFormEx to hold the getter/setters for
the indexedProperties.
- Wrote more Cactus and Canoo Tests to verify Resume editing and User
Administration functioned properly.
- Added icons to success and error messages template (common/messages.jsp).
- Implemented role-based Permissions on menu by adding
permissions="rolesAdapter" to in menu.jsp.

I've put a line through the renaming of "test-canoo" to "test-jsp" because it's in the README (part of the download) and I don't want to re-upload just because of one stinkin' line.

Tomorrow, I'm actually presenting for the Struts Training class, so I won't be able to give a full review. One of the gents who wrote Stxx will be presenting first at 8:30 MST, and then I'm up for my preso. I'm going to do some short and sweet stuff on Remember Me and XDoclet with Struts. If you're interested, you can do the labs I put together. I'll post the slides when I'm done presenting.

Posted in Java at Apr 04 2003, 11:56:25 PM MST 3 Comments

Bug in Ant 1.5.2?

I found out the hard way that there might be a bug in Ant 1.5.2. I'm running the following task as part of appfuse - and it generates a appfuse.zip file, and it's the correct size, but there's nothing in it. I reverted back to Ant 1.5.1 and everything worked fine.

<zip zipfile="${archive.target}.zip">
    <zipfileset prefix="${webapp.name}" dir="${basedir}">
        <patternset id="srcfiles">
            <include name="**"/>           
            <exclude name="build.properties"/>
            <exclude name="database.properties"/>    
            <exclude name="*.log"/>
            <exclude name="*/**.java.txt"/>
            <exclude name="${dist.dir}/**"/>
            <exclude name="${build.dir}/**"/>
        </patternset>
    </zipfileset>
</zip>

This particular problem happened with Cygwin on Windows 2000 using JDK 1.4.1_01.

Posted in Java at Apr 02 2003, 04:59:15 PM MST Add a Comment

Struts Training: Week 4

I missed last week (Week 4, PosgreSQL), but I'm back this week - ready to report. I'm presenting next week on "remember-me" and XDoclet, so I'm working frantically trying to get AppFuse up-to-snuff to use as a lab template. Hopefully, I'll have that done by tomorrow night, as well as the lab and presentation.

Today's presentation is from James Turner on Indexed Properties and Validation. Awesome - I need this in my day job's project starting next week! Good timing, eh?!

So how do you use indexed properties in Forms? Two ways: Simple arrays of strings and arrays of beans (recommended). Here's a good tip - if you're using DynaActionForms, you can access a property in JSTL using {form.map.propertyName}. I did not know that - thanks James! Lots of good stuff in this one (too much to write down), I hope this preso is available online and a demo app goes with it. To validate simple array of strings, add indexedlistProperty to your <field> in validation.xml (you must also specify the property). If you're validating beans, use property="propertyName" and indexedListProperty="beanName".

However, do you really want to require all fields of your child beans? No, probably not. You (most likely), just want to require fields if some fields are populated. Struts provides us with the requiredif validator. No JavaScript validation exists for requiredif at this time. Hmmm, I wonder if XDoclet can generate indexed validation rules. Here's an example of how to do this with the current 1.1 RC1 Release.

<form name="myForm">
  <field property="lastName" indexedListProperty="person" 
    depends="">
    <arg0 key="label.lastName"/>
  </field>
  <field property="firstName" indexedListProperty="person" 
    depends="requiredif">
    <arg0 key="label.firstName"/>
    <var>
      <var-name>field[0]</var-name>
      <var-value>lastName</var-value>
    </var>
    <var>
      <var-name>fieldIndexed[0]</var-name>
      <var-value>true</var-value>
    </var>
    <var>
      <var-name>fieldTest[0]</var-name>
      <var-value>NOTNULL</var-value>
    </var>
  </field>
  ...
</form>

Note that the [0] is NOT an indicator of which indexed property to validate. RequiredIf is powerful but ugly, so James wrote something better. Unfortunately, it's too late for 1.1 and will be added for the 1.2 release. Sounds like most folks that use the Validator will be using a nightly build for awhile ;-). The new validator is called "validwhen," and looks as follows:

<field property="firstName"
  indexedListProperty="dependents"
  depends="validwhen">
  <arg0 key="dependentListForm.firstName.label"/>
  <var>
    <var-name>test</var-name>
    <var-value>((dependents[].lastName == null) or
                (dependents[].firstName != null))
    </var-value>
  </var>
</field>

Fricken sweet! James is sending me the code - cool! This will make my life soooooo much easier next week. Status of Struts 1.1 from James: they're working on getting the commons packages to a release state. Slides from today will be available at strutskickstart.com later this afternoon.

Posted in Java at Mar 29 2003, 09:32:28 AM MST 4 Comments