| 1 | |
| 2 | ---- |
| 3 | '''WORK IN PROGRESS''' |
| 4 | |
| 5 | ---- |
| 6 | |
| 7 | |
| 8 | = Proposal number : Persistence framework = |
| 9 | |
| 10 | || '''Date''' || 2008/06/19 || |
| 11 | || '''Contact(s)''' || etj || |
| 12 | || '''Last edited''' || [[Timestamp]] || |
| 13 | || '''Status''' || draft || |
| 14 | || '''Assigned to release''' || to be determined || |
| 15 | || '''Resources''' || ??? Indicate if the required resources are available to complete the proposal || |
| 16 | |
| 17 | == Overview == |
| 18 | |
| 19 | Short description of the improvement proposal. |
| 20 | ... |
| 21 | |
| 22 | === Proposal Type === |
| 23 | * '''Type''': GUI Change, Core Change, Module Change, Guideline and project governance procedures, ... |
| 24 | * '''App''': !GeoNetwork |
| 25 | * '''Module''': eg. Harvester, Kernel, Data Manager, Metadata Import, Lucene Index, Search Interface ... |
| 26 | |
| 27 | === Links === |
| 28 | * '''Documents''': [http://www.hibernatespatial.org/ Hibernate spatial], [http://www.hibernate.org/ Hibernate] |
| 29 | * '''Email discussions''': [http://www.nabble.com/Re%3A-Agenda-for-GeoNetwork-hacking-in-Bolsena--release-planning--SEC%3DUNCLASSIFIED--td17770112.html#a17770112 GN-devel thread] |
| 30 | * '''Other wiki discussions''': |
| 31 | |
| 32 | === Voting History === |
| 33 | * Vote proposed by X on Y, result was +/-n (m non-voting members). |
| 34 | |
| 35 | ---- |
| 36 | |
| 37 | == Motivations == |
| 38 | The current configuration is .... A change to .... |
| 39 | |
| 40 | |
| 41 | As of version 2.2.0 the GeoNetwork application cannot be deployed to a |
| 42 | cluster. Existing deployments probably haven't gotten to the size where |
| 43 | clustering is necessary, but if this were to happen, deployment to a cluster |
| 44 | will fail. |
| 45 | |
| 46 | There are several reasons for this. Firstly, the application is storing |
| 47 | non-Serializable objects in the HttpSession. Not terribly difficult to fix |
| 48 | but is still a show stopper. |
| 49 | |
| 50 | Secondly, and this is the real killer, the current mechanism of generating |
| 51 | unique primary keys in jeeves.util.SerialFactory will fail in a cluster due |
| 52 | to duplicate primary keys. The SerialFactory caches the max primary key |
| 53 | values for each table. In a cluster multiple SerialFactory instances will |
| 54 | exist and are oblivious of each other. The first node to insert a record will |
| 55 | succeed, other nodes will fail. |
| 56 | |
| 57 | Geoscience Australia has deployed GeoNetwork using Oracle. The correct way to |
| 58 | deal with this in Oracle is to use a SEQUENCE. This requires generating |
| 59 | Oracle specific SQL, something the project has avoided doing. |
| 60 | |
| 61 | In my humble opinion, if GeoNetwork is to achieve its full potential it needs |
| 62 | to be scalable. Issues like in memory key generation prevent this from |
| 63 | occurring. The bottom line is you need to need to be DB independent but |
| 64 | scalable. The project should seriously consider the adoption of a persistence |
| 65 | framework such as Hibernate. |
| 66 | |
| 67 | == Proposal == |
| 68 | An in depth proposal can be found here : link |
| 69 | ... |
| 70 | |
| 71 | === Backwards Compatibility Issues === |
| 72 | |
| 73 | == Risks == |
| 74 | |
| 75 | == Participants == |
| 76 | * List of participants and role (if necessary) in current GIP |
| 77 | |