Boost Extensibility and Simplify Maintainability of Web Applications: Proposals for Google Web Toolkit Plug-in Architectures
Hello everyone I wrote a short article proposes a plug-in management architecture for GWT/AppEngine applications, see http://honeycrm.googlecode.com/files/BoostExtensibilityAndSimplifyMaintainabilityOfWebApplicationsProposalsForGoogleWebToolkitPlugInArchitectures.pdf. Now, I would like to invite the community to discuss my proposal. Thanks in advance to everyone for reading and discussing the proposal. Abstract: The extensibility of Google Web Toolkit (GWT) applications running on the Google App Engine platform is currently limited due to the absence of a plug-in infrastructure. Even though for desktop, server, and web applications, plug-ins have been existing for decades, they are not prevalent in GWT today. In this article, I outline the development environment restrictions that make it a challenge to provide dynamic plug-in loading support. I assume that the introduction of a plug-in architecture would dramatically enhance the extensibility and the maintainability of GWT applications. Therefore, this article proposes approaches for statically and dynamically loaded plug-ins for GWT applications. Kind regards Ingo -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. 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.
Re: Boost Extensibility and Simplify Maintainability of Web Applications: Proposals for Google Web Toolkit Plug-in Architectures
Hello everyone after discussing the topic with a college, I realized I have to explain the context of my proposal. There is no application independent mechanism in GWT to dynamically load extensions. Consequently, GWT applications either do not support it or implement plug-in loading on their own. I am convinced this has to be changed, mainly because of two obervations: The dramatically increasing popularity of both (1) AppStores, e.g. Apple App Store, Android Market, and (2) browser/web applications. To support AppStore concepts in web applications, the GWT/AppEngine community would profit from having an application independent framework for the management of application extensions, i.e. plug-ins, apps, or add-ons. Kind regards Ingo 2011/1/17 Ingo Jaeckel ingo.jaec...@googlemail.com: Hello everyone I wrote a short article proposes a plug-in management architecture for GWT/AppEngine applications, see http://honeycrm.googlecode.com/files/BoostExtensibilityAndSimplifyMaintainabilityOfWebApplicationsProposalsForGoogleWebToolkitPlugInArchitectures.pdf. Now, I would like to invite the community to discuss my proposal. Thanks in advance to everyone for reading and discussing the proposal. Abstract: The extensibility of Google Web Toolkit (GWT) applications running on the Google App Engine platform is currently limited due to the absence of a plug-in infrastructure. Even though for desktop, server, and web applications, plug-ins have been existing for decades, they are not prevalent in GWT today. In this article, I outline the development environment restrictions that make it a challenge to provide dynamic plug-in loading support. I assume that the introduction of a plug-in architecture would dramatically enhance the extensibility and the maintainability of GWT applications. Therefore, this article proposes approaches for statically and dynamically loaded plug-ins for GWT applications. Kind regards Ingo -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. 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.
Proposal of several plug-in architectures for GWT applications running on the Google App Engine platform
Hello everyone, this week I published an article entitled Proposals for Google Web Toolkit application plug-in architectures [1] on of my HoneyCRM project page [2]. The existence of plug-ins is not new for web applications in general. However, there are a number of technical issues making it difficult to develop plug-ins for GWT applications. In the article I propose solutions around these problems. The implementation of a plug-in system has been discussed a lot of times in the community. I am looking forward for your feedback and thoughts about my proposals. You can find more information as well as prototype implementations in the wiki [3]. Kind regards, Ingo [1] http://honeycrm.googlecode.com/files/ProposalsForGoogleWebToolkitApplicationPlugInArchitectures.pdf [2] http://code.google.com/p/honeycrm/ [3] http://code.google.com/p/honeycrm/w/list -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
Developing an AppStore for a GWT / App Engine application?
hello everyone, i want to build an app store for a GWT application. users should open the app store from within the application, browse through apps and install them like they are used to it from other app stores e.g. apple app store or android market. i outlined my ideas about it in the wiki of my project http://code.google.com/p/honeycrm/wiki/Plugins (including a more detailed description of the store, apps and sequence diagrams of the installation process). - has something like this been done before? - are there any best practices on this topic? - is it realistically i.e. a good idea to put source code into the plugin package (e.g. a zip file) and do the transformations (compilation of .java - .class using javac and .java - .js using GWTs compiler)? see http://code.google.com/p/honeycrm/wiki/Plugins#installation_of_plugins - can i do this within google app engine or do i have to use another servlet container e.g. for compilation. kind regards, ingo -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
How to run my DETAILED/PRETTY compiled GWT application locally / on app engine?
hello everyone, i want to profile the client side code of my gwt application honeycrm. a lot of times i read i just have to compile my application with pretty or detailed output style. then i should run and profile it e.g. with firebug. compiling my app with another output style is easy i.e. integrated into the eclipse gwt plugin. but evertime i run my application from eclipse it is recompiled with obfuscated output style. when i compile it using detailed and then deploy it to app engine, the gwt plugin in eclipse compiles it again and deploys the obfuscated js code. how can i avoid the recompilation to obfuscated code and instead run the js code compiled with detailed output style locally / when deployed to app engine? i found no documentation/tutorials about this yet.. thanks everyone in advance! kind regards, ingo -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
Screencast demonstrating how to profile a GWT application with JProfiler 6
hello everyone, some days ago i tried to profile my gwt application and started a discussion on the google app engine mailing list about the topic http://groups.google.com/group/google-appengine-java/browse_thread/thread/ec21bf87d57f8a82# just wanted to let you know that i created a 3 minute screencast showing how it works http://www.youtube.com/watch?v=zUJUSxXOOa4 sorry for the delay when my app runs locally being profiled :) i hope this screencast helps everyone who wants to increase his apps performance. kind regards, ingo -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
How to implement pagination using GWT 2.1 M2 SimplePager?
hello everyone, i am using the second milestone of gwt 2.1 mostly because of the new list view related classes (e.g. ListViewAdapter, SimplePager, PagingListView, SingleSelectionModel, etc.). based on these new classes i implemented my own ListView class. i retrieve a couple of dto objects from the server side and insert them into the list view using ListViewAdapter.setList and CellTable.setDataSize. i also found the following example that shows pagination should work like charm in gwt 2.1 m2: see http://gwt-bikeshed.appspot.com/Scaffold.html and source here http://google-web-toolkit.googlecode.com/svn/trunk/bikeshed/ unfortunately, in my own ListView class that is using all the new gwt classes the pagination does not work at all (see code here lines 293-324 of http://code.google.com/p/honeycrm/source/browse/branches/honeycrm_r134_gwt2.1m2/src/honeycrm/client/view/ListView.java). the values are not inserted into the listview and the item count (page count) is not properly updated (or set at all). everytime the pager receives a onRangeOrSizeChanged event I call refreshPage(newPage) if the page number really has changed. this does an RPC call retrieving the values from the server and inserting them by calling refreshListViewValues(). this is how it looks like: protected void initListView() { pager = new SimplePagerDto(ct = new CellTableDto(), TextLocation.CENTER) { @Override public void onRangeOrSizeChanged(final PagingListViewDto listView) { super.onRangeOrSizeChanged(listView); /** * only do something if items have already been loaded */ if (itemsHaveBeenLoadedOnce) { final int newPage = 1 + listView.getPageStart() / listView.getPageSize(); final boolean changedPage = newPage != currentPage; if (changedPage) { refreshPage(newPage); // this does a RPC calling refreshListViewValues on sucess } } }; }; } protected void refreshListViewValues(ListQueryResult result) { if (!itemsHaveBeenLoadedOnce) { initListView(); itemsHaveBeenLoadedOnce = true; } ArrayListDto values = new ArrayListDto(); for (final Dto dto : result.getResults()) { values.add(dto); } ct.setDataSize(result.getItemCount(), true); // ct is the cell table instance // give the ListViewAdapter our data lva.setList(values); lva.refresh(); } does anyone have a very simple working example explaining the principle? i do not really understand the bikeshed code. i learned the use of the new API from here http://stackoverflow.com/questions/2891803/how-to-use-gwt-2-1-data-presentation-widgets. currently i do not understand how to put all those new classes together in a small, concise and working example. kind regards, ingo -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
developers, developers, developers: who wants to participate in creating a new opensource crm/erp software?
hello guys, after customizing, migrating and suffering for challenging sugarcrm projects for more than two years now i am currently working on a replacement for our sugarcrm extension open quotes and contracts aka openqc. the project is called honeycrm http://code.google.com/p/honeycrm/. have a look at the current development snapshot on google app engine http://honeyyycrm.appspot.com/ even in this early stage the powerful tools and java enables us to let the project grow fast and keep the quality at a high level. more information about our vision can be found in our commandments http://code.google.com/p/honeycrm/wiki/10commandments we are looking for developers who want to participate and contribute to the open source (GPLv3) project: we need a lot more manpower for all sorts of things: reviewing code, doing a design, writing bullet proof test cases, implementing all sorts of features, keeping the ui responsive, etc. check out the source code via svn: svn checkout http://honeycrm.googlecode.com/svn/trunk/ honeycrm-read-only you can also become a project member very fast and get write access to the repository. i am looking forward for your feedback! kind regards, ingo -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
Re: Testing client code fails with JDOFatalUserException: Duplicate PMF name
hello acerezo, i do not think that i really solved the issue. nevertheless i coded around it a bit and now i can run server side AND client side code test cases without any problems. feel free to browse through the honeycrm sourcecode to see how i did it: http://code.google.com/p/honeycrm/source/browse/#svn/trunk/src/honeycrm/client/test important to note is the following: since the service (communication from client to server side) could not be constructed using gwt.create() when the client side tests are running, i decided to replace the service before running the tests: see http://code.google.com/p/honeycrm/source/browse/trunk/src/honeycrm/client/test/AbstractClientTest.java and http://code.google.com/p/honeycrm/source/browse/trunk/src/honeycrm/client/ServiceRegistry.java the result is not really satisfying since i cannot run the ui code test cases and use the correct service (that will be used in production mode). however, i can at least test all the other stuff and i can test the ui code with a dummy service if i want to. of course, i still want to have a real solution (instead of this dirty workaround) allowing me to test the client code properly. but since i found no solution yet and the google guys did not help me out either i had to go on with this workaround until some gwt guru comes and fixes my issue. by the way: i am looking for developers who are interested in participating in the honeycrm project. we welcome everyone who wants to contribute and give feedback to the project! kind regards, ingo 2010/6/28 Acerezo acerezoguil...@gmail.com: Hello I've the same problem Did you find the solution? Thanks. On Jun 7, 10:13 am, ingo ingo.jaec...@googlemail.com wrote: hello google, believe it or not but this seems to be a problem as huherto wrote on the mailing list in earlier this year. unfortunately, he did not receive an answer either: http://groups.google.com/group/google-web-toolkit/browse_thread/threa... would appreciate a quick response to this issue. kind regards, ingo On 3 Jun., 11:42, ingo ingo.jaec...@googlemail.com wrote: as a workaround i removed the jdoconfig.xml file from the src/WEB-INF directory and from the war/WEB-INF/classes/META-INF directory. then i instantiated the persistence manager factory by using a map like the following: final MapString, String map = new HashMapString, String(); map.put(javax.jdo.PersistenceManagerFactoryClass, org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory); map.put(javax.jdo.option.ConnectionURL, appengine); map.put(javax.jdo.option.NontransactionalRead, true); map.put(javax.jdo.option.NontransactionalWrite, true); map.put(javax.jdo.option.RetainValues, true); map.put(datanucleus.appengine.autoCreateDatastoreTxns, true); pmf= JDOHelper.getPersistenceManagerFactory(map); this somehow lets the test run successfully but throws the following exception nevertheless: [WARN] StandardContext[]Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract crm.client.dto.AbstractDto crm.client.CommonService.get(int,long)' threw an unexpected exception: java.lang.NullPointerException:NoAPIenvironmentisregisteredfor thisthread. at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java: 378) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: 581) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java: 188) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java: 224) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java: 62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at com.google.gwt.dev.shell.GWTShellServlet.service(GWTShellServlet.java: 288) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java: 104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java: 198) at
Re: Testing client code fails with JDOFatalUserException: Duplicate PMF name
hello andrés, great to hear that you checked out the sourcecode. aaah and thank you very much for the hint! i just added the missing jar file to the repository. kind regards, ingo 2010/6/29 Andrés Cerezo acerezoguil...@gmail.com: Hello, I'have a problem with import com.google.gwt.visualization.*; ¿perhaps the jar is not in the svn?. Thanks. 2010/6/29 Andrés Cerezo acerezoguil...@gmail.com ok, I'll check out the source code and I'll tell you. Thanks. 2010/6/29 Ingo Jaeckel ingo.jaec...@googlemail.com hello acerezo, i do not think that i really solved the issue. nevertheless i coded around it a bit and now i can run server side AND client side code test cases without any problems. feel free to browse through the honeycrm sourcecode to see how i did it: http://code.google.com/p/honeycrm/source/browse/#svn/trunk/src/honeycrm/client/test important to note is the following: since the service (communication from client to server side) could not be constructed using gwt.create() when the client side tests are running, i decided to replace the service before running the tests: see http://code.google.com/p/honeycrm/source/browse/trunk/src/honeycrm/client/test/AbstractClientTest.java and http://code.google.com/p/honeycrm/source/browse/trunk/src/honeycrm/client/ServiceRegistry.java the result is not really satisfying since i cannot run the ui code test cases and use the correct service (that will be used in production mode). however, i can at least test all the other stuff and i can test the ui code with a dummy service if i want to. of course, i still want to have a real solution (instead of this dirty workaround) allowing me to test the client code properly. but since i found no solution yet and the google guys did not help me out either i had to go on with this workaround until some gwt guru comes and fixes my issue. by the way: i am looking for developers who are interested in participating in the honeycrm project. we welcome everyone who wants to contribute and give feedback to the project! kind regards, ingo 2010/6/28 Acerezo acerezoguil...@gmail.com: Hello I've the same problem Did you find the solution? Thanks. On Jun 7, 10:13 am, ingo ingo.jaec...@googlemail.com wrote: hello google, believe it or not but this seems to be a problem as huherto wrote on the mailing list in earlier this year. unfortunately, he did not receive an answer either: http://groups.google.com/group/google-web-toolkit/browse_thread/threa... would appreciate a quick response to this issue. kind regards, ingo On 3 Jun., 11:42, ingo ingo.jaec...@googlemail.com wrote: as a workaround i removed the jdoconfig.xml file from the src/WEB-INF directory and from the war/WEB-INF/classes/META-INF directory. then i instantiated the persistence manager factory by using a map like the following: final MapString, String map = new HashMapString, String(); map.put(javax.jdo.PersistenceManagerFactoryClass, org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory); map.put(javax.jdo.option.ConnectionURL, appengine); map.put(javax.jdo.option.NontransactionalRead, true); map.put(javax.jdo.option.NontransactionalWrite, true); map.put(javax.jdo.option.RetainValues, true); map.put(datanucleus.appengine.autoCreateDatastoreTxns, true); pmf= JDOHelper.getPersistenceManagerFactory(map); this somehow lets the test run successfully but throws the following exception nevertheless: [WARN] StandardContext[]Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract crm.client.dto.AbstractDto crm.client.CommonService.get(int,long)' threw an unexpected exception: java.lang.NullPointerException:NoAPIenvironmentisregisteredfor thisthread. at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java: 378) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: 581) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java: 188) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java: 224) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java: 62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at com.google.gwt.dev.shell.GWTShellServlet.service(GWTShellServlet.java: 288) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806