Reminder: Create & find trunk-related issues here. Legacy Trac tickets are still available. Problems? Workflow feedback? Need a module project? Open a support ticket.

OpenMRS Trunk

Multi Level Database Caching

Details

  • Type: New Feature New Feature
  • Status: Code Review (Pre-Commit) Code Review (Pre-Commit)
  • Priority: Must Must
  • Resolution: Unresolved
  • Affects Version/s: None
  • Fix Version/s: OpenMRS 1.8
  • Component/s: None
  • Description:

    Hibernate has support for caching at several levels. Openmrs currently has nothing specific set up. Investigate the different options and figure out what objects should (or can) be cached to optimize openmrs.

  1. ehcache-1.6.2.jar
    (198 kB)
    Burke Mamlin
    2010-04-20 10:02:29 EDT
  2. openmrs%202187-1.patch
    (7 kB)
    Burke Mamlin
    2010-04-20 09:57:07 EDT
  3. openmrs-2187-2.patch
    (9 kB)
    Burke Mamlin
    2010-04-21 11:39:57 EDT
  4. openmrs-2187-3.patch
    (21 kB)
    Burke Mamlin
    2010-04-28 09:03:18 EDT
  5. trunk-434-4.patch
    (20 kB)
    Zabil C.M
    2010-08-19 12:15:41 EDT
  6. trunk-434-5.patch
    (22 kB)
    Nyoman Ribeka
    2010-08-19 16:42:47 EDT

Issue Links

Activity

Hide
Darius Jazayeri added a comment - 2010-04-15 17:05:46 EDT

Step 1: start caching Concepts.

Other good candidates: Patients, other metadata (location, concept_datatype, encounter_type)

Also: explain how does caching works, for the benefit of other OpenMRS developers who aren't going to follow this closely. For example with bulk queries: if we were caching observations, and we select all obs for a patient, do they all get cached? What if we first select all weight obs, and then select all obs. Is the second query sped up by the caching? Would we have done better reversing the order of the queries.

Show
Darius Jazayeri added a comment - 2010-04-15 17:05:46 EDT Step 1: start caching Concepts. Other good candidates: Patients, other metadata (location, concept_datatype, encounter_type) Also: explain how does caching works, for the benefit of other OpenMRS developers who aren't going to follow this closely. For example with bulk queries: if we were caching observations, and we select all obs for a patient, do they all get cached? What if we first select all weight obs, and then select all obs. Is the second query sped up by the caching? Would we have done better reversing the order of the queries.
Hide
Darius Jazayeri added a comment - 2010-04-15 17:07:00 EDT

Zabil, this is the ehcache ticket. If there's a TW resource with experience in this area who could do this very quickly, or else advise someone else, let us know.

Show
Darius Jazayeri added a comment - 2010-04-15 17:07:00 EDT Zabil, this is the ehcache ticket. If there's a TW resource with experience in this area who could do this very quickly, or else advise someone else, let us know.
Hide
Niranjan Salimath added a comment - 2010-04-19 05:31:19 EDT

We started out on the initial few steps for enabling and testing second-level caching using ehcache.

Caching was enabled for the Role objects as an initial candidate.
Role was found to be a simpler class than Concept and hence easier to test.

The initial few tests consistently threw up ConcurrentModificationExceptions from the ehcache provider.
These exceptions can be resolved by upgrading ehcache to version 1.6.2.

We struggled to find a good and effective mechanism to test whether caching is working.
The org.hibernate.statistics interface and the methods it exposes helped in writing effective unit test cases.
According to the unit tests we wrote, using the statistics interface, we found that the cache is being used for the role objects.
We could see cache hits and puts, when we ran a "mvn:test".
Interestingly, we found no cache hits when we ran individual unit tests, and this is something we are still looking into.

There are two things we would like to learn:

  1. We saw ehcache.xml and other ehcache related changes already checked into the code base. Is there any reason why the cache related changes were not enabled?
  2. Since the OpenMRS object model is huge, we would like to first work on a smaller subset of the objects first, test out the caching and then expand the caching strategy. We were thinking of Concept, Role and Privilige as the starting set. We will welcome any suggestions in this regard.
Show
Niranjan Salimath added a comment - 2010-04-19 05:31:19 EDT We started out on the initial few steps for enabling and testing second-level caching using ehcache. Caching was enabled for the Role objects as an initial candidate. Role was found to be a simpler class than Concept and hence easier to test. The initial few tests consistently threw up ConcurrentModificationExceptions from the ehcache provider. These exceptions can be resolved by upgrading ehcache to version 1.6.2. We struggled to find a good and effective mechanism to test whether caching is working. The org.hibernate.statistics interface and the methods it exposes helped in writing effective unit test cases. According to the unit tests we wrote, using the statistics interface, we found that the cache is being used for the role objects. We could see cache hits and puts, when we ran a "mvn:test". Interestingly, we found no cache hits when we ran individual unit tests, and this is something we are still looking into. There are two things we would like to learn:
  1. We saw ehcache.xml and other ehcache related changes already checked into the code base. Is there any reason why the cache related changes were not enabled?
  2. Since the OpenMRS object model is huge, we would like to first work on a smaller subset of the objects first, test out the caching and then expand the caching strategy. We were thinking of Concept, Role and Privilige as the starting set. We will welcome any suggestions in this regard.
Hide
Sneha Jain added a comment - 2010-04-20 09:57:07 EDT

Initial second level caching review patch.

Show
Sneha Jain added a comment - 2010-04-20 09:57:07 EDT Initial second level caching review patch.
Hide
Sneha Jain added a comment - 2010-04-20 09:57:07 EDT

We have enabled caching for the Role objects in this review patch.

The patch includes the following changes:

  • Ehcache provider updated to version 1.6.2
  • A test suite for testing second level caching
  • Configurations to enable caching and hibernate statistics

Surprisingly, the shouldUseSecondLevelCacheInOtherRegions unit test passes. This implies that caching has been enabled for objects other than Role. We were wondering why this is so.

Show
Sneha Jain added a comment - 2010-04-20 09:57:07 EDT We have enabled caching for the Role objects in this review patch. The patch includes the following changes:
  • Ehcache provider updated to version 1.6.2
  • A test suite for testing second level caching
  • Configurations to enable caching and hibernate statistics
Surprisingly, the shouldUseSecondLevelCacheInOtherRegions unit test passes. This implies that caching has been enabled for objects other than Role. We were wondering why this is so.
Hide
Sneha Jain added a comment - 2010-04-20 10:02:29 EDT

Ehcache1.6.2

Show
Sneha Jain added a comment - 2010-04-20 10:02:29 EDT Ehcache1.6.2
Hide
Darius Jazayeri added a comment - 2010-04-20 15:27:00 EDT

At some point in the past we tried using caching, it led to some errors, and we turned off the caching rather than do the debugging. (I was not part of this. Ben can describe in more detail.)

  • I'm not sure I understand how the test is actually testing anything. You check for size==1 in the first test, but then size>=1 in the second test. Don't you need to do something, and then check for size>1?
  • Need a test showing that Hibernate automatically re-attached objects to the session if they live in the second-level cache across sessions. Specifically:
  • what if we fetch an object in one session, then fetch it and visit one of its collections that has lazy=true in a second session. (This is probably not doable for role, since both collections are lazy=false.)
  • what if we fetch and object and modify it in one session, then fetch it again in a second session. Do we get back the modified object? Is this thread-safe? (I.e. if we have the object in one thread, modify the java object but don't write it back to the db yet, and then we fetch it in a concurrent thread while the first is still working, do we get an object that has been modified versus what was in the db?)
  • At some point it would be good to see whether this speeds things up, according to some benchmark. Maybe have a test that does 1000 privilege checks on the currently-logged-in user?
Show
Darius Jazayeri added a comment - 2010-04-20 15:27:00 EDT At some point in the past we tried using caching, it led to some errors, and we turned off the caching rather than do the debugging. (I was not part of this. Ben can describe in more detail.)
  • I'm not sure I understand how the test is actually testing anything. You check for size==1 in the first test, but then size>=1 in the second test. Don't you need to do something, and then check for size>1?
  • Need a test showing that Hibernate automatically re-attached objects to the session if they live in the second-level cache across sessions. Specifically:
  • what if we fetch an object in one session, then fetch it and visit one of its collections that has lazy=true in a second session. (This is probably not doable for role, since both collections are lazy=false.)
  • what if we fetch and object and modify it in one session, then fetch it again in a second session. Do we get back the modified object? Is this thread-safe? (I.e. if we have the object in one thread, modify the java object but don't write it back to the db yet, and then we fetch it in a concurrent thread while the first is still working, do we get an object that has been modified versus what was in the db?)
  • At some point it would be good to see whether this speeds things up, according to some benchmark. Maybe have a test that does 1000 privilege checks on the currently-logged-in user?
Hide
Zabil C.M added a comment - 2010-04-21 05:09:05 EDT

the test shouldPutRoleAndDependentsInSecondLevelCache may look confusing, but because a role called "System Developer" is inserted at the start of each test case as a part of the sample data (dbunit). Role is already cached.

So the second test shouldGetRoleAndDependentsFromSecondLevelCache fetches this item and asserts that there is a hit count. We could assert on the exact number of elements in the cache, but if there is one more role added as sample data then the numbers will have to be modified.

We will try to add test cases for the rest of the scenarios that you mentioned.

Show
Zabil C.M added a comment - 2010-04-21 05:09:05 EDT the test shouldPutRoleAndDependentsInSecondLevelCache may look confusing, but because a role called "System Developer" is inserted at the start of each test case as a part of the sample data (dbunit). Role is already cached. So the second test shouldGetRoleAndDependentsFromSecondLevelCache fetches this item and asserts that there is a hit count. We could assert on the exact number of elements in the cache, but if there is one more role added as sample data then the numbers will have to be modified. We will try to add test cases for the rest of the scenarios that you mentioned.
Hide
Darius Jazayeri added a comment - 2010-04-21 05:36:05 EDT

@Ben, @Burke,

Any thoughts for more caching cases that need unit tests?

Show
Darius Jazayeri added a comment - 2010-04-21 05:36:05 EDT @Ben, @Burke, Any thoughts for more caching cases that need unit tests?
Hide
Aravind Madishetty added a comment - 2010-04-21 11:28:39 EDT

This patch reorganizes the test cases in a more readable manner.

It now uses the factory to open a session and operate on objects.

The role "System Developer" is already cached because the base test loads an authenticated user (which in turn loads the role "System Developer")

We have not yet written test cases for lazy loading collections.

There is a test case which modifies a role and then saves it. When that happens the cache object is marked as stale and will be refreshed the next time you load the object. So there is no concurrent modification exception.

We are trying to measure the performance benefits. We tried using JMeter but issue with running it did not get us any results. We are evaluating other load test tools.

Show
Aravind Madishetty added a comment - 2010-04-21 11:28:39 EDT This patch reorganizes the test cases in a more readable manner. It now uses the factory to open a session and operate on objects. The role "System Developer" is already cached because the base test loads an authenticated user (which in turn loads the role "System Developer") We have not yet written test cases for lazy loading collections. There is a test case which modifies a role and then saves it. When that happens the cache object is marked as stale and will be refreshed the next time you load the object. So there is no concurrent modification exception. We are trying to measure the performance benefits. We tried using JMeter but issue with running it did not get us any results. We are evaluating other load test tools.
Hide
Darius Jazayeri added a comment - 2010-04-22 00:08:17 EDT

That's very readable, thanks much.

I'm curious about the behavior of userService.getAllRoles(). Will this put them all in the cache so that doing us.getRole(1) now hits the cache?

Show
Darius Jazayeri added a comment - 2010-04-22 00:08:17 EDT That's very readable, thanks much. I'm curious about the behavior of userService.getAllRoles(). Will this put them all in the cache so that doing us.getRole(1) now hits the cache?
Hide
Ben Wolfe added a comment - 2010-04-22 18:12:22 EDT

Darius, I can't remember why I took caching back out...that was 4+ years ago. Perhaps because of that ehcache bug they ran into?

Seems like a simple addition. Users are the only thing to be careful with because we keep that object in the session. A quick fix for that would be to just keep the integer user-id instead of the User object though.

Show
Ben Wolfe added a comment - 2010-04-22 18:12:22 EDT Darius, I can't remember why I took caching back out...that was 4+ years ago. Perhaps because of that ehcache bug they ran into? Seems like a simple addition. Users are the only thing to be careful with because we keep that object in the session. A quick fix for that would be to just keep the integer user-id instead of the User object though.
Hide
Zabil C.M added a comment - 2010-04-23 06:51:00 EDT

with the old version of ehcache (1.2) we used to get concurrent modification exceptions which was fixed in the later releases. (the reason why we upgraded the ehcache version)

userService.getAllRoles() would load all the roles onto the cache and other load calls will start using it.

We are still tied down on what to use as an effective tool for testing the benefit of caching.

Could we take this on a phased approach?

What i mean is something like Role looked like an obvious choice because of the frequency of use (users logging in) low modifications (although the directive "cache-write" handles this transparently)

We can identify objects like that to start integrating with the cache.

If we look at the tests, the cache elegantly handles object modifications if we use the option cache=read-write option. So the switch should be transparent

Show
Zabil C.M added a comment - 2010-04-23 06:51:00 EDT with the old version of ehcache (1.2) we used to get concurrent modification exceptions which was fixed in the later releases. (the reason why we upgraded the ehcache version) userService.getAllRoles() would load all the roles onto the cache and other load calls will start using it. We are still tied down on what to use as an effective tool for testing the benefit of caching. Could we take this on a phased approach? What i mean is something like Role looked like an obvious choice because of the frequency of use (users logging in) low modifications (although the directive "cache-write" handles this transparently) We can identify objects like that to start integrating with the cache. If we look at the tests, the cache elegantly handles object modifications if we use the option cache=read-write option. So the switch should be transparent
Hide
Ben Wolfe added a comment - 2010-04-23 13:51:52 EDT

Concepts would be good candidates. Perhaps also Locations, Users, and any of the *Types would be good to cache.

Show
Ben Wolfe added a comment - 2010-04-23 13:51:52 EDT Concepts would be good candidates. Perhaps also Locations, Users, and any of the *Types would be good to cache.
Hide
Diptanu Choudhury added a comment - 2010-04-28 09:03:18 EDT

ehcache integration with OpenMRS. Role, Location, User and Concept is marked for Cache

Show
Diptanu Choudhury added a comment - 2010-04-28 09:03:18 EDT ehcache integration with OpenMRS. Role, Location, User and Concept is marked for Cache
Hide
Wyclif Luyima added a comment - 2010-05-25 04:05:54 EDT

Whoever is handling this ticket, you would probably try and glance through this brief article about caching libs and mechanisms available for hibernate. http://www.javabeat.net/articles/37-introduction-to-hibernate-caching-1.html

Show
Wyclif Luyima added a comment - 2010-05-25 04:05:54 EDT Whoever is handling this ticket, you would probably try and glance through this brief article about caching libs and mechanisms available for hibernate. http://www.javabeat.net/articles/37-introduction-to-hibernate-caching-1.html
Hide
Ben Wolfe added a comment - 2010-07-20 17:28:10 EDT

I believe this is ready to test. Is it possible to create a unit test for this?

Show
Ben Wolfe added a comment - 2010-07-20 17:28:10 EDT I believe this is ready to test. Is it possible to create a unit test for this?
Hide
Zabil C.M added a comment - 2010-07-24 00:29:09 EDT

Hi Ben,
The patch has unit test which asserts the caching (via cache hits etc)

Show
Zabil C.M added a comment - 2010-07-24 00:29:09 EDT Hi Ben, The patch has unit test which asserts the caching (via cache hits etc)
Hide
Ben Wolfe added a comment - 2010-07-24 16:37:30 EDT

Wyclif, can you open a review and start the process for this? Or if it tests out ok on your system, you could do a commit and we could do a post-commit review on it.

Show
Ben Wolfe added a comment - 2010-07-24 16:37:30 EDT Wyclif, can you open a review and start the process for this? Or if it tests out ok on your system, you could do a commit and we could do a post-commit review on it.
Hide
Wyclif Luyima added a comment - 2010-07-25 20:54:30 EDT

Which of the attached patches above is the latest? I applied the one with the latest date and it doesn't seem to have any unit tests or changes in the test classes.

Wyclif

Show
Wyclif Luyima added a comment - 2010-07-25 20:54:30 EDT Which of the attached patches above is the latest? I applied the one with the latest date and it doesn't seem to have any unit tests or changes in the test classes. Wyclif
Hide
Zabil C.M added a comment - 2010-07-26 02:54:20 EDT

openmrs-2187-2.patch has the unit test case.

The latest patch adds a few more objects to the cache. So you can apply it on top of the above patch.

Show
Zabil C.M added a comment - 2010-07-26 02:54:20 EDT openmrs-2187-2.patch has the unit test case. The latest patch adds a few more objects to the cache. So you can apply it on top of the above patch.
Hide
OpenMRS JIRA added a comment - 2010-07-26 03:50:45 EDT

Did svn screw up with the patch?

On Jul 26, 2010 12:24 PM, "Zabil C.M (JIRA)" <jira-trunk@openmrs.org> wrote:
Issue (View Online <http://tickets.openmrs.org/browse/TRUNK-434>)
Key: TRUNK-434 <http://tickets.openmrs.org/browse/TRUNK-434> Issue
Type: [image: New Feature] <http://tickets.openmrs.org/browse/TRUNK-434> New
Feature Status: [image: In Progress] In Progress Priority: [image: Must]Must
Assignee: Zabil
C.M<http://tickets.openmrs.org/secure/ViewProfile.jspa?name=zabilcm>
Reporter: Darius
Jazayeri<http://tickets.openmrs.org/secure/ViewProfile.jspa?name=djazayeri>
Operations *View
all<http://tickets.openmrs.org/browse/TRUNK-434?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel>

openmrs-2187-2.patch has the unit test case.

The latest patch adds a few more objects to the cache. So you can apply it
on top of the above patch.

Project:
OpenMRS Trunk
Fix Versions:
OpenMRS 1.8
Attachments:
ehcache-1.6.2.jar, openmrs%202187-1...

This message was automatically generated by Atlassian JIRA Enterprise
Edition, Version: 4.1.1-522 ...

Show
OpenMRS JIRA added a comment - 2010-07-26 03:50:45 EDT Did svn screw up with the patch? On Jul 26, 2010 12:24 PM, "Zabil C.M (JIRA)" <jira-trunk@openmrs.org> wrote: Issue (View Online <http://tickets.openmrs.org/browse/TRUNK-434>) Key: TRUNK-434 <http://tickets.openmrs.org/browse/TRUNK-434> Issue Type: [image: New Feature] <http://tickets.openmrs.org/browse/TRUNK-434> New Feature Status: [image: In Progress] In Progress Priority: [image: Must]Must Assignee: Zabil C.M<http://tickets.openmrs.org/secure/ViewProfile.jspa?name=zabilcm> Reporter: Darius Jazayeri<http://tickets.openmrs.org/secure/ViewProfile.jspa?name=djazayeri> Operations *View all<http://tickets.openmrs.org/browse/TRUNK-434?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel> openmrs-2187-2.patch has the unit test case. The latest patch adds a few more objects to the cache. So you can apply it on top of the above patch. Project: OpenMRS Trunk Fix Versions: OpenMRS 1.8 Attachments: ehcache-1.6.2.jar, openmrs%202187-1... This message was automatically generated by Atlassian JIRA Enterprise Edition, Version: 4.1.1-522 ...
Hide
Zabil C.M added a comment - 2010-07-26 04:03:48 EDT

Maybe. I am not quite sure but i think just applying the openmrs-2187-2 patch alone would be the safest bet. The openmrs-2187-3 adds a few more objects and we might have not patched it correctly or something. You can always enable other objects in the cache based on the template set by openmrs-2187-2

Show
Zabil C.M added a comment - 2010-07-26 04:03:48 EDT Maybe. I am not quite sure but i think just applying the openmrs-2187-2 patch alone would be the safest bet. The openmrs-2187-3 adds a few more objects and we might have not patched it correctly or something. You can always enable other objects in the cache based on the template set by openmrs-2187-2
Hide
Wyclif Luyima added a comment - 2010-07-26 10:01:11 EDT

Looks like patch 'openmrs-2187-3.patch' can't be applied on top of 'openmrs-2187-2.patch', probably we will have to add the new objects afresh, I tried to run the Unit tests and this one fails 'shouldMarkCacheAsDirtyWhenChangesToRoleAreSaved()' with the error message 'Timeout trying to lock table "ROLE"'. Are the configurations in ehcache.xml have to do with this? However the other tests look good to me.

Show
Wyclif Luyima added a comment - 2010-07-26 10:01:11 EDT Looks like patch 'openmrs-2187-3.patch' can't be applied on top of 'openmrs-2187-2.patch', probably we will have to add the new objects afresh, I tried to run the Unit tests and this one fails 'shouldMarkCacheAsDirtyWhenChangesToRoleAreSaved()' with the error message 'Timeout trying to lock table "ROLE"'. Are the configurations in ehcache.xml have to do with this? However the other tests look good to me.
Hide
Zabil C.M added a comment - 2010-07-26 12:15:42 EDT

sorry about the wrong patching.

The ehcache setting should not have affected the testing because role is a read only cache, wonder how the lock happens. It does pass for us. Will try looking into it.

Show
Zabil C.M added a comment - 2010-07-26 12:15:42 EDT sorry about the wrong patching. The ehcache setting should not have affected the testing because role is a read only cache, wonder how the lock happens. It does pass for us. Will try looking into it.
Hide
Darius Jazayeri added a comment - 2010-07-26 13:43:03 EDT

Ben, you want to commit this before we've done any testing of whether or not it speeds things up?

Show
Darius Jazayeri added a comment - 2010-07-26 13:43:03 EDT Ben, you want to commit this before we've done any testing of whether or not it speeds things up?
Hide
Ben Wolfe added a comment - 2010-07-27 09:39:13 EDT

I would rather we know that there is at least some improvement. However, we also need to make sure that things are not broken with the caching in place...which will only come after people test it.

Zabil said that the tests exist, so its just a matter of finding the right patch that has tests and committing it with it, right?

Show
Ben Wolfe added a comment - 2010-07-27 09:39:13 EDT I would rather we know that there is at least some improvement. However, we also need to make sure that things are not broken with the caching in place...which will only come after people test it. Zabil said that the tests exist, so its just a matter of finding the right patch that has tests and committing it with it, right?
Hide
Zabil C.M added a comment - 2010-07-27 10:14:14 EDT

I looked at the patches and got the context of the patches being separate and different.

openmrs-2187-2.patch - has a unit test case with cache enabled on Role object and a unit test case as a proof of concept to verify it's working.

openmrs-2187-2.patch - Enables cache for Role, User, Concept, Locations. This is the working patch. It does not include a unit test case as any assertions based on count (on cache metadata) will fail when you run all the tests as they would be caching these objects.

Show
Zabil C.M added a comment - 2010-07-27 10:14:14 EDT I looked at the patches and got the context of the patches being separate and different. openmrs-2187-2.patch - has a unit test case with cache enabled on Role object and a unit test case as a proof of concept to verify it's working. openmrs-2187-2.patch - Enables cache for Role, User, Concept, Locations. This is the working patch. It does not include a unit test case as any assertions based on count (on cache metadata) will fail when you run all the tests as they would be caching these objects.
Hide
Zabil C.M added a comment - 2010-08-19 12:15:41 EDT

Changed patch file to match the new maven trunk layout

Show
Zabil C.M added a comment - 2010-08-19 12:15:41 EDT Changed patch file to match the new maven trunk layout
Hide
Nyoman Ribeka added a comment - 2010-08-19 16:42:47 EDT

patch 5 for ehcache

Show
Nyoman Ribeka added a comment - 2010-08-19 16:42:47 EDT patch 5 for ehcache
Hide
OpenMRS JIRA added a comment - 2010-08-19 23:34:48 EDT

I sent Win a patch which will clear the Hibernate level 2 cache between all
unit tests, which (mostly) fixes the problem of unit tests not working.

-Darius

On Thu, Aug 19, 2010 at 4:44 PM, Nyoman Ribeka (JIRA) <

Show
OpenMRS JIRA added a comment - 2010-08-19 23:34:48 EDT I sent Win a patch which will clear the Hibernate level 2 cache between all unit tests, which (mostly) fixes the problem of unit tests not working. -Darius On Thu, Aug 19, 2010 at 4:44 PM, Nyoman Ribeka (JIRA) <
Hide
Darius Jazayeri added a comment - 2010-08-20 14:27:40 EDT

This actually needs a post-commit review.

Show
Darius Jazayeri added a comment - 2010-08-20 14:27:40 EDT This actually needs a post-commit review.
Hide
Matthew Blanchette added a comment - 2010-08-24 10:41:30 EDT

Instead of ehcache version 1.6.2 referenced previously by this issue, version 2.2.0 is committed in the parent pom.xml for the logic module, TRUNK-1660

Show
Matthew Blanchette added a comment - 2010-08-24 10:41:30 EDT Instead of ehcache version 1.6.2 referenced previously by this issue, version 2.2.0 is committed in the parent pom.xml for the logic module, TRUNK-1660

People

Dates

  • Created:
    2010-03-30 20:13:35 EDT
    Updated:
    2010-08-24 10:41:30 EDT