Open-tides Software Services Hummingbird SMS

One common requirement in developing enterprise applications is to ensure audit logs are available for data security and traceability. Who made the changes, when and where. Such requirement is not only dictated by corporate IT policies but is also required by government laws. Considering most enterprise applications have at least 50 domain objects, implementing audit logs in each of them can be time consuming. So, a generic solution must be established to minimize coding when creating audit logs.

The Solution

  • Use Hibernate interceptors to trigger change events.
  • Use Java reflections to retrieve old and new data.
  • Create an interface to switch logging on or off for every data object.
In summary, here are the steps needed to be performed to accomplish this.
  1. Create an Auditable interface as a marker on data that needs to be audited. Any data object that needs to be audited must implement Auditable interface.
  2. Create an AuditLog to store log information. This contains the date (when), user (who), class name, object id and the audit message (what).
  3. Create an AuditLogInterceptor that will keep track of all data change events and store all changes performed.
  4. Create a utility that can retrieve object values using Java reflections to process generic data retrieval.
  5. Create sample usage of auditing.
Read more...

One common requirement in developing enterprise applications is to ensure audit logs are available for data security and traceability. Who made the changes, when and where. Such requirement is not only dictated by corporate IT policies but is also required by government laws. Considering most enterprise applications have at least 50 domain objects, implementing audit logs in each of them can be time consuming. So, a generic solution must be established to minimize coding when creating audit logs.

This is a continuation of the post “Audit Logging via Hibernate Interceptor“.

Read more...

My team member has a requirement to implement JMS. I was able to dig up some stuff about JMS in my blog. I’m re-posting it here since it might be useful. For this example, I used IBM Websphere Community Edition(IBM WAS CE), which is synonymous to Geronimo(at least for the first version).

Here are the simple steps:

1. Run Geronimo or IBM WAS CE
2. Compile these two classes. Take note that you need the ff. jar files to compile and run these successfully. Here’s the list:

- geronimo-j2ee_1.4_spec.jar
- commons-logging-1.0.4.jar
- concurrent-1.3.4.jar

Note : Some jars might have new versions so be sure to use the latest one.

You’ll find it somewhere under the Geronimo or WAS CE installation directory.

Read more...

Why develop Java applications on Mac? Well, why not? Aside from the coolness factor, here are some business and technical reasons to do so.

Read more...

Ivy Dependency Manager

Why I Choose Ivy?

The main thing I like about Ivy is its simplicity. You can use Ivy with only ant installed on your system (and of course, java). This means that you don’t need to download any Ivy related libraries or when using eclipse, no plug-in is needed. You can run everything using ant, from installing the ivy library to downloading the dependencies.

Like most of us often hear, “its another framework or dependency management tool”. But what exactly differentiates Ivy from Maven?

Ivy is much easier to use. The library is simpler since it doesn’t do so much. It only focuses on dependency management and use the already famous and powerful ant to build the application. In short, ant and ivy is used side by side.

Read more...

Today, we attended the Sun Tech Days Conference at the Makati Shangrila. Aside from the great food and freebies, I enjoyed the whole experience. There were several things I learned during the second day of the 3-day conference. Here’s to recap what I learned and observed:

Sun Tech Days

Read more...

We’ve been using Continuum for quite some time now. While Continuum does seem to do a good job managing our builds, its limited support for JUnit Test reports made us evaluate an alternative, Hudson. Hudson is the new guy on the block, aside from cool icons and more intuitive interface, this tool seems to be quite competitive and feature-packed.

So, I’m listing down a head-to-head comparison between Continuum and Hudson as we’ve used them and based on features we are looking for:

Read more...

I left Manila to see if there was a market for my SMS appliance product. I had to take a job so I can stay and have time to study the market. After working in Singapore for 2 1/2 years, I finally realized that it was the right time to go home. I still have this feeling of competing in the global scene and make my country proud so I looked for opportunities to come back. On the course of doing this, I met Allan, President and CEO of Ideyatech. When we first met, I just told him about my SMS appliance product, on how he can integrate it to Ideyatech’s existing applications.

Read more...

As recommended by Yahoo on YSlow - tip #1: Make fewer HTTP request and tip #10: Minify javascript- we aim to implement these tips on all our projects with minimal head-ache. While these recommendations are truly useful, implementing them can be quite tedious and challenging. Consider having to maintain multiple min versions of the javascript and the files that links to them! So to alleviate the problem, we created a tool called low-tides (as part of open-tides) that helps automate the merging and minification of css and js files.

Read more...

How do stand-up meetings help? Are they really helpful?

stand up meetings

Here at Ideyatech, we have been practicing stand-up meetings religiously ever since our first project. So far, this short, daily routine has kept everyone up-to-date on status of their projects. By reporting daily activities, issues and bottlenecks are quickly identified and resolved. Everyone gets accountability on the tasks that are reported, and the team becomes more responsible of the project as a whole.

Here are some tips to make stand-up meetings effective:

Read more...