Re: Gwt 2.1 Activities + Code splitting + Gin
On 8 nov, 21:42, PhilBeaudoin philippe.beaud...@gmail.com wrote: Thanks Thomas. So the way I understand it, the ActivityManager/ActivityMapper are GWT 2.1 equivalent's of GWTP's proxy for the purpose of navigation. It's just that in GWTP you don't need to create or modify a separate class, all is done within your presenter. In my apps, I often have some presenters that need to be awoken when a given message transit on the bus. Say, for example, a ChatBoxPresenter would like to wake up when a NewChatMessageEvent transits on the bus. In GWTP it's simply a matter of annotating a method with @ProxyEvent in the presenter -- ChatBoxPresenter is still lazily instantiated and code split. How would you handle such a case in GWT 2.1 short of instantiating the ChatBoxPresenter at app start? As I understand it, your ChatBoxPresenter isn't related to a place, i.e. it's awoken based on a business event, not a navigation event; and in other words, it's not an Activity: case made. Activities (ActivityManager) is limited in scope to reacting to place changes and navigation (not that you couldn't use the Activity contract in other scenarios, such as your chat box, but the ActivityManager wouldn't be the right tool for the job, you'd have to find/write another activity manager for your different use case). In other words: GWT 2.1 Activities won't replace GWTP as a whole (and I believe, as I already said in the past, that it's not its goal either). -- 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: Gwt 2.1 Activities + Code splitting + Gin
On 8 nov, 04:21, PhilBeaudoin philippe.beaud...@gmail.com wrote: Regarding GWTP's uses of GWT generators, I haven't looked at the mechanism GWT 2.1 uses to decouple event plumbing from presenter instances. In my experience, this is required to allow lazy instantiation and code splitting of presenters. I remember reading T. Broyer saying he didn't care too much about this since his presenters were small but, in my experience, presenters can sometime include quite a bit of logic. In my opinion, being able to lazily instantiate them and wake them up on specific events is necessary for scalability. I think the overall idea of activities is that they are short-lived instances, so they're effectively lazily created (actually, a new instance is created each time one is needed) and they don't need to be awoken because if they're not currently in use they're already dead and garbage collected. The ActivityManager (actually its associated ActivityMapper) will decide whether a particular activity is needed (and then instantiate it, possibly going through a GWT.runAsync for code splitting); the activity will listen to events its interested in *during its lifetime* (e.g. whether some object has changed or has been added or deleted, so it can update its view); but when it's done (stopped or cancelled), it's simply thrown away (the event bus passed to the start() method is a ResettableEventBus so all handlers have been automatically unregistered for you, which as a side effect allows the activity to be garbage collected). This is the (AIUI) intended use, but nothing forces you to write such short-lived instances: you can very well use singletons, but then you'll have the additional task of maintaining state between runs (start/stop or start/cancel), in which case your activity can listen to events from the event bus after being stopped/cancelled (just use the real event bus instead of the ResettableEventBus passed to the start() method); but it won't ask to be revealed: navigation is handled at another layer, triggered on the PlaceController and handled by ActivityManagers. -- 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: Gwt 2.1 Activities + Code splitting + Gin
Hi Phillipe, Also, I think it's a bit unfair to call GWTP's code generation magic when GWT relies on it for so many different things... But if you really want to write proxys yourself, GWTP's allows it. Yes, I agree that I was a bit unfair with GWTP. In my opinion, it would be a geater tool (for me) if the code in front of generators were more concise (just annotation, no empty interfaces to add), and maybe more optional. bindPresenter() needs view, proxyplace, presenter. But if I prefer to not use ProxyPlace as you suggest, I can't. Out of curiosity, which version of GWTP did you try? 0.4. But I might not have been in the depth of the framework (Just coded 4 main pages of my app) until I get blocked by the Top Div/RootPresenter problem that I explained before. Cheers, Nicolas. -- 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: Gwt 2.1 Activities + Code splitting + Gin
Thanks Thomas. So the way I understand it, the ActivityManager/ActivityMapper are GWT 2.1 equivalent's of GWTP's proxy for the purpose of navigation. It's just that in GWTP you don't need to create or modify a separate class, all is done within your presenter. In my apps, I often have some presenters that need to be awoken when a given message transit on the bus. Say, for example, a ChatBoxPresenter would like to wake up when a NewChatMessageEvent transits on the bus. In GWTP it's simply a matter of annotating a method with @ProxyEvent in the presenter -- ChatBoxPresenter is still lazily instantiated and code split. How would you handle such a case in GWT 2.1 short of instantiating the ChatBoxPresenter at app start? In the GWTP samples we use singleton presenters, which makes it easy to retain state during the app lifetime, a frequent use case. Also, it cuts down on the cost of instantiating and garbage collecting the presenters all the time. Finally, singleton presenters ensure that you don't mistakenly attach two instances of the presenter to the same singleton view. However, nothing prevents you from using non-singleton presenters. GWTP presenters have the equivalent of a resettable event bus, and every handlers are unregistered upon an unbind(). In fact, GWTP offers reusable components separating logic from (non-singleton) views -- which we call PresenterWidget. These are quickly becoming one of the most popular feature of the framework and I don't find their equivalent in GWT. @Nicolas, Re: the need for a proxy interface I believe it is a limitation of GWT generators that they have to be attached to classes/interfaces. If anybody has a better idea I'm a buyer. But isn't it better than manually writing/editing ActivityManagers? Cheers, Philippe On Nov 8, 1:35 am, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Hi Phillipe, Also, I think it's a bit unfair to call GWTP's code generation magic when GWT relies on it for so many different things... But if you really want to write proxys yourself, GWTP's allows it. Yes, I agree that I was a bit unfair with GWTP. In my opinion, it would be a geater tool (for me) if the code in front of generators were more concise (just annotation, no empty interfaces to add), and maybe more optional. bindPresenter() needs view, proxyplace, presenter. But if I prefer to not use ProxyPlace as you suggest, I can't. Out of curiosity, which version of GWTP did you try? 0.4. But I might not have been in the depth of the framework (Just coded 4 main pages of my app) until I get blocked by the Top Div/RootPresenter problem that I explained before. Cheers, Nicolas. -- 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: Gwt 2.1 Activities + Code splitting + Gin
@Nicolas, Re: the need for a proxy interface I believe it is a limitation of GWT generators that they have to be attached to classes/interfaces. If anybody has a better idea I'm a buyer. But isn't it better than manually writing/editing ActivityManagers? Is it not possible to set an annotation above the presenter ? if presenters implements an interface (Presenter) it should be possible to handle it with a generator and write extra code, no ? (Well I suppose, I never tried to write a real generator). However, this generator might be more difficult to write since it has to mix generated code with user code. It might look a but curious, for the hand written part. But to me, it looks ugly to have empty inner interfaces in my code. Hand coded place are a bit longer to write (10 seconds), but at least, it is a classic style :) However, I am using uiBinder and the empty UiBinder interface is ugly too... And I can't do anything against it :) (But I am still looking for a way of remove it. Maybe that gin will help me). I think that my vision about code style is very personal and that lots of people prefer to use the annotated inner interface, so do not worry about my comments Phillipe :) Cheers, Nicolas Cheers, Philippe On Nov 8, 1:35 am, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Hi Phillipe, Also, I think it's a bit unfair to call GWTP's code generation magic when GWT relies on it for so many different things... But if you really want to write proxys yourself, GWTP's allows it. Yes, I agree that I was a bit unfair with GWTP. In my opinion, it would be a geater tool (for me) if the code in front of generators were more concise (just annotation, no empty interfaces to add), and maybe more optional. bindPresenter() needs view, proxyplace, presenter. But if I prefer to not use ProxyPlace as you suggest, I can't. Out of curiosity, which version of GWTP did you try? 0.4. But I might not have been in the depth of the framework (Just coded 4 main pages of my app) until I get blocked by the Top Div/RootPresenter problem that I explained before. Cheers, Nicolas. -- 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.comgoogle-web-toolkit%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. -- 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: Gwt 2.1 Activities + Code splitting + Gin
Hi Phillipe. i am going to try ProviderBundle. I tried to migrate my application to gwtp just before the 2.1 release but I reverted my changes for 3 reasons : 1 - I prefer to not depend too much on an external framework. I love all new things that come in every new release of gwt and I am afraid that frameworks become unsupported or do not follow new features. I had the exemple of a friend who has prefered to use GXT instead of Pure GWT, and today, he cannot use UiBinder or the new Handler mechanism. He is still using the old listener way. Today, GWT has released the new Activity ~ MVP part, with their own Place system. At the moment, MVP of GWT seems less powerfull than the GWTP's one, but the syntax is different. And tomorrow, maybe that directions will be more different. So I prefer not taking the risk to have a situation like with GXT. 2 - Declaration of Presenter / View looks too much complicated to me (but it is a pure subjective vision :) ). All the generation of ProxyPlace are too magical for me or not enough... By instance, The automatic generation of a Place is something interesting, but in the same time, it is too complicated to generate. I do not like the fact to have to declare an interface which extends ProxyPlace, and references it in a type litteral. I would have prefered to just have something like : @Place(login); @RunAsync public class LoginActivity implement GwtpActivityLoginActivity.Presenter public inteface Presenter { public void onLogin(); ... } or something similar. Today I prefer to stay on a manual code for this part instead of a half generation that is (in my opinion) too complicated to declare. Finally (for the code style part), I did not like the fact that we have to use a local Widget variable in View and returns it with a asWidget() method for UiBinder Views. Today with GWT 2.1, all widgets implements IsWidget and provides a asWidget(). But since we have to store a local instance of Widget inside of view for UiBinder, it cannot be done automatically, we have to override it. However, I understand that IsWidget was not ready when you first implemented it. But today, it does not solve the problem of the local Widget variable. 3 - My application has two top div. One called root for the main part of my application, and one called overlay for all elements that comes like a filter over my root elements (to display overlay help, ...). They have both some css declaration on them. I did not find any way to reuse this system with GWTP. GWTP come with a RootPresenter and I wanted to use a second RootPresenter plugged on overlay div but it is not possible. ActivityManager are more flexible for this, they have a setDisplay() method to setup the top element to use. Well, Phillipe, all those things are just my personal feelings for my specifical needs. I think that GWTP is a great framework for a lot of people. Unfortunatly, in my case, I had to fight against it (maybe that it was a design problem, but I am not sure), and there was all the more subjective aspects (abouts framework overlay and code style) that made me go away. In any case, Phillipe and Christian, thanks for your great work . I am going to try ProviderBundle, maybe that I will be more comfortable with it :) Nicolas. 2010/11/7 PhilBeaudoin philippe.beaud...@gmail.com Hi Nicolas, If you start using AsyncProvider, you might be interested in GWTP's ProviderBundle at some point. The problem of AsyncProvider is that it may introduce too many split points, and you will often want to do some manual optimization and group a few things together behind the same split point. ProviderBundle makes that really easy to do. ProviderBundle is totally usable without the rest of GWTP. (Although I'd love to hear your reason for not using it. ;)) Cheers, Philippe On Nov 6, 4:40 pm, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Thanks Thomas, I implemented something similar to what you said (I think) and it works fine ! All my activities are code splitted automatically now. I used the AsyncProviderT. I used a gin version compiled by gwtp team that include the AsyncProxy (althouth that I do not use gwtp for severals resons, thanks to gwtp dev for this :) ) . @Ashton, you can get it from here : http://code.google.com/p/gwt-platform/http://code.google.com/p/gwt-platform/downloads/detail?name=gin-r137.jar The usage of AsyncProviderT is very simple. It's exactly like a normal ProviderT instead that you have to give an AsyncCallback to the get() method. example : @Inject ProviderMyClass myProvider; @Inject AsyncProviderMyClass myAsyncProvider; private MyClass instance1; private MyClass instance2; public void myMethod() { // To get an instance without code splitting instance1 = myProvider.get(); // To get an instance with code splitting myAsyncProvider.get(new AsyncCallbackMyClass() { @Override public void onSuccess(MyClass result) {
Re: Gwt 2.1 Activities + Code splitting + Gin
I just want to answer some of your concern :D 1- We want to introduce and follow every release of Gwt. We already introduced Gwt's evenbus instead of using ours and there's more changes on the way. That's a long term engagement, even our contributor guideline follows gwt. 2- You don't like the proxy's magic ? You can create them :D Proxy are used for lasy instantiation of presenters and to facilitate code splitting while keeping everything decoupled. 3- There's some way to do that with gwtp (PresenterWidget, proxy events). But there's no reason to only use Gwtp, even though we encourage it. I think that activity manager can become handy for cases that we don't fully support yet. Cheers, On Sun, Nov 7, 2010 at 6:49 AM, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Hi Phillipe. i am going to try ProviderBundle. I tried to migrate my application to gwtp just before the 2.1 release but I reverted my changes for 3 reasons : 1 - I prefer to not depend too much on an external framework. I love all new things that come in every new release of gwt and I am afraid that frameworks become unsupported or do not follow new features. I had the exemple of a friend who has prefered to use GXT instead of Pure GWT, and today, he cannot use UiBinder or the new Handler mechanism. He is still using the old listener way. Today, GWT has released the new Activity ~ MVP part, with their own Place system. At the moment, MVP of GWT seems less powerfull than the GWTP's one, but the syntax is different. And tomorrow, maybe that directions will be more different. So I prefer not taking the risk to have a situation like with GXT. 2 - Declaration of Presenter / View looks too much complicated to me (but it is a pure subjective vision :) ). All the generation of ProxyPlace are too magical for me or not enough... By instance, The automatic generation of a Place is something interesting, but in the same time, it is too complicated to generate. I do not like the fact to have to declare an interface which extends ProxyPlace, and references it in a type litteral. I would have prefered to just have something like : @Place(login); @RunAsync public class LoginActivity implement GwtpActivityLoginActivity.Presenter public inteface Presenter { public void onLogin(); ... } or something similar. Today I prefer to stay on a manual code for this part instead of a half generation that is (in my opinion) too complicated to declare. Finally (for the code style part), I did not like the fact that we have to use a local Widget variable in View and returns it with a asWidget() method for UiBinder Views. Today with GWT 2.1, all widgets implements IsWidget and provides a asWidget(). But since we have to store a local instance of Widget inside of view for UiBinder, it cannot be done automatically, we have to override it. However, I understand that IsWidget was not ready when you first implemented it. But today, it does not solve the problem of the local Widget variable. 3 - My application has two top div. One called root for the main part of my application, and one called overlay for all elements that comes like a filter over my root elements (to display overlay help, ...). They have both some css declaration on them. I did not find any way to reuse this system with GWTP. GWTP come with a RootPresenter and I wanted to use a second RootPresenter plugged on overlay div but it is not possible. ActivityManager are more flexible for this, they have a setDisplay() method to setup the top element to use. Well, Phillipe, all those things are just my personal feelings for my specifical needs. I think that GWTP is a great framework for a lot of people. Unfortunatly, in my case, I had to fight against it (maybe that it was a design problem, but I am not sure), and there was all the more subjective aspects (abouts framework overlay and code style) that made me go away. In any case, Phillipe and Christian, thanks for your great work . I am going to try ProviderBundle, maybe that I will be more comfortable with it :) Nicolas. 2010/11/7 PhilBeaudoin philippe.beaud...@gmail.com Hi Nicolas, If you start using AsyncProvider, you might be interested in GWTP's ProviderBundle at some point. The problem of AsyncProvider is that it may introduce too many split points, and you will often want to do some manual optimization and group a few things together behind the same split point. ProviderBundle makes that really easy to do. ProviderBundle is totally usable without the rest of GWTP. (Although I'd love to hear your reason for not using it. ;)) Cheers, Philippe On Nov 6, 4:40 pm, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Thanks Thomas, I implemented something similar to what you said (I think) and it works fine ! All my activities are code splitted automatically now. I used the AsyncProviderT. I used a gin version compiled by gwtp team that include the
Re: Gwt 2.1 Activities + Code splitting + Gin
More info on my number 3 comment. I just saw a comment from Philippe saying that mixing activity and place is discouraged for the moment. Comming from what I say in one, I think this comment will be more appropriate for future release :D Cheers, On Sun, Nov 7, 2010 at 7:42 AM, Christian Goudreau goudreau.christ...@gmail.com wrote: I just want to answer some of your concern :D 1- We want to introduce and follow every release of Gwt. We already introduced Gwt's evenbus instead of using ours and there's more changes on the way. That's a long term engagement, even our contributor guideline follows gwt. 2- You don't like the proxy's magic ? You can create them :D Proxy are used for lasy instantiation of presenters and to facilitate code splitting while keeping everything decoupled. 3- There's some way to do that with gwtp (PresenterWidget, proxy events). But there's no reason to only use Gwtp, even though we encourage it. I think that activity manager can become handy for cases that we don't fully support yet. Cheers, On Sun, Nov 7, 2010 at 6:49 AM, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Hi Phillipe. i am going to try ProviderBundle. I tried to migrate my application to gwtp just before the 2.1 release but I reverted my changes for 3 reasons : 1 - I prefer to not depend too much on an external framework. I love all new things that come in every new release of gwt and I am afraid that frameworks become unsupported or do not follow new features. I had the exemple of a friend who has prefered to use GXT instead of Pure GWT, and today, he cannot use UiBinder or the new Handler mechanism. He is still using the old listener way. Today, GWT has released the new Activity ~ MVP part, with their own Place system. At the moment, MVP of GWT seems less powerfull than the GWTP's one, but the syntax is different. And tomorrow, maybe that directions will be more different. So I prefer not taking the risk to have a situation like with GXT. 2 - Declaration of Presenter / View looks too much complicated to me (but it is a pure subjective vision :) ). All the generation of ProxyPlace are too magical for me or not enough... By instance, The automatic generation of a Place is something interesting, but in the same time, it is too complicated to generate. I do not like the fact to have to declare an interface which extends ProxyPlace, and references it in a type litteral. I would have prefered to just have something like : @Place(login); @RunAsync public class LoginActivity implement GwtpActivityLoginActivity.Presenter public inteface Presenter { public void onLogin(); ... } or something similar. Today I prefer to stay on a manual code for this part instead of a half generation that is (in my opinion) too complicated to declare. Finally (for the code style part), I did not like the fact that we have to use a local Widget variable in View and returns it with a asWidget() method for UiBinder Views. Today with GWT 2.1, all widgets implements IsWidget and provides a asWidget(). But since we have to store a local instance of Widget inside of view for UiBinder, it cannot be done automatically, we have to override it. However, I understand that IsWidget was not ready when you first implemented it. But today, it does not solve the problem of the local Widget variable. 3 - My application has two top div. One called root for the main part of my application, and one called overlay for all elements that comes like a filter over my root elements (to display overlay help, ...). They have both some css declaration on them. I did not find any way to reuse this system with GWTP. GWTP come with a RootPresenter and I wanted to use a second RootPresenter plugged on overlay div but it is not possible. ActivityManager are more flexible for this, they have a setDisplay() method to setup the top element to use. Well, Phillipe, all those things are just my personal feelings for my specifical needs. I think that GWTP is a great framework for a lot of people. Unfortunatly, in my case, I had to fight against it (maybe that it was a design problem, but I am not sure), and there was all the more subjective aspects (abouts framework overlay and code style) that made me go away. In any case, Phillipe and Christian, thanks for your great work . I am going to try ProviderBundle, maybe that I will be more comfortable with it :) Nicolas. 2010/11/7 PhilBeaudoin philippe.beaud...@gmail.com Hi Nicolas, If you start using AsyncProvider, you might be interested in GWTP's ProviderBundle at some point. The problem of AsyncProvider is that it may introduce too many split points, and you will often want to do some manual optimization and group a few things together behind the same split point. ProviderBundle makes that really easy to do. ProviderBundle is totally usable without the rest of GWTP. (Although I'd love to hear your reason for not using
Re: Gwt 2.1 Activities + Code splitting + Gin
Thanks Nicolas for your answer. Most of the feedback we get from GWTP users is very positive, but it's the opinion of people who decided not to use it that will help us improve it! Christian summarized it well when he said we want to keep following GWT. We will support the IsWidget interface soon and remove the need for view to support custom interfaces, so you will be able to use any GWT widget (or your own Composite) as a view. Regarding GWTP's uses of GWT generators, I haven't looked at the mechanism GWT 2.1 uses to decouple event plumbing from presenter instances. In my experience, this is required to allow lazy instantiation and code splitting of presenters. I remember reading T. Broyer saying he didn't care too much about this since his presenters were small but, in my experience, presenters can sometime include quite a bit of logic. In my opinion, being able to lazily instantiate them and wake them up on specific events is necessary for scalability. In GWTP this is done through proxys, in MVP4G it is done by defining events within the global event bus, and I still have to look into the precise way GWT 2.1 solves this problem. Also, I think it's a bit unfair to call GWTP's code generation magic when GWT relies on it for so many different things... But if you really want to write proxys yourself, GWTP's allows it. Out of curiosity, which version of GWTP did you try? Cheers, Philippe On Nov 7, 5:46 am, Christian Goudreau goudreau.christ...@gmail.com wrote: More info on my number 3 comment. I just saw a comment from Philippe saying that mixing activity and place is discouraged for the moment. Comming from what I say in one, I think this comment will be more appropriate for future release :D Cheers, On Sun, Nov 7, 2010 at 7:42 AM, Christian Goudreau goudreau.christ...@gmail.com wrote: I just want to answer some of your concern :D 1- We want to introduce and follow every release of Gwt. We already introduced Gwt's evenbus instead of using ours and there's more changes on the way. That's a long term engagement, even our contributor guideline follows gwt. 2- You don't like the proxy's magic ? You can create them :D Proxy are used for lasy instantiation of presenters and to facilitate code splitting while keeping everything decoupled. 3- There's some way to do that with gwtp (PresenterWidget, proxy events). But there's no reason to only use Gwtp, even though we encourage it. I think that activity manager can become handy for cases that we don't fully support yet. Cheers, On Sun, Nov 7, 2010 at 6:49 AM, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Hi Phillipe. i am going to try ProviderBundle. I tried to migrate my application to gwtp just before the 2.1 release but I reverted my changes for 3 reasons : 1 - I prefer to not depend too much on an external framework. I love all new things that come in every new release of gwt and I am afraid that frameworks become unsupported or do not follow new features. I had the exemple of a friend who has prefered to use GXT instead of Pure GWT, and today, he cannot use UiBinder or the new Handler mechanism. He is still using the old listener way. Today, GWT has released the new Activity ~ MVP part, with their own Place system. At the moment, MVP of GWT seems less powerfull than the GWTP's one, but the syntax is different. And tomorrow, maybe that directions will be more different. So I prefer not taking the risk to have a situation like with GXT. 2 - Declaration of Presenter / View looks too much complicated to me (but it is a pure subjective vision :) ). All the generation of ProxyPlace are too magical for me or not enough... By instance, The automatic generation of a Place is something interesting, but in the same time, it is too complicated to generate. I do not like the fact to have to declare an interface which extends ProxyPlace, and references it in a type litteral. I would have prefered to just have something like : @Place(login); @RunAsync public class LoginActivity implement GwtpActivityLoginActivity.Presenter public inteface Presenter { public void onLogin(); ... } or something similar. Today I prefer to stay on a manual code for this part instead of a half generation that is (in my opinion) too complicated to declare. Finally (for the code style part), I did not like the fact that we have to use a local Widget variable in View and returns it with a asWidget() method for UiBinder Views. Today with GWT 2.1, all widgets implements IsWidget and provides a asWidget(). But since we have to store a local instance of Widget inside of view for UiBinder, it cannot be done automatically, we have to override it. However, I understand that IsWidget was not ready when you first implemented it. But today, it does not solve the problem of the local Widget variable. 3 - My application has two top div. One
Re: Gwt 2.1 Activities + Code splitting + Gin
On 6 nov, 01:24, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Hello, I am trying to use CodeSplitting with Activites on 2.1. I read this very interresting threadhttp://code.google.com/p/google-web-toolkit/issues/detail?id=5129and T.Broyer says that the best approach is to use an AsyncProxy for Activities. I certainly didn't say it's the best approach (just that Jarod's code wasn't adding anything to AsyncProxy). It makes sense but I have problem with it since my Activities are binded with Gin. AsyncProxy uses GWT.create() to instantiate the concrete types and all my @Inject in my Activities are thus not initialized. That's probably the reason why GIN added AsyncProvider?s (unfortunately not released yet) Does anyone tried to mix new Activity concepts with Code Splitting ? And do you know if it could be compatible with Gin activities ? I started coding the ActivityAsyncProxy I talked about in the issue tracker (i.e. don't even call start() on the activity if it's cancelled before being downloaded), but haven't yet tried it. I think (read: I *suppose*) that for it to work with GIN, your concrete implementations would have to use GIN's AsyncProvider, or get the Activity from the Ginjector from within a GWT.runAsync. -- 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: Gwt 2.1 Activities + Code splitting + Gin
Does anyone have some words for implementing the AsyncProviderT (Still in trunk as Thomas points out)?? I have not see any code showing how to implement this so I am a little lost on where to start. How do we need to use AsyncProvider and what else needs to be change / restructure anything? Is the AsyncProvider even usable right now if we compile from source? On Nov 6, 9:27 am, Thomas Broyer t.bro...@gmail.com wrote: On 6 nov, 01:24, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Hello, I am trying to use CodeSplitting with Activites on 2.1. I read this very interresting threadhttp://code.google.com/p/google-web-toolkit/issues/detail?id=5129and T.Broyer says that the best approach is to use an AsyncProxy for Activities. I certainly didn't say it's the best approach (just that Jarod's code wasn't adding anything to AsyncProxy). It makes sense but I have problem with it since my Activities are binded with Gin. AsyncProxy uses GWT.create() to instantiate the concrete types and all my @Inject in my Activities are thus not initialized. That's probably the reason why GIN added AsyncProvider?s (unfortunately not released yet) Does anyone tried to mix new Activity concepts with Code Splitting ? And do you know if it could be compatible with Gin activities ? I started coding the ActivityAsyncProxy I talked about in the issue tracker (i.e. don't even call start() on the activity if it's cancelled before being downloaded), but haven't yet tried it. I think (read: I *suppose*) that for it to work with GIN, your concrete implementations would have to use GIN's AsyncProvider, or get the Activity from the Ginjector from within a GWT.runAsync. -- 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: Gwt 2.1 Activities + Code splitting + Gin
Thanks Thomas, I implemented something similar to what you said (I think) and it works fine ! All my activities are code splitted automatically now. I used the AsyncProviderT. I used a gin version compiled by gwtp team that include the AsyncProxy (althouth that I do not use gwtp for severals resons, thanks to gwtp dev for this :) ) . @Ashton, you can get it from here : http://code.google.com/p/gwt-platform/ http://code.google.com/p/gwt-platform/downloads/detail?name=gin-r137.jar The usage of AsyncProviderT is very simple. It's exactly like a normal ProviderT instead that you have to give an AsyncCallback to the get() method. example : @Inject ProviderMyClass myProvider; @Inject AsyncProviderMyClass myAsyncProvider; private MyClass instance1; private MyClass instance2; public void myMethod() { // To get an instance without code splitting instance1 = myProvider.get(); // To get an instance with code splitting myAsyncProvider.get(new AsyncCallbackMyClass() { @Override public void onSuccess(MyClass result) { instance2 = result; } } @Override public void onFailure(Throwable caught) { } } In the previous example, instance1 is instanciated without code splitting, instance2 with code splitting. This is just a small example to show you the syntax. This example is very stupid since if you declare a class with a class ProviderMyClass in the same file than an AsyncProviderMyClass, MyClass code will not be code splitted. Now, just for people who would like to know how to implement an ActivityAsyncProxy, my implementation looks like this : (And it might really not be the best one. Thomas, maybe that you have a better code to share ;) ) public class ActivityAsyncProxyT implements Activity { @Inject private AsyncProviderT provider; private boolean canceled = false; private Activity impl; @Override public String mayStop() { if (impl != null) return impl.mayStop(); return null; } @Override public void onCancel() { if (impl != null) { impl.onCancel(); } else { canceled = true; } } @Override public void onStop() { if (impl != null) { impl.onStop(); } else { canceled = true; } } @Override public void start(final AcceptsOneWidget panel, final EventBus eventBus) { provider.get(new AsyncCallbackT() { @Override public void onSuccess(T result) { // Do not starts loaded activity if it has been canceled if (!canceled) { impl = (Activity) result; impl.start(panel, eventBus); } } @Override public void onFailure(Throwable caught) { // TODO : send error message } }); } } Now, in my ActivityMapper : public class RootActivityMapper implements ActivityMapper { @Inject ProviderActivityAsyncProxyLoginActivity loginActivityProvider; @Inject ProviderActivityAsyncProxyProfileActivity profileActivityProvider; @Inject ProviderActivityAsyncProxyPrivacyActivity privacyActivityProvider; @Override public Activity getActivity(Place place) { if (place instanceof LoginPlace) return loginActivityProvider.get(); if (place instanceof ProfilePlace) return profileActivityProvider.get(); if (place instanceof PrivacyPlace) return privacyActivityProvider.get(); return null; } } And that's all. Well, Just for information, I created my custom provider for ActivityAsyncProxy : public class ActivityAsyncProxyProviderT extends Activity implements ProviderActivityAsyncProxyT { @Inject ProviderActivityProxyT provider; @Override public ActivityAsyncProxyT get() { return provider.get(); } } Now, in my ActivityMapper, injection are less verbose : @Inject ActivityAsyncProxyProviderLoginActivity loginActivityProvider; @Inject ActivityAsyncProxyProviderProfileActivity profileActivityProvider; @Inject ActivityAsyncProxyProviderPrivacyActivity privacyActivityProvider; Thanks Thomas, you helped me a lot this week with all your tips ! :) Nicolas 2010/11/6 Ashton Thomas attechserv...@gmail.com Does anyone have some words for implementing the AsyncProviderT (Still in trunk as Thomas points out)?? I have not see any code showing how to implement this so I am a little lost on where to start. How do we need to use AsyncProvider and what else needs to be change / restructure anything? Is the AsyncProvider even usable right now if we compile from source? On Nov 6, 9:27 am, Thomas Broyer t.bro...@gmail.com wrote: On 6 nov, 01:24, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Hello, I am trying to use CodeSplitting with Activites on 2.1. I read this very interresting threadhttp:// code.google.com/p/google-web-toolkit/issues/detail?id=5129and T.Broyer says that the best approach is to use an AsyncProxy for Activities. I certainly didn't say it's the best approach (just that Jarod's code wasn't adding anything to AsyncProxy). It makes sense but I have problem with it since my Activities are binded with Gin. AsyncProxy uses GWT.create() to instantiate the concrete types and all my @Inject in my Activities are thus not initialized.
Re: Gwt 2.1 Activities + Code splitting + Gin
Hi Nicolas, If you start using AsyncProvider, you might be interested in GWTP's ProviderBundle at some point. The problem of AsyncProvider is that it may introduce too many split points, and you will often want to do some manual optimization and group a few things together behind the same split point. ProviderBundle makes that really easy to do. ProviderBundle is totally usable without the rest of GWTP. (Although I'd love to hear your reason for not using it. ;)) Cheers, Philippe On Nov 6, 4:40 pm, Nicolas Antoniazzi nicolas.antonia...@gmail.com wrote: Thanks Thomas, I implemented something similar to what you said (I think) and it works fine ! All my activities are code splitted automatically now. I used the AsyncProviderT. I used a gin version compiled by gwtp team that include the AsyncProxy (althouth that I do not use gwtp for severals resons, thanks to gwtp dev for this :) ) . @Ashton, you can get it from here :http://code.google.com/p/gwt-platform/http://code.google.com/p/gwt-platform/downloads/detail?name=gin-r137.jar The usage of AsyncProviderT is very simple. It's exactly like a normal ProviderT instead that you have to give an AsyncCallback to the get() method. example : @Inject ProviderMyClass myProvider; @Inject AsyncProviderMyClass myAsyncProvider; private MyClass instance1; private MyClass instance2; public void myMethod() { // To get an instance without code splitting instance1 = myProvider.get(); // To get an instance with code splitting myAsyncProvider.get(new AsyncCallbackMyClass() { �...@override public void onSuccess(MyClass result) { instance2 = result; } } �...@override public void onFailure(Throwable caught) { } } In the previous example, instance1 is instanciated without code splitting, instance2 with code splitting. This is just a small example to show you the syntax. This example is very stupid since if you declare a class with a class ProviderMyClass in the same file than an AsyncProviderMyClass, MyClass code will not be code splitted. Now, just for people who would like to know how to implement an ActivityAsyncProxy, my implementation looks like this : (And it might really not be the best one. Thomas, maybe that you have a better code to share ;) ) public class ActivityAsyncProxyT implements Activity { �...@inject private AsyncProviderT provider; private boolean canceled = false; private Activity impl; @Override public String mayStop() { if (impl != null) return impl.mayStop(); return null; } @Override public void onCancel() { if (impl != null) { impl.onCancel();} else { canceled = true; } } �...@override public void onStop() { if (impl != null) { impl.onStop(); } else { canceled = true; } } @Override public void start(final AcceptsOneWidget panel, final EventBus eventBus) { provider.get(new AsyncCallbackT() { �...@override public void onSuccess(T result) { // Do not starts loaded activity if it has been canceled if (!canceled) { impl = (Activity) result; impl.start(panel, eventBus);} } �...@override public void onFailure(Throwable caught) { // TODO : send error message } }); } } Now, in my ActivityMapper : public class RootActivityMapper implements ActivityMapper { @Inject ProviderActivityAsyncProxyLoginActivity loginActivityProvider; @Inject ProviderActivityAsyncProxyProfileActivity profileActivityProvider; @Inject ProviderActivityAsyncProxyPrivacyActivity privacyActivityProvider; @Override public Activity getActivity(Place place) { if (place instanceof LoginPlace) return loginActivityProvider.get(); if (place instanceof ProfilePlace) return profileActivityProvider.get(); if (place instanceof PrivacyPlace) return privacyActivityProvider.get(); return null; } } And that's all. Well, Just for information, I created my custom provider for ActivityAsyncProxy : public class ActivityAsyncProxyProviderT extends Activity implements ProviderActivityAsyncProxyT { @Inject ProviderActivityProxyT provider; �...@override public ActivityAsyncProxyT get() { return provider.get(); } } Now, in my ActivityMapper, injection are less verbose : @Inject ActivityAsyncProxyProviderLoginActivity loginActivityProvider; @Inject ActivityAsyncProxyProviderProfileActivity profileActivityProvider; @Inject ActivityAsyncProxyProviderPrivacyActivity privacyActivityProvider; Thanks Thomas, you helped me a lot this week with all your tips ! :) Nicolas 2010/11/6 Ashton Thomas attechserv...@gmail.com Does anyone have some words for implementing the AsyncProviderT (Still in trunk as Thomas points out)?? I have not see any code showing how to implement this so I am a little lost on where to start. How do we need to use AsyncProvider and what else needs to be change / restructure anything? Is the AsyncProvider even usable right now if we compile from source? On Nov 6, 9:27
Gwt 2.1 Activities + Code splitting + Gin
Hello, I am trying to use CodeSplitting with Activites on 2.1. I read this very interresting thread http://code.google.com/p/google-web-toolkit/issues/detail?id=5129 and T.Broyer says that the best approach is to use an AsyncProxy for Activities. It makes sense but I have problem with it since my Activities are binded with Gin. AsyncProxy uses GWT.create() to instantiate the concrete types and all my @Inject in my Activities are thus not initialized. Does anyone tried to mix new Activity concepts with Code Splitting ? And do you know if it could be compatible with Gin activities ? Thanks Nicolas. -- 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.