HTML

Random musings in IT

Friss topikok

Címkék

21 days (14) addon (3) Alfresco (1) analysis (1) android (6) angel investment (1) angularjs (2) ant (1) architect (2) architecture (2) Atoll (1) awstats (1) axis (1) axis2 (1) beta (1) blog (4) blogging (2) bluetoth keyboard (1) bofh (1) boxee (1) breakfast (1) build (1) cassandra (1) CGI (1) challenge (10) challenge cup (1) chinese (4) chromium (1) CMS (1) compaq contura aero (1) conference (1) consulting (1) continous-integration (2) Dark Data (1) DB2 (5) Debian (1) developer (1) development (1) document outliner (1) driver (1) Eclipse (3) ECM (2) education (1) EJB (1) ejb-client (1) emulator (1) etcd (1) experience (1) facebook (1) female (1) FileNet (1) firefox (2) freeplane (17) freeplaneGTD (17) fun (8) Geronimo (1) getting things done (1) gitlab (1) gnome (1) gtd (15) habit (3) hack (1) hacking (1) hdmi to vga (1) hibernate (1) HR (2) Hungary (1) I18N (1) IBM (1) in (1) Information Lifecycle Governance (1) interview (1) invitel (1) issues (1) It (2) J2ME (1) java (11) javascript (3) java security (1) JAX-WS (1) JBoss (1) JSF (1) kernel (1) Keyboard (1) layout (1) lighttpd (1) Linux (11) LXC (1) macro (1) maven (3) meetup (1) mercury (1) microservice (1) mindweb (5) motorola vip1910-9 (1) movie (1) MQ (1) mw3030r (1) natty (1) nginx (1) node.js (1) nodejs (1) nosql (1) OpenUP (1) Oracle (1) overheat (1) php (1) plugin (1) PrimeFaces (1) project (5) project management (1) RCP (1) recruiter (2) regexp (1) release (11) reporting (1) retrospective (2) rootkit (1) rss (1) RUP (1) script (1) server (1) shared library (1) SharePoint (1) SOA (1) spam (2) spellchecker (1) SQL (1) SSL (1) startup (2) stb (1) story (1) swing (1) SWT (2) tablet (4) tapermonkey (1) tech-beer (1) test (1) thoughts (1) timelapse (1) tomcat (1) toys (1) translate (2) typescript (1) ubuntu (1) ui (1) unified-process (1) University (1) usb (1) VirtualBox (2) virtualization (2) web-service (2) webcam (1) WebSphere (2) wicket (1) widget (1) Windows 8.1 (1) wordpress (3) X11 (1) Címkefelhő

pályazatThis post is the last in my current retrospective series, that sampled the projects I was working on years ago. You can see the previous posts here and here.

While the previous posts were about projects that span through years, this will be about a project that took no longer than a couple of months.

I was desperately looking for a screeenshot in my archives, to add as an illustration. I finally gave up, and tried to go with the University logo from the Internet. Imagine my surprise, to find the application is still up and running! It wasn't used since 2013, but considering it was not maintained since the end of 2010, it was quite well done. You can see the version number on the bottom of the screen.pályázat-version

Disclaimer: The project is described best from my memories. I tried to keep the story professional, still there were emotional aspects that I tried to present in the back story. 

Background

pályazatI was running a small company of IT professionals between 2003 and 2010. Our main strength was getting into projects with obscure technology requirements, and helping out the customer with the project deliveries. These were times, when there were so many major projects, where the customer prescribed a certain technology and the supplier had no idea, how to deliver. Our clients were mostly engaged on projects in the telecommunications and financial sectors. We were going strong until the financial decline around 2008. Most large projects were cancelled and we were struggling to find jobs anywhere.

Corvinus University in Budapest is the most well-known University of Economics in Hungary. They offer several grants, participate in consortial projects, as well as run their own departmental projects. As usual the department responsible for this was undermanned and was floating in paperwork. Thus came the idea of having a system that keeps track of the tasks.

We were previously involved in a filing and records management project that turned out as a complete disaster for both the University and ourselves. The company that originally won that project disappeared into thin air, leaving them without the promised government mandated electronic records management system, and us with the unpaid bills for months of business analysis and development.

To cut our losses we took on this task, salvaged whatever we could from the previous project and tried to meet the short deadline.

Project goals

Government subsidised programs and projects have a great deal of red tape associated with. There are pre-defined reports and milestones associated with each project. Forms must be filled and filed all the way through the project and even after it's completed the results must be reported. The projected spending must be reported along with the actual spending, and the remaining budget must be visible. It takes lots of paper pushing and record keeping to keep things aligned with the expectations.

Constraints

The University has recently introduced a new ECM system, Alfresco. Since the goal was to base as many projects as possible to Alfresco, the project had to make use of its' abilities, like the task management, rights management and the document management features. The financial data had to go be stored alongside the relevant documents.

The user interface had to be separated from the Alfresco, as this was a purpose made application, and had to be task centric.

There were only two months for developing the application, before the project subsidy expires. The time frame has also set the maximum possible amount billable.

Development was to be started before the winner of the public bidding was announced. If we didn't win that would have been a wasted effort.

The source code along with development documentation was to be handed over. The documentation must be detailed enough to make the code understandable for qualified developers.

Architecture

The overall architecture was just as simple, as a three tier web application can get. Data backend, application server, web front-end. There were only a few twists to it that made the project special.

Most of the data model had to be implemented using Alfresco's content metamodel. As the Alfresco content metamodel allows great flexibility in terms of inheritance and meta data customization, it was surprisingly easy to create the entire structure. The financial data was stored in the metadata on the milestone nodes, that contained the documentation related to the given milestone, as well as the rest of the milestones. Since projects are pretty easily represented in such a tree structure, this was even easier to create and manage, than to design the corresponding database and create all the traversing algorithms.

Using "traditional" document archive solutions, such as DB2 Content Manager, ECM Documentum, Saperion, that use a more rigid content model, like table per document type, this would have not worked. Those beasts are great for storing vast amounts of documents of a limited type, but Alfresco was good to store virtually any type of document albeit not as effectively.
As the milestones and the documents themselves had associated actions, such as deadlines to produce some document, or review something, we had to dig in and provide ad-hoc task assignment features. Since the users of the application were in the project monitoring office, but the executors of these tasks were "only" people with access to the Alfresco Web interface, we had to come up with something that uses Alfresco but not directly our application. Alfresco had jBPM version 3 built in those times.
I never was satisfied with jBPM, to me it was not much more than a hack in itself, that ignored the trends and standards for so many years. Alfresco has decided not to go with jBPM, and upgrade to the already available version 5, despite, that it already supported BPMN 2.0. They have developed Activiti that's way easier and better integrated.
Even though Alfresco provided API's to most of it's internal components, it was not true for the task management. We had to create an add-on to the Alfresco to expose the jBPM services. Since our goal was to create a reusable framework, that can be deployed on a out-of-the-box Alfresco installation, it had to be created as a standard package. This was when the open source world has shown it's backside. Neither Alfresco package structure, nor the jBPM API, nor the way it was integrated in Alfresco was well documented. We had to do lots of digging around in the source code to make up for the non-existent documentation.

The actual application was based on standard EJB 3.0 that managed the connection to the Alfresco web services. We used the mandated Glassfish AS, which was great at that time, and we separated it from the Alfresco instance, just in case. The front-end was implemented in JSF 2.0 using Primefaces. We had to match the University design handbook on the UI, and since we had no designer at this time, I was the one re-skinning the components using CSS. This presented some problems, as the version of Primefaces that contained the features we needed, was still in development. Fortunately that was not a "big-league" type open-source library, the developer offered us help, it was well documented, and worked almost out of the box. We even went to production with a pre-release SNAPSHOT, because we couldn't wait another month for the actual release.

The most challenging, and interesting part of the entire interface was the collapsible project tree display. This was implemented in PrimeFaces' tree control, since it is a really flexible implementation, even the data aggregation was done pretty easily. The only custom code we had to do, was the Export to excel feature, that dumped the entire project's financial data to a spreadsheet, for further analysis. Once we got that right, the rest of the application was just a standard JEE development task.

Reporting was implemented in Jasper Reports. Fortunately this reporting engine already had the ability to use the Java beans that we used in the application to map our data model to the front-end components. It just clicked in it's place waiting for someone to define and implement reports in it.

Developmentheadshot

As I pointed out, the timeframe was tight, the administration overhead was huge, still we had to deliver readable, maintainable components.

With all the gear already in place it took no more than a few hours to set up the continuous integration environment using the traditional Java stack.

  • Subversion - source code repository
  • Maven - modularization, dependency management, build management
  • Jenkins - automatic builds/releases
  • Nexus - Artifact repository to store build results
It took a few days to work out the way we had to package the Alfresco modules, and to get the Maven release plugin up-and running with it, but it was worth the effort. As soon as this was done, we only had to push a single button to churn out a new version, that could be sent to the Customer, who was able to test the deploy, and the application on his own.

Lessons learned

Keep the team together

By focusing on the execution we were able to keep the project on track, and deliver on time. Despite knowing, that it's inevitably our last project together, we kept our heads down and worked through all difficulties.

Use technology creatively

Combining the document model with the data model is quite an unorthodox way of storing financial data. The volume of aggregation and the amount of data has made it possible. This saved a huge amount of development time, as we didn't have to consolidate two data layers.

Use only trusted suppliers

We have made the mistake of outsourcing some report generation tasks to a former colleague. Unfortunately he never delivered, and if it wasn't for the goodwill of the University (and the time pressure on them) we would have had to do those parts as well.

Make sure the specification is complete

The report requirements were so poorly thought out, we had to go over and over them with the customer so many times. I'm sure we wasted at least a week just on that. The customer had no idea what they want there, besides the reports that were already implemented in the user interface. We were quite lucky, as we would not be able to deliver anyway.

Címkék: java project retrospective Oracle CMS Alfresco ECM JSF PrimeFaces

Szólj hozzá!

A bejegyzés trackback címe:

https://itworks.blog.hu/api/trackback/id/tr268127030

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása