views:

82

answers:

1

I am using the Google plug-in for Eclipse and have the following problem:

The project (A) consists of a GWT based GUI talking to a server running on GAE and using JPA. Additionally there is a project (B) to migrate the legacy data to the new datastore. Since these both project use a common data model, I have extracted a set of interfaces and enums into a separate project (C) and set the other two projects dependencies on it.

The Java App project (B) seems to work, but the GWT/GAE project (A) only works if I manually copy the classes into the WEB-INF/classes directory. Obviously this is only working when using the housted mode.

Anybody knows how to configure such a multi project setup in Eclipse?

Also, I am not sure if the multi project layout is the best solution. The set of common model objects is used in all 3 areas:

  • user client (GWT project compiling standard folders client and shared)
  • server side (providing services for GWT-RPC, uploading and different feeds)
  • migration application (posting the legacy data to the upload servlet)

What are the architectural options to keep the amount of duplicated classes on minimum?

A: 

For your GAE project to work using another java project, first you have to add the second one to the first's one build path. This solves only one part of the problem, allowing you to reference the classes your need in development.

The other problem is that once you launch your GAE project in development mode, it will fail to find the other project's classes. What you need to do is export the project as a jar (the name doesn't matter, and the classes can be compiled or not) , and put ir in the WEB-INF/lib folder. You don't need to add the jar to the build path, you could keep using the project reference, but remember that everytime you make a change in the other project you need to export it and replace the jar with the new one. I haven't found a better way to doing it, but at least if you use this folder intead of WEB-INF/classes it will not be deleted by GAE.

As for the architectural options, I would put both the client and the server in one project, which would ease development. Then you could reference that project from your migration app. I think that way you will make easier to maintain your main project without affecting the other too much (I suppose the migration one will have a much shorter life span, so it isn't as important as the other in the long term).

NachoCual
the client and server are in one project and referencing it in the migration project brings problems as the GAE JPA provider from DataNucleus starts interfering with the EclipseLink one (used in the migration project).
kodra