Find how to download movies online.

Java Stack

January 3, 2007 | By Joel Dehlin | 24 Comments

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.

Bookmark and Share

John Anderson said...

It looks like Java is primarily used for your web development work?

I’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).

Joel Dehlin said...

We’re looking at lightweight scripting languages. We were whole-hog Java for a while, but are considering other options for lightweight stuff.

Michael Steele said...

I currently live in NY and integrate many custom systems and some times in different languages. It is interesting to hear what the Church uses. Thanks for providing what technology you are currently working with. I always wanted a feedback box. I admire that you have stuck with Java all this time (especially for web development), using multiple languages can become Frankensteinish after a while and as it may appear much of the Java code would be reusable. I think allowing feedback like this, will certainly open a gateway of new and better things. You might get an ear full.

Here are a few questions and suggestions that might help you as a CIO and me as a power user (I thought I would be one of the early ones to provide feedback).

1) What bug tracking system do you use or will use? Will it be available to the public? Who better to hear from than those who use the system? I am running into some usability issues with the LDS website and MLS system, and have you considered combining some or more of the features of both? I think allowing me to enter feedback will prove beneficial. I scratch my head and find myself wonder, why did I have to print two reports on the MLS system just to coordinate the retrieval of home teaching numbers with district leaders? I find myself finding work-arounds from time to time.

2) What integration services do you or will you provide to the public? I really appreciate the RSS feeds, but what about Web Service API’s, Web object layers and XML feeds of collections of data? Portable devices can be another gateway of information integrating into Web Services. More and more devices are easier accessing the internet. You would see more open and closed software built for any web services you may provide.

3) Why not leverage the open source communities and manage some open source projects of your own? Allowing the open source community might prove very beneficial. Some open source projects are patched by programmers, with no reward, but reward to use the software. Consider all the successes of the past such as Linux, Apache, MySQL and PHP, or services built on these.

4) Have you looked at Ruby on Rails or PHP on Trax as opposed to some of Java’s solutions of frame working and can you leverage these? You might want restate lightweight in one of your comments. I heard Java’s framework takes in many different technologies. These I hear are more consolidated. Someone who is versatile in these types of tools could probably get things done quicker than any other tool or language at the present time.

5) Consider my preferences from the many years of development at this current time: a) Linux, Apache, PHP and MySQL for Server Side Development. b) Java for locally run software development (without a server, or with a server server side PHP using web services of some sort).

6) Why isn’t PAF in Java? Now that I have seen the glory of GNU/Linux over Windows and Mac for many years and computers are now catching up with speed required of Java. Is there a PAF equivalent now running in the Web now?

I haven’t seen a place to put feedback until now (bottled up for some time). Thanks for listening. Feel free to just email me, if you are not comfortable replying to all these issues on the Internet.

jrj said...

Given 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?

I 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! : )

Stuart Moffatt said...

Here, here! for publishing your favorite tools.

Would 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.

Benjamin Hofmann said...

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?

Thanks.

Bryan Hansen said...

Hey Stuart,

I don’t think Joel minds me posting this here. We have implemented JBoss Rules and JBPM in a few different projects here (as well as other tools). The concept behind our Stack is a 90/10 rule of thumb. We want to keep development as lightweight as possible for applications and keep them focused on delivering business functionality to the customer.

One significant thing that I will point out and probably get flamed on is that we have recently moved to Java 5. (This isn’t the part that you will chew me up on) Java 5 as you may know added the support for Generics, Enums, and Annotations among other things. This is a huge development gain for us, specifically annotations. I have done some, albeit not multiple projects, with Ruby and was amazed that with JPA, Spring, and the components (JSF) that we have built and bought I have been able to achieve near Ruby development speed (the order of magnitude difference is definitely not there anyway). Model generation and security using annotations, especially with AOP, removed steps that were more along the lines of traditional development. The bigger aspect of the ability to deliver projects for us is through configuration management.

Anybody who has done enterprise development can tell you that writing code is only half the battle, integrating it into your infrastructure can be just as difficult. Using Maven 2, CruiseControl and other continuous integration tools, we have gained some incredible levels of productivity.

So you may ask why Configuration Management (CM) is so important to us? In trying to create more stable code and a better all around user experience, we have increased our testing significantly. This includes and is not limited to 4 QA environments, a staging environment, and finally production. Whether or not these envs are clustered or in a DMZ is another issue. No language takes these issues into account. Speed of development is one issue and often gets focused on as the most important, but CM is equally important in enterprise development.

Bryan-

LDS CTO Guy said...

You didn’t mention what application server you use although I would assume something like WebSphere for production and RedHat JBoss in the dev environment (which is very typical). Interesting you mention playing with javax.persistence considering there are very few JEE 5 certified app servers out there (Sun’s GlassFish, SAP’s Netweaver, and the obscureTmaxSoft’s JEUS). I know you’re a PeopleSoft/Oracle shop so Netweaver is not in…

Not a bad stack for Java I must say… Some would even consider it ‘best of breed’ as far as the Java ecosystem is concerned. I have been working with Java since it was still referred to as “Oak” so I definitely can say it has its pros and cons like any application platform stack. The biggest problem maintaining a stack like this is the fact that the Java ecosystem is very fragmented. For developers who like to hardcore develop, maintain control, and have job security, maintaining a stratified Java stack such as yours is great… Each component outside of the Java EE specification (and even within depending on app server vendor) is maintained independently. The low or no license costs are appetizing but come with a trade-off: supportability and oftentimes, compatibility. Releases can be dependent on specific versions of the Java runtime, etc. and from a software architecture perspective it can be difficult maintaining a portfolio of independent components which make upgrading or enhancing past v.1 becomes unwieldy. From an operational perspective, managing an environment such as this is even more difficult since the majority of operations engineers don’t understand application platforms which lead to devs touching production environments and further increasing risk. Overtime, the complexity threshold rears its head and the outcome is typically higher operational costs (maintenance, version/dependency management, etc.) and slower delivery to market. I assume these symptoms are prevalent at the church (like most IT shops regardless of application platform) which is why you are “considering other options for lightweight stuff”.

In my humble opinion, lightweight or heavyweight, it is the consistency and supportability that matters the most; a platform that allows a high degree of extensibility while maintaining supportability and manageability is preferable as a long-term application platform strategy. This is typically why most Fortune 500 companies use mainstream vendors for a full-stack; for good or evil there is a reason why Microsoft, IBM, and others are alive and well. But even considering IBM WebSphere, Java fragmentation still applies. IBM, BEA, Oracle, SAP, RedHat JBoss, etc. are competitors, yet they all provide application servers certified by the same base Java EE certification. So how do they compete in the marketplace? Differentiation through proprietary extensions to the base Java EE specification which are incompatible with each other which can lock you in. JBoss is great however and doesn’t have the proprietary extensions that the others mentioned do; yet, if you are using JBoss in dev I wouldn’t be surprized if you’ve had port issues to production on non-JBoss app servers (or even disparate JBoss versions). “Write once, run anywhere” anyone?

It will be interesting to see your _________ Stack post in five years. Nonetheless great topic!

Joel Dehlin said...

LDS CTO Guy. Yes, we use Websphere in production. The persistence stuff doesn’t requre JEE 5, ,does it? We try to encourage our developers to use Websphere just to avoid the compat problems, but practically speaking many use JBoss. We have had the opposite problem you suggest, where because some of our devs in the past didn’t understand Websphere, we had infrastructure guys trying to debug code in prod. We’ve significantly ramped up our Websphere expertise in the dev org. While I don’t want devs making changes in prod, I want them to be able to debug. I’m fairly confident that our “stack” in five years will be wholly provided by a vendor (for many of the reasons you suggest). Thanks for your thoughtful comments.

Benjamin. We have a set of architectural guidelines & rules (we call menus) which are driven by the architecture team. Some of the menu items are driven from infrastructure, some from dev and some from office of the cio (which means the architecture team). Anyone can bring up an idea for a new standard anything (we talked about standards for search engines yesterday in our engineering directors’ council), but the decision-maker, while ultimately the CIO, is delegated to the relevant director (or architect) who owns that particular menu.

jrj. We’re looking at how to rev the stake/ward web sites to make it much more useful.

Michael. For incident tracking we use Remedy. We previously used Magic. We’re very close to having a production web feedback tool integrated into lds.org (and other sites) which will drump your feedback directly into Remedy so we can track and deal with the feedback. On your MLS question, see my note to jrj. We’re trying to figure out how to improve the MLS feedback loop.

We are looking at many opportunities to make services available to community developers. The issues surround security. Stay tuned. We definitely want to faciliate open source projects. We may even sponsor some. We have a genteleman whom you will meet at the tech talks whose whole job is figuring out our open source strategy. He is the former CTO at LinSpire. Yes, we’re looking (or will be looking) at things like ROR and PHP. We’re working on family history apps for the web. Come to the tech talks to hear more.

WebDude said...

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.

Greg A. Anderson said...

I 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:

1. 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.

LDS CTO Guy said...

Thank you for your response. Very interesting.

In terms of persistence, Hibernate obviously doesn’t require JEE 5… But if you are going to be using a JEE 5 certified application server, the specification calls out javax.persistence (the Java Persistence API intended to replace now defunct Entity Beans) to take on the workload developers used Hibernate for. To the point of Java fragmentation, puts Oracle (for example) in a strain for making Oracle AS a JEE 5 application server because they have their own, and quite successful, ORM components with TopLink; in order to be ‘certified’ what will become of TopLink (despite it being the reference implementation of the JPA), what does their existing customer base do with all their TopLink assets, and where does Oracle’s competitive advantage/differentiator with TopLink go? Such is the story with other major AS vendors with proprietary extensions and that is why they are VERY slow to adopt a new specification and offer certified app servers. So, while JEE 5 has some great innovations, the JCP took too long to incorporate them into the specification and in the meantime, vendors tied to market economics had to move on… Now that the specification is finally and anti-climactically out, now vendors are slow to adopt thus prolonging customer ability to take advantage of the innovations and improvements while maintaining lower risk with manageability, supportability, and overall consistency. Such can be the life of many companies caught up in the Java ecosystem; the alternative is to roll and maintain your own Java stack but ironically you end up with a lot of the same problems (potentially worse over time) without the vendor throat to choke which is a higher risk proposition. Comparatively, not to pat Microsoft too much on the back, customers caught up in the .NET ecosystem have it much better off (IMHO); not that .NET is perfect by any means, it does have the benefit of seeing where Java has fallen short and improved. Case in point: Annotations (Mr. Hansen) which is a cornerstone of the benefits/improvements in Java have existed as Attributes in .NET since its inception… Not a bad idea that Mr. Gosling decided to add; who’s following who now?

But the question is, would moving to a more dynamic platform such as ROR or PHP be better? Is that going to be any different in terms of the larger ecosystem perspective? Devs don’t care because it’s cool technology upon which to base their careers; they typically don’t think about the larger considerations that you as a CIO have to consider. Time to market is one of the most appealing aspects of dynamic languages and runtimes; but at what trade-off cost? IMHO, this is the problem with Open Source for an organization whose core business is not software. Unless you have some truly competitive advantage to gain by the open and license-free nature of software that only access to the source will get you, think twice. I am not saying Open Source has no place, it certainly does, but it is not a one-size-fits-all T-shirt.

D K Davies said...

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?

Doctor QA said...

I would also like to attend the event on the 18th.

My real question is in regards to the QA effort the chruch is involved with including testing tools (automated and manual), as well as auditing and tracking procedures (SOX, HIPPA, etc) I am involved with many companies from a QA and development company and they seem to always be looking for guidance and direction.

I wanted to get some feedback regarding the processes, what software development methodologies does the church use? Have you heard of Agile and SCRUM would you consider SCRUM? I have used both in recent endeavors and think a great deal of velocity can be gained by the implementation of both.

Question why the 4 QA environments are they identical? (seems excessive), how many QA resources does the church have, do you feel that the phrase “my code is stuck in QA” ever applies?

I love using continuum (Maven) as well I think it provides a great resource for CM does the church practice the ITIL version of ITSM? what other standards is the church involved in CMMI, ISO, etc.

I think this is a great opportunity to gasther best practices from around the church (from members who daily churn a technical wheel that would love to give to the Lord a return of their talents), you may want to give some consideration to the formation of a technical counsel of the best minds in the church on technical steering (there may be a service mission or two in there some where). I know that my life has been ricely blessed with the talents the Lord has given me. I hope to be able to return and report some day.

Lessons learned and best practices can save time and energy

How is project management worked into the process.

Joel Dehlin said...

Doctor – 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.

Davies – Please see the post on tech talks. Thanks.

Jay Breck said...

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?

Bryan Hansen said...

To Doctor QA:

We use Maven 2.0.4 with CruiseControl. We have also purchased 30+ build boxes that are imaged to the same Linux/WebSpere/CruiseControl/Maven configuration. Teams have total control over these boxes and can use them as a sandbox to make changes and test before moving through the various environments. Once a team has worked the kinks out they can then submit a formal request to have the configurations changed in their respective environments.

This has been a pretty good approach for us because a team isn’t stuck waiting for an admin to make changes on their box or if they simply need to restart something they can do it themselves. The way the images are constructed we can also upgrade various pieces of an env and have little downtime.

Our maven configuration has actually become very efficient the last couple of months. We setup maven-proxy to download resources not it our library and can throttle what gets added automatically to our local-centralized maven repo. All in all it has been a very productive configuration for us.

BTW, we have also created a handful of custom maven goals for our projects for things like database ddl zipping and versions. Each CruiseControl build that successfully completes gets its own build number and is mvn site:deploy to a repo where QA can pick it up and use it for testing. All of the maven builds also send their status to a Dashboard Widget that we have created to show the status of each project. We have also setup lava lamps for the status of the build similar to what you can find in the Pragmatic Project Automation book.

Ben Galbraith said...

Jay: 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.

Second 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.

Arthur Smith said...

Hi Joel,

your use of java looks pretty similar to what we settled on after about 8 years of trying different things – the one major difference is the user interface layer, where we’re using Apple’s WebObjects frameworks; mainly because that was one of our intermediate phases where we wrote a lot of user-interface stuff we don’t want to rewrite just now… The easymock/junit piece helps us try to achieve test-first development, though we still haven’t quite figured out how to do that at the user interface level. We also use ‘dbunit’ for database integration tests, allowing us to ensure functionality at a somewhat higher level than the usual unit tests.

I’m wondering if some of your current design was at all guided by Rod Johnson’s approach – he’s behind Spring itself, but in particular we found his book “Expert One-on-One J2EE Development without EJB” to be an excellent guide for this sort of design.

One other piece – we’re using ‘lucene’ as a search engine, which allows very customized development and linking to our database.

Anyway, your java stack sounds like exactly the right approach to me!

Ben Galbraith said...

Arthur: I worked on the team that selected the stack; I also co-authored a book on WebObjects several years ago. One of the best web development platforms ever, though sadly a bit dated now (but not dead — the WO session at WWDC last year was perhaps the best attended of the show).

You ask whether Rod Johnson was in one form or another the inspiration behind our stack. While I haven’t read any of Rod’s books or articles, we certainly use Spring extensively in our stack and we believe in a “light-weight” approach to development, where “light-weight” to us means keeping the domain model free of infrastructure-related encumbrances as much as possible, relying on a container to provide infrastructure services (and other “cross-cutting” concerns) via injection to the objects (rather than obnoxious and unwieldy static-time relationships).

We’re very familiar with Lucene, though I’m not sure if we have actually used it in any of our projects. It’s a very cool product.

Thanks for the kind words, and best wishes to you.

Arthur Smith said...

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 :-)

Before 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…

The E-Business Corner » Blog Archive » Class Notes - 1/22/07 said...

[...] A module can call on other modules for specific methods/functionality. In such a case, if one module breaks, other modules can be negatively affected. Church’s Java Stack: G4JSF – JSF extension which maintains an integration library for the Google Widget Toolkit (GWT). http://www.ldscio.org/2007/01/03/java-stack/ [...]

Kevin said...

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.

Bob Baker said...

I noticed that you mentioned Ruby in some of your posts.

Having 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. ;-)

Required.
Required but not published.
Optional
 

About Joel

Joel Dehlin is the father of seven delightful children and the husband of one patient, wonderful woman. His primary love is being with his kids, but he doubles as the Chief Information Officer for The Church of Jesus Christ of Latter-day Saints. More about Joel...


Follow Joel on Twitter

Currently Reading

View full Library »


Blogroll