We've talked before about the Java Stack we're using at the Church. I thought I'd list the key components we're using. Feedback is welcome.
Spring 2.0 (http://www.springframework.org/): Spring is our lightweight application development framework.
Hibernate 3.2 (http://www.hibernate.org/): Object/Relational Persistence. Hibernate abstracts developers from the database by allowing the developer to create an object to code against while Hibernate takes care of the database stuff underneath. We've recently started using the Java Persistence API (JPA) over Hibernate and it has dramatically improved our ability to quickly pump out database applications.
JSF - RI implementation (https://javaserverfaces.dev.java.net/): From wikipedia: JavaServer Faces (JSF) is a Java-based Web application framework that simplifies the development of user interfaces for Java EE applications.
Facelets (https://facelets.dev.java.net/): I've talked before about our Interaction Designers. They are expert with tools like Photoshop, but they also crank out xhtml and css. Facelets allows us to drop their code into the actual projects so the developers don't have to re-write what the designer has already done.
Ajax4JSF (https://ajax4jsf.dev.java.net/nonav/ajax/ajax-jsf/): JSF extension which has a lot of commonly used Ajax features integrated into JSF components.
G4JSF (https://ajax4jsf.dev.java.net/nonav/ajax/gwt/gwt-cdk.html): JSF extension which maintains an integration library for the Google Widget Toolkit (GWT) and JavaServer Faces (JSF) that wraps Google widgets into JSF components to fully leverage both technologies. We're not using it currently, but we're looking into it for some future projects.
Log4j (http://logging.apache.org/log4j/docs/): A logging framework we use to allow us to use config files to create logging statements in our code that disappear at run-time. It also logs to a variety of device types.
EasyMock (http://www.easymock.org/): We've developed an environment-agnostic testing framework/harness using EasyMock.
Maven 2.0 (http://maven.apache.org/): We love Maven. We used to have one guy managing the build of a couple of projects. One person now manages 30 or so projects and we're adding more projects all the time. We've also pretty dramatically increased our level of reporting.
It looks like Java is primarily used for your web development work?
ReplyDeleteI've like Java for its management features - it seems more strict and structured. For larger projects, this can be a real boon.
However, I've been able to get much more mileage out of other modern scripting languages: Python, PHP, Ruby, etc. The development cycle is orders of magnitude faster, and that's helped lower development costs and deliver a better product (due to rapid prototyping).
We're looking at lightweight scripting languages. We were whole-hog Java for a while, but are considering other options for lightweight stuff.
ReplyDeleteGiven that most of the technologies you list here are web-based (for the most part...I know there are other applications), will we see the day when app like MLS are web-based vs. being fat-client like it is today?
ReplyDeleteI can think of many benefits to this model vs. what is implemented today. Also, this would allow us to retire the Windows desktops for something more secure and cost-effective. Think of funds that would be saved not paying license fees to MS. Might be a temple or 2 there! : )
Here, here! for publishing your favorite tools.
ReplyDeleteWould like to see a demo of your G4JSF musings at the Salt Lake City Tech Talk on the 18th. (Getting excited about the possibility of an e-MLS...)
How about adding:
- business process management with JBoss jBPM http://jboss.com/products/jbpm
- business rules with JBoss Rules http://jboss.com/products/rules
Seems to me that there are probably a ton of workflow-heavy apps (like missionary visas) and policies scattered across your enterprise that could be consolidated with a rule engine, albeit a BPM/BRE suite that is not as mature as commercial vendors.
Enjoying the blog.
This is very interesting. Thanks for letting us know what you use and why. What is your process for inplementing or changing technologies? Who comes up with the ideas, how do you evaluate them, and who makes the decisions?
ReplyDeleteThanks.
Java is a bloated mess that is overkill for most web projects... I would go with Ruby on Rails or PHP on Trax for your web applications hands down.
ReplyDeleteI didn't see anywhere to contact you so I am posting here. Is there anywhere that there is a MLS wishlist, Needed features list? I am really in need of the following:
ReplyDelete1. Be able to export HT/VT visit info like was available in MIS
2. Be able to export all of the user fields, like talents, and the user defined fields.
3. Basically anything that is available in the MLS database should be able to export.
Also, phone numbers and email addresses for idividuals instead of just households. My wife gets calls to my cell phone because there is no place to enter hers or her email address. We each have our own along with our household phone.
This is a very intersting weblog. I'm curious what is the event on the 18th that is referrenced? I'm going to be in Salt Lake that day by chance and would love to attend it possible?
ReplyDeleteDoctor - We use some agile principles, but have our own methodology(ies). We do have daily scrums on most of our projects, but don't follow the scrum methodology per se. We are immature in our CM, but striving to get better. The project management question is too big to answer briefly. We can talk more specifically in another post some time.
ReplyDeleteDavies - Please see the post on tech talks. Thanks.
How do you write your reports? Today I’m trying to integrate Crystal Reports XI with javaserver Faces and it is a little more complicated than advertised. I’m looking for an easier solution. Do you have any suggestions?
ReplyDeleteJay: Hi, I work with Joel and others at the Church. First question first: We use BusinessObjects for our reporting. We looked at the space closely about a year ago; I was less-than-impressed with all the options. I wish I had some sage wisdom to impart about our selection of BusinessObjects, but we were already using the product when we did the analysis, had plenty of licenses, and we decided the minor advantages of various competing products (Cognos, for one) didn't provide a compelling reason to shake up the existing infrastructure.
ReplyDeleteSecond question: What are the specific pain points you're experiencing? Integrating a report with a JSF-generated page? I'm not up to speed on the latest with Crystal and JSF integration, but that will always be harder than redirecting to a Crystal-generated page or artifact, of course. I'd suggest you push for the latter.
Ben - hey - "Professional WebObjects with Java" - I think we even have that book lying around somewhere! That's great that the LDS development group even has some sort-of ex-Mac people :-)
ReplyDeleteBefore we moved to Spring/Hibernate we attempted to use Apple's Enterprise Objects framework for the object/database layer that's integrated with the WebObjects UI - really neat in principle, but we ran into glitch after glitch - particularly performance issues on multiple servers and deadlocks and bottlenecks from a variety of sources; it just didn't suit the pattern of use in our applications. And Apple seemed not interested in fixing even obvious problems. Probably too late now for even open-sourcing the code to do any good...
I'm glad to this new site posted with good comments from folks all around. My current job at ExxonMobil is technology trending and incubating so I have a natural interest in what is happening in industry. I noted that the church is part of the CEB and was delighted to find a forum to find more indepth information as to what types of architectures and technology approaches are used.
ReplyDeleteI noticed that you mentioned Ruby in some of your posts.
ReplyDeleteHaving used Ruby and Ruby Rails on a couple recent projects for clients, I was very impressed with how quickly a 3 layer web app can put together. Add Javascript libraries like Ext, and a little Flash, and you have a powerful combination of ease of development, and an attractive, friendly user interface.
With a an existing, strong commitment to Java, you might find JRuby interesting if you haven't already looked at it. While they are just recently getting a 1.0 version out the door, being able to leverage an existing Java infrastructure while using a quick delivery language and framework is very intriguing.
Having worked on a lot of Java projects over the years, I am excited about it. ;-)