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 AsyncProvider<T>.
> 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 AsyncProvider<T> is very simple. It's exactly like a normal
> Provider<T> instead that you have to give an AsyncCallback to the get()
> method.
> example :
>
> @Inject
> Provider<MyClass> myProvider;
>
> @Inject
> AsyncProvider<MyClass> 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 AsyncCallback<MyClass>() {
> �...@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 Provider<MyClass> in the
> same file than an AsyncProvider<MyClass>, 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 ActivityAsyncProxy<T> implements Activity {
>
> �...@inject
> private AsyncProvider<T> 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 AsyncCallback<T>() {
>
> �...@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
>  Provider<ActivityAsyncProxy<LoginActivity>> loginActivityProvider;
>
> @Inject
>  Provider<ActivityAsyncProxy<ProfileActivity>> profileActivityProvider;
>
> @Inject
>  Provider<ActivityAsyncProxy<PrivacyActivity>> 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 ActivityAsyncProxyProvider<T extends Activity> implements
> Provider<ActivityAsyncProxy<T>> {
>
> @Inject
>  Provider<ActivityProxy<T>> provider;
>
> �...@override
> public ActivityAsyncProxy<T> get() {
>  return provider.get();
>
> }
> }
>
> Now, in my ActivityMapper, injection are less verbose :
>
> @Inject
> ActivityAsyncProxyProvider<LoginActivity> loginActivityProvider;
>
> @Inject
> ActivityAsyncProxyProvider<ProfileActivity> profileActivityProvider;
>
> @Inject
> ActivityAsyncProxyProvider<PrivacyActivity> 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 AsyncProvider<T>
> > (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<google-web-toolkit%2Bunsubs 
> > cr...@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.

Reply via email to