skip to main |
skip to sidebar
- Here's a basic list of software architecture review guidelines. You can definitely also use it as a starting point for your documentation, or to see if your documentation is covering it all.
- Shame on me: forgot to mention last week the VMWare acquisition of SpringSource! Basically the CTO says "the aim of this acquisition is to provide a comprehensive platform as a service (PaaS)". Here's a view on it from a technical level by Adrian Colver (SpringSource), and here's one from Frank Cohen.
- Potential cloud "dangers" described during Black Hat USA 2009.
- And related to the previous one, here's a short summary with interesting results on stress testing the Amazon EC2, Google AppLogic and Microsoft Azure cloud solutions. Bascically, the performance quite varied and response times varied by a factor of 20! And good to know: on Google AppEngine, any task can not last longer than 30 seconds!
- Need to know "everything" about Java Generics? Then this large PDF Java Generics FAQs - Frequently Asked Questions is for you. Think you know everything about Generics? It still might be for you. For example, do you know what this says: "Enum<E extends Enum<E>>"? Or can you follow this one: "Can I use the type parameter of an outer type as part of the bounds of the type parameter of an inner type or a method?"? :)
- Always interesting the Gartner 2009 Hype Cycle. For example, Web 2.0 is already on the way up again, while microblogging (e.g Twitter) is starting its downward trend.
- Code review tools Review Board: "is a powerful web-based code review tool that offers developers an easy way to handle code reviews. It scales well from small projects to large companies and offers a variety of tools to take much of the stress and time out of the code review process." Downloadable.
- Great description on how full-scale Scrum was applied at a JTeam project. It includes answer to the why and what went well and what can be improved. Also shortly the used technologies are described (Spring, Spring WS, Spring MVC, JPA, JExcelApi, Apache Commons for FTP, iText for addresslabels with bar codes, jQuery and Google Maps, Mockito (see this post on why they switched from EasyMock), MockFTPServer and Subethamail Wiser for email integration testing. Again, great that they share this publicly.
- Discussion of the quality assurance/testing challenges to be addressed with a SOA adoption, recommended best practices, and lessons learned.
- More or less a beginner's introduction to the Java Collections framework and algorithms. Sample chapter from "Core Java 2, Volume II - Advanced Features 7th Edition". Uses CircularArrayQueue and LinkedListQueue as examples (how often have you used those two? ;)
- "A discussion on the lifecycle processes of SOA governance, how SOA governance can become more mature, and how a maturity model can be used to support this growth, and the role of the architect in SOA governance, providing some practical guidelines for architects in a maturing SOA environment."
- Two great interviews with Jeff Davis about his "Open Source SOA" book, recently released. The first interview has mainly questions about the book itself. The second interview has quite some questions about stuff not in the book. A free excerpt of 1 chapter of the book is also available for download! The book itself describes many open source SOA products, helping you in selecting the right one and how/where to use it. Btw, CEP = Complex Event Processing. See for more here.
- jQuery 1.3 optimisation & advanced tips including example code on: unbind(), live()/die(), Ajax Queue and Ajax Sync, and Namespaces.
- Summary of implementations of the Builder pattern suggested by Joshua Blog during JavaOne 2007. Note that it is different from the GoF pattern.
Related: interview with Joshua Bloch with many tips and best practices, most referring to Effictive Java 2nd Edition. E.g: generics, enums, annotataions, wildcards, lazy initialisation, strange things about Java.
- Kind of obvious observation (but still worth mentioning :) viewpoint on scalable web architectures and application state: don't store everything in the database, but treat (and "store") application state, cached data, and persistent data differently, using dedicated tools to manage these.
- This week Wicket 1.4 has been released.
- Handy tip for creating testdata for your testclasses via "factory" helper classes, to prevent copying the construction of this testdata again and again.
There's also a database version.
- A comparison of the following opensource search engines: Lucene, Zettair, Indri, Sphinx, and Xapian.
- Best practices for using the Java Native Interface.
- A great "free PDF White Paper from OASIS, OMG, and The Open Group was written to help the SOA community at large to navigate the myriad of overlapping technical products produced by these organizations with specific emphasis on the “A” in SOA; i.e., Architecture. The docment explains and positions architectural standards for SOA reference models and ontologies, reference architectures, maturity models, SOA modeling profiles, and open standards work related to the topic of SOA governance. It also outlines the agreement on core SOA and SOA governance concepts."
- How bad can one GOTO statement really be? ;)

- Pretty basic SOAP monitor (proxy) that allows you to edit SOAP messages before sending them on. Does not support a proxy (yet).
- IBM recently released Milepost GCC (website has styling from 1998 ;), a "compiler which analyses the software and determines which code optimizations will be most effective during compilation using machine learning techniques. Experiments carried out with the compiler achieved an average 18% performance improvement. The compiler is expected to significantly reduce time-to-market of new software, because lengthy manual optimization can now be carried out by the compiler." Related to that is also the Collective Tuning wiki, dedicated to developing self-tuning computing systems.
- ZeroTurnaround "has released the results of their "Java EE Containers - Heaven or Hell" survey. Using responses from 700 respondents, they cover topics such as: containers most often used on large projects, fastest container, redeploy times and annual costs of redeployment in a series of charts and calculations. Both the charts and raw data are made available for your own analysis."
- Looking for petabyte and beyond scale storage? The opensource project Ceph might be an option: it is a distributed network file system designed to provide excellent performance, reliability, and scalability.
- Several basic and advanced JPA implementation patterns can be found here.
- Here's a Getting Started and bunch of Case Studies for Google App Engine with Java: case study 1, case study 2 and case study 3. Main things to take away:
- GAE does not support the whole JEE API nor all regular frameworks.
- Google's database for GAE is non-relational(!) but an object store
- A collection of web 2.0 architecture articles every software/application architect should know about, collected over the years by Dion Hinchcliffe.
- Great extensive article from Martin Fowler on the Scrum daily stand-up meetings, including tips on: benefits and consequences of common practices for daily stand-ups, how to run them effectively, stand-up patterns, what to talk about, when to run them, and the goals, to help beginners and remind experienced practitioners.
- A few weeks ago Google introduced Speed, its open source effort to all make the web faster. Looking at some of the feedback, it seems to currently contain only basic best-practices tips.
- Great long article on the history of Javascript and what hopefully awaits us in the future.
- Misunderstandings of Domain Driven Design described. DDD = "Domain Driven Design is an approach that describes the approach to designing the business layer".
- A Google site dedicated to deploying Google Apps in an enterprise (more than 100 users).
- Which on is the best of these agile methodologies: Scrum or Kanban? Differences and similarities are described. The unsurprising answer: it depends on the situation :) My conclusion: Kanban has less "rules" to follow and thus might be a better suit for experienced agile developers.
- A handy opensource Java library (no i18n yet) for showing real user friendly times, like "in 3 minutes", formats you see on many social sites like Digg and Facebook: PrettyTime.
- And what is your programming personality style? For me it's DoerHighlevelSololiBeral...
- Finally I found a good summary of JavaOne 2009 (PDF) by Frank Cohen.
Two other pretty good summaries can be found here and here. Both are split into days, so some browsing required :)
- This blogpost describes how's the opensource project MySQL fork Drizzle handling code contributions and testing. Some rules for the 100+ contributors are:
- No code will be accepted that works by disabling any existing tests
- It is not allowed to contribute code that causes a compiler warning
- Here's a nice summary of Google Wave's architecture.
- This week I performed a short research on tools being able to generate Java classes from XSDs. All I wanted to use it for is generate my domainmodel classes, nothing more, nothing less. No need for Java <--> XML binding/conversions. Another requirement was that the generated code should not contain any dependencies on that tool. Finally, it has to run under JDK 1.4 too :( Because of that last requirement, this summary was already quite handy. Well, I thought the research would be pretty easy, but it wasn't. Actually, in the end I didn't succeed. None of the below tools generate code that has no tool-specific imports. Do you know of any tool that should do it? Let me (us :) know in the comments! Below a summary of my findings:
- Castor 0.9.x and 1.3: generates classes (no interfaces), with matching Descriptor classes per class that can be used to validate the created object. Imports org.castor.* stuff.
- XMLBeans 2.4.0 generates interfaces and implementing classes. Both import xmlbeans classes.
- JAXB 1.0 generates interfaces, implementing classes and runtime classes (haven't figured out what that is exactly). Imports JAXB classes/interfaces.
- XMLSpy 2006 Enterprise Edition: generates classes. Looks more like you expect, "one class per type". But also needs com.altova.* imports.
- Presentation from the author of POJOs in Action on running Java applications in Amazon's EC2. Shortly describes the opensource project Cloud Tools that can be used to configure Tomcat, MySQL, Apache, JMeter, (cluster) deployment etc. CT also includes AMIs pre-installed with these tools and a Maven and Grails plugin. A couple of sample deployment architectures are shown too. Tiny bit older presentation because it does not mention the AWS Management Console.
- Of course you know YSlow, which helps you analysing your webpage load time, and then gives you tips on how to improve it. Google has just opensourced its similar tool Page Speed, but with tips based upon different insights. It's a Firefox add-on integrated with Firebug.
- A 42 minutes presentation by LinkedIn's engineers on exploring the best available technologies which could be used to build its next generation architecture.
"The new architecture involved using OSGI/Spring DM as the foundation because it had the right properties we were interested in. The code was migrated to a more modular paradigm using binary consumption.
The session will demonstrate how they integrated OSGi, the pros and cons of the changes, the pain points as well as the migration strategy."
- Open up your company's data so others can link to it: the next step in the web, and why you should care. As seen by Tim Berners-Lee.
- Did you know about this cool feature in Java 6 SE: it is possible to make a standalone Java application available as a webservice via the EndPoint class (i.e, via its main() method). Thus: without a container!
- Facebook is now also supporting registration/login via a GMail account and OpenID, see the image below. I especially like that they've implemented it with a lightbox ("popup") so the user doesn't get as much confused anymore, as was the case in the old/standard implementation where the user is completely redirected to Google or the OpenID provider's website. Note that it is actually more "Facebook Connect" like this way! See here another example where OpenID is combined with OAuth to enable a popup login.

- Understanding how the JVM uses native memory on Windows and Linux. The extensive article explains what native memory is, how the Java runtime uses it, what running out of it looks like (so you're not running out of heap space!), and how to debug a native OutOfMemoryError on Windows and Linux. A companion article covers the same topics for AIX systems.
- Quite big news was of course Google's announcement of Google Wave at the Google I/O conference. It has been built with GWT. A good description can be found here. It's open source with plugin-like APIs with many integration possibilities. See the 80 minutes video for the full details. It hopes to become the replacement for email... Servers can be run by anybody. Wonder how Google is thinking of making money with it. Ads, just like in GMail? Maybe they are going to charge you for using their Wave server instances (SAAS version)? An interview with Wave's creators can be found here. And six reasons why Wave could be game-changing.
- Eight generic best practices for scalable high performance systems.
- Are you any of these two tools with almnost the exact same name? SonarJ is a plug-in for Eclipse that helps you validate your code against a software architecture, using static analysis (free for projects up to 500 classes). And now for the confusion: check also Sonar: enables to collect, analyze and report metrics on source code. It leverages the existing ecosystem of quality open source tools (ex. Checkstyle, PMD, Maven, Cobertura …), to offer a fully integrated solution to development environments and continuous integration tools.
- Reference to an AJAX framework analysis/comparison result by Matt Raible (for example known for his framework of frameworks: AppFuse). Compared were Dojo, Ext JS, GWT, and YUI. Check also the comments.
- Beginners level host and Java performance tuning concepts.
- Handy PHP profiler and debugging tool/library. Helps you with logging, memory usage, double includes, page execution time and database activity monitoring.
- Nice presentation on scalable web architectures from Cal Henderson, (ex) Flicker architect. Including horizontal vs vertical, architecture, sessions, load balancing, queuing, relational data, caching, H(ighly) A(vailable) data, federation, serving and storing files, CDN, real-world examples.
- SpringSource has created Roo, a sophisticated round-tripping code generator that should make it quicker and easier to create and evolve Spring applications.
- Funny: how to measure code quality: WTFs/minute :)

Via.
- You as a developer can now go social on IBM's myDeveloperWorks, a social network spun off of developerWorks.
- An introduction on how one could formalize a SOA using WS-CDL, including a few real-world insurance based uses.
- Yahoo has just released a major update for their innovative YQL. "The Yahoo! Query Language lets you query, filter, and join data across any web data source or service on the web. Using our YQL web service, apps run faster with fewer lines of code and a smaller network footprint. YQL uses a SQL-like language because it is a familiar and intuitive method for developers to access data. YQL treats the entire web as a source of table data, enabling developers to select * from Internet." The update adds "Execute", with which "developers now have full control of how the data is fetched into YQL and how it’s presented back to the user. With Open Data Tables, developers can build tables that manipulate, change, and sign the URLs to access almost any protected content, allowing YQL access and combining data across a variety of different authenticated services such as Netflix or Twitter. Developers can call multiple services and data sources within Execute to join and mashup data however they desire, letting Yahoo! do the work rather than their applications. Data can be tweaked and manipulated into an optimal format for applications to consume." Another example of what is possible can be found here. Check also this article for more explanations.
- The big bigger biggest (sad?) news this week was of course Oracle going to buy Sun (here's Oracle's announcement). Rod Johnson (from SpringSource) is wondering what Oracle actually did buy. He concludes luckily one of the great strengths of Java is its developer and open source community, thus Oracle does not own the future of Java. Makes sense.
Alef Arendsen (previously SpringSource, now JTeam) wonders which company/group will be the next, since only a few large opensource bodies are left: "the Apache Software Foundation (ASF), products in the Eclipse Foundation, products carying the JBoss name and last but not least, a broad set of products under the SpringSource umbrella".
Sun "invited Oracle president Charles Phillips and chief corporate architect Edward Screven to an employee-only town hall last Wednesday", answering employee questions. In short: Oracle loves Sun's software (Java, MySQL) and hardware, but the future is unclear for OpenOffice and Sun's cloud effort.
- A beginners tutorial on how to integrate GWT with PHP using XML as the "bridge" between the two technologies.
- Manage your Amazon S3 with freeware CloudBerry Explorer. Makes it for example easy to move buckets between the US and Europe.
Cloudkick is a free tool which allows you to migrate your Amazon EC2 AMIs to to Slicehost (owned by Rackspace).
- Big news this week was of course that Google App Engine now also supports Java, though still in closed beta. Other reports of this news can be found here, here, and this summary from the related Campfire '09. A nice two pager overview can be found here. Also immediately available is an Eclipse plugin. Groovy is supported too btw.
Note that the Java 1.6 support is not (yet?) 100%:
- It hasn't passed Sun's Java certification tests
- Over 7 items of what's not supported are listed here.
- 9 mostly similar are listed here.
Here's a runthrough of getting a Wicket Hello World example running on GAE.
- Google also tries to introduce a new standard to easily take your contacts with you to other sites: Portable Contacts. It's used in combination with OAuth.
- Interesting, this opensource XSS bookmarklet (thus javascript) scans for potential XSS problems.
- Talking about scanners and security, here's a free HP Flash .swf scanner that decompiles it and searches for well known leaks.
- Great survey results on Javascript/RIA frameworks. Questions surveyed were: which frameworks do you use the most, quality on documentation and community support, performance, ease of implementation, popularity, and 3rd party plugins quality.
- How can you make sure your site can handle peak-loads? This article lists the possibilities:
- Over-provisioning (estimating what the peak will be).
- Under-provisioning.
- Right-sizing: estimate for a short period in time, then scale up or down: flexible scaling and auto-scaling.
How this can be achieved? Add a middleware virtualisation layer that helps the application take advantage of these new dynamically added resources. The article also describes in detail how to add auto-scaling to your existing application, including a description how to try it out on GigaSpaces XAP which uses EC2.
- Quite amazing, Salesforce.com runs on only about 1000 servers (and that's mirrored, so only really about 500 servers). Salesforce has more than 55K enterprise customers, 1.5M individual subscribers, 30M lines of third-party code and hundreds of TBs of data.
- Here's a list of criteria when selecting a SOA testing tool.
- A nice introduction to Hibernate's second-level cache.
- Five tips for successfully deploying Maven. Including a bunch of pros and cons in the comments.
- On a keep-an-eye-on-this-innovation side note, Digg introduced a interesting (new?) way of a URL shortener like TinyURL, and at the same time attract traffic. Just prefix any URL with http://digg.com/, and voila, a shortened URL appears including a Digg toolbar. Below I entered http://digg.com/http://ttlnews.blogspot.com/ in the address bar:

- Need to know whether a collection is modified concurrently, which causes the ConcurrentModificationException? Check this handy wrapper solution here.
- The second article in the Transaction strategies series. "Using examples from the Spring Framework and the Enterprise JavaBeans (EJB) 3.0 specification, explained is how the transaction models work and how they can form the basis for developing transaction strategies ranging from basic transaction processing to high-speed transaction-processing systems".
- For the Amazon EC2 now a free AWS Eclipse plugin is available. It facilitates remote development, deployment, and debugging Java applications on Amazon Web Services.
- Three common mistakes to avoid when implementing XML and webservices: don't make your messages too large, don't create too fine-grained services, and don't forget to create an XML schema.
- Javascript is getting more and more important the last couple of years, so here's a bunch of best practices and efficiency tips.
- Great article by Dion Hinchcliffe with 10 emerging technologies every software architect has to know about. In short:
- Cloud computing
- Non-relational databases
- Next-generation distributed computing
- Web-oriented architecture (WOA)
- Mashups
- Open supply chains via APIs
- Dynamic languages (e.g Rails, PHP compared to Java/.Net)
- Social computing
- Crowdsourcing and peer production architectures
- New Application Models (e.g the symantic web, opensocial, widgets)
- Elaborate explanation of managing boilerplate text (e.g. titles, button labels, prompt, error messages, tool tips) in JSF applications. This includes more advanced locale requirements, like certain text that needs to be different when shown to junior and senior users.
- Here's a nice diagram with an overview of what activities are needed to create a website, from idea to support and everything in between.

- Always annoyed that you have to manually close a resource like InputStreams, Connections etc? And that the first exception might be surpressed by the second in the finally block? Here's a suggested solution: the Automatic Resource Management pattern by Joshua Bloch.
- Ten more Eclipse shortcuts you maybe didn't know...
- Of course you've heard/read that Microsoft has released IE8 last week. Here's a bunch of tips when migrating your site from IE7 to IE8.
- Ever need to create a UUID/GUID? Here's a few offline generators compared. uuidgen is an online UUID generator supporting version 1 and 4. A handy FAQ on UUIDs with some more depth can be found here.
- A table-based quick review of the following RIA frameworks: GWT 1.5, Laszlo 4.2, pure Javascript and Flex 3.2.
- A short introduction on how ActionScript 3 differs (and not) from Java.
- A wiki constructed with over four dozen architects: 97 things every software architect should know. Also now available as a book. It includes advice such as:
- Don't Put Your Resume Ahead of the Requirements (Nitin Borwankar)
- Chances Are, Your Biggest Problem Isn't Technical (Mark Ramm)
- Communication Is King; Clarity and Leadership, Its Humble Servants (Mark Richards)
- Simplicity Before Generality, Use Before Reuse (Kevlin Henney)
- For the End User, the Interface Is the System (Vinayak Hegde)
- It's Never Too Early to Think About Performance (Rebecca Parsons)
- An introduction to Object Oriented CSS.
- Sample chapter from Thomas Erl's latest SOA Design Patterns book, and an interview with him. He "talks about the main benefits of having a pattern catalog, SOA and Web services, the current state of SOA, the difference between SOA and service orientation, and the role of patterns in SOA adoption".
- A series of five articles on setting up a Java Wicket project and implementing a frontend with it.
- Handy piece of (alpha) software to test IE8 RC1, IE7, IE6 and IE5.5 on Vista and XP. Note that it looks like Microsoft is releasing IE8 this coming week, so get ready...
- A relatively new type of mashups are so called clipping mashups. Instead of building a mashup against some official API, a clipping mashup just parses the final content in the presentation, thus including CSS, Javascript etc. Links can be rewritten, new elements injected. The presentation doesn't have to follow for example portal JSR-168 standards.
An example use case would be that you could use it to (temporarily) fix a bug in a system (not necessarily owned by you) until the official next release comes out.
- Eight architectural styles described. Handy overview including which one could be when appropriate.
- Summary of migration project from JDBC to Hibernate. Valid comment at the bottom is that iBatis might be a better solution when you have to work from an existing schema.
- Additional tips and articles for the Wicket in Action book. For example this article on how to do a partial Ajax repaint of newly created repeater items (e.g adding 1 row dynamically to a table or list with a "+" button). This in contrast to rendering all rows in a table when repainting the WebMarkupContainer as in the example described here.
- Nice step-by-step introduction to asynchronous processing in Java 5 using Futures, ExecutorServices, CompletionService, Callback interfaces and ThreadPools. Here's part 2 where it's being used in combination with Javascript to improve the user experience.
- This week a new web-based online code editor from Mozilla Labs. Javascript, HTML and CSS support are in this first beta release. All made in Javascript and requires Canvas support. One of the goals is to create new useful functionality for the code editor. Check the video for a full introduction.
- You can now get your IBM licensed software on Amazon's EC2 AMIs. Development AMIs with IBM software on them are also available at no additional fee. In the future it will also be possible to purchase these services by the hour. Initially available are: IBM DB2, IBM Informix, WebSphere sMash, IBM Lotus Web Content Management, and IBM WebSphere Portal Server. No I'm not sponsored by IBM, but I do think it's a smart move.
- RWW is noticing there is a trend towards a different type of databases than relational databases. There's increased interest in key/value pair storage, e.g Distributed Hash Tables. Pros and cons are described. Example cloud initiatives of these key/value storages are: Google's AppEngine Datastore (built on BigTable), SimpleDB by Amazon and Microsoft's SQL Data Services.
Non-cloud initiatives are CouchDB, Project Voldemort, Mongo and Drizzle (this last one is more or less a mix of the two paradigms).
- An application architecture pattern for RIA applications. At the end of the pattern the implementation is based on MS frameworks/tools but pattern is technology-agnostic.
- Summary of a SOA case study at Cisco.
- A nice set of coding tips for writing efficient Android code by Google, essential for Android since it runs on embedded systems. Still the tips are so generic you can apply quite a few of them in regular Java applications too.
- And as the last item for this week: an overview of the expected changes in Java EE 6.
- In SOA lessons learned for Web 2.0 "two experienced SOA architects look at the new world of Web 2.0 technologies with a critical eye and present five best practices that can help you be more successful in adopting Ajax, REST, and other Web 2.0 technologies as part of your SOA."
- A quick comparison between Echo2 and GWT. Both enable you to create a rich internet application with only Java using a component-based approach. Wicket is also component based, but requires still to work with HTML; not necessarily a negative thing! For example, how will you split the work between the user interface designer and developers with Echo2 and GWT?
- A nice extensive summary of Model Driven Development misperceptions and challenges. Five challenges and five misconceptions in total.
- A whitepaper named "Centralized Service-Oriented Architectures without ESB" which shows how to create service-oriented architecture in a Google-like way, that is services around huge data repository, but without ESB. It is based on experience of the writers in data warehouses, Wiki and telecommunication systems. Thus, proposed is not really an ESB, but an architecture that's more like a centralised repository with distributed caching. Of course this comes with its own set of pros and cons, as mentioned in the whitepaper.