I have  a question to the people who are using multi-module maven projects 
instead of one (I am currently developing a Spring/GWT/RequestFactory 
project as one big maven projects). 
I do much of the debugging in eclipse by starting a WTP jetty instance and 
then starting the GWT development mode. By this I can debug both backend 
and frontend and whenever I change something in the client code it will 
work without me restarting development mode and when i change something on 
the backend WTP should re-publish it and it should also work fine (although 
some stuff doesn't). 

I am using eclipse m2eclipse for dependency management. ( I don't use mvn 
jetty:run or so but WTP) . 
Does the same workflow also work when I split up the one maven module into 
multiple? (shared, client, server) 
I guess it should as the m2 will probably make sure that everything is in 
the right place. 
But maybe somebody has already experience with debugging a multi maven 
module in eclipse and can give some feedback. 



On Wednesday, May 9, 2012 3:15:29 PM UTC+2, Christien Lomax wrote:
>
> Hi All,
>
> We could use a bit of insight and help if anyone has a moment.
>
> We currently have a project that is quite huge (thousands of classes) 
> including the GWT client, a spring service layer and 
> hibernate persistence layer.
>
> We are trying to split up the project into more manageable pieces 
> including:
>
>    - client project (contains our GWT widgets, RequestFactories, etc, 
>    Spring servlets)
>    - service project (contains the spring service layer, web services 
>    (REST, SOAP))
>    - persistence project (contains the domain beans - hibernate mapped 
>    objects, persistence code, etc)
>    - shared project (classes that can be used on both the client (gwt 
>    compiled) and server side.
>
> Everything compiles and works (unit tests, etc) until we hit GWT's 
> compile.  At this point, we get complaints about GWT not being able to see 
> items in the service layer (which makes sense, it is trying 
> to compile references to the beans, services, etc).
> We've tried a number of approaches, including using @ServiceName instead 
> of @Service and using the <source .../> specifications on the modules. 
>  Right now we a few errors we are unable to resolve:
>
> 1 - we get this one for every Adapte:)
>       [ERROR] Errors in 'file:/C:/workspace/client/src/main/java/com/
> mycompany/adapter/alert/AlertBeanGwtAdapter.java'
>          [ERROR] Line 14: No source code is available for type 
> com.mycompany.service.alerts.IAlertService; did you forget to inherit a 
> required module?
>
> 2 - if we omit the "-strict" parameter when compiling GWT, we get this:
>      [ERROR] An internal compiler exception occurred
>      com.google.gwt.dev.jjs.InternalCompilerException: Failed to get JNode
>      ...
>      [ERROR] <no source info>: public interface com.mycompany
> .service.alerts.IAlertService
>      ...
>      org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding
>      [ERROR] at AlertBeanGwtAdapter.java(14): private IAlertService 
> getService() {
>            return (IAlertService) 
> EcmLocator.getApplicationContext().getBean(IAlertService.TYPE);
>      }
>      org.eclipse.jdt.internal.compiler.ast.MethodDeclaration
>
> Can anyone shed any light on what we may be doing wrong?  When it is all 
> in one project, everything works fine, but splitting it into multiple 
> projects (that are references via maven) it fails.
>
> Example source (some code is omitted):
>
> *Client Layer:*
>
> *...client.alerts.request.**IAlertRequest.java*
> @ServiceName(value = "com.mycompany.service.alerts.IAlertService.class", 
> locator = "SpringServiceLocator.class")
> public interface IAlertRequest extends RequestContext
> {
> Request<Long> countAlerts(String eventClass, Date dateLimit);
> Request<List<IAlertTypeProxy>> listAlertTypes();
> Request<List<IAlertBeanProxy>> listUnviewedAlerts();
> }
>
> *...web.**SpringServiceLocator.java**
> *
> public class SpringServiceLocator implements ServiceLocator
> {
>  public Object getInstance(Class<?> clazz)
> {
> ApplicationContext context = 
> WebApplicationContextUtils.getWebApplicationContext(RequestFactoryServlet
> .getThreadLocalServletContext());
> return context.getBean(clazz);
> }
> }
>
> *OurProject.gwt.xml*
> <?xml version="1.0" encoding="UTF-8"?>
> <module rename-to='Oris4'>
>
> <inherits name='com.google.gwt.editor.Editor' />
> <inherits name='com.google.gwt.json.JSON' />
> <inherits name='com.google.gwt.logging.Logging' />
> <inherits name='com.google.gwt.resources.Resources' />
> <inherits name='com.google.web.bindery.requestfactory.RequestFactory' />
> <inherits name='com.google.gwt.user.User' />
> <inherits name="com.google.gwt.i18n.I18N" />
>
> <inherits name='com.mycompany.theme.clean.Clean' />
>  <inherits name='com.mycompany.Persistence' />
>
> <entry-point class='com.mycompany.client.OurEntryPoint' />
>
> <set-configuration-property name="UiBinder.useSafeHtmlTemplates" 
> value="true" />
>
> <source path='client' />
> <source path='web' />
> <source path='adapter' />
> </module>
>
> *Service Layer:*
>
> *...services.alerts.**IAlertService.java*
> public interface IAlertService
> {
> String TYPE = "AlertService";
> Long countAlerts(String eventClass, Date dateLimit);
> List<AlertType> listAlertTypes();
> List<AlertBean> listUnviewedAlerts();
> }
>
> *...services.alerts.AlertService.java*
> @Service("AlertService")
> @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
> public class AlertService extends EcmService implements IAlertService
> {
> public Long countAlerts(String eventClass, Date dateLimit) {...};
> public List<AlertType> listAlertTypes() {...};
> public List<AlertBean> listUnviewedAlerts() {...}; 
> }
>
> *Persistence Layer:*
>
> *...domain.alerts.AlertBean.java*
> @Entity
> @Immutable
> @Table(name = "alertdisplayview")
> public class AlertBean implements Serializable
> {
>  ...
> }
>
> *...domain.alerts.* *AlertType.java*
> @Entity
> @Immutable
> @Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
> @Table(name = "alerttype")
> @NamedQueries({
> @NamedQuery(name = "alertType.findByName", query = "select alt from 
> AlertType alt where alt.name =:name or alt.internalName =:name")
> })
> public class AlertType implements Serializable
> {
>  ...
> }
>
> *Persistence.gwt.xml*
> <?xml version="1.0" encoding="UTF-8"?>
> <module rename-to='Persistence'>
> <source path="domain" />
> </module>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/bZ_Ytr-pAfYJ.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to