I'm quickly running out of ideas, but perhaps one of these two would work
to make sure the ObjectContextProvider is available up-front:

#1 Use an AppModule constructor

public class AppModule
{
  private final ObjectContextProvider objectContextProvider;

  public AppModule(ObjectContextProvider objectContextProvider)
  {
    this.objectContextProvider = objectContextProvider;
  }

  @Startup { ... }
}

#2 Use @Inject

public class AppModule
{
  @Inject
  private ObjectContextProvider objectContextProvider;

  @Startup { ... }
}

If neither of those work, perhaps the T5 list would be more helpful.  I'm
pretty sure Robert Ziegler, who wrote the T5-Cayenne module, follows that
list.

mrg


On Fri, Nov 23, 2012 at 1:12 PM, <devnull2...@gmx.de> wrote:

> > @Startup
> > public void init(ObjectContextProvider provider) { ... }
>
> I tried it this way but sadly I get the same exception on startup as
> before.
>
> > (Don't mix DataContext with ObjectContextProvider.)
>
> "DataContext" in my example was just the id of the service.
>
> From TapestryCayenneModule:
> public static void bind(ServiceBinder binder)
> {
>     binder.bind(ObjectContextProvider.class, DataContextProviderImpl.class)
>         .withMarker(Cayenne.class).withId("DataContext");
> }                                  ^^^^^^^^^^^^^^^^^^^^^
>
> I'd tried it several ways
> @InjectService("ObjectContextProvider") ObjectContextProvider provider
>     --> no service with this name
>
> @InjectService("DataContext") ObjectContextProvider provider
> --> TapestryIOCModule.RegistryStartup Construction of service
> RegistryStartup failed: org.apache.tapestry5.ioc.internal.OperationException
>
> @Inject ObjectContextProvider provider
> --> same exception as above
>
> ObjectContextProvider provider
> --> same exception as above
>
> On the tapestry web page you linked they say
> "RegistryStartup occurs after eager loaded services are instantiated."
> I guess this means it occurs before non-eager services are instantiated
> and ObjectContextProvider isn't eager loaded. So I'm afraid it's just not
> available yet.
>
>
> > > public void init() {
> > >     ServerRuntime runtime = new ServerRuntime("cayenne.xml");
> > >
> >
> runtime.getDataDomain().getEntityResolver().getCallbackRegistry().addListener(new
> > > LastModifiedListener());
> > >     runtime.getDataDomain().addFilter(new ChangeSetFilter());
> > > }
> > >
>
> This way there are no exceptions on startup. I put in some logging and the
> size of runtime.getDataDomain().getFilters() in the init method is 1 (no
> surprise). I couldn't find a method to get the number of listeners.
>
> But the lastmodified date isn't set when I edit something. So I added some
> logging output in the insertAudit(DataObject object) of the
> LastModifiedListener and in the page class in onSuccessFromEditForm(). The
> insertAudit method never logs anything, i. e. it doesn't get called. And in
> the page class dataContext.getParentDataDomain().getFilters().size() is 0.
> Too bad.
>
>
>

Reply via email to