Hi,

I'm not sure what you mean by module.

If you talk about Guice module - the module is just the class with the
configuration. Wicket just delegates the job of resolving a bean to Guice's
Injector that uses all registered Guice modules to find the binding.

If you ask "how Wicket decides which classes to auto-inject" - a special
IComponentInstantiationListener and IBehaviorInstantiationListener are
used. When you do "new MyComponent(...)" this calls
org.apache.wicket.Component#Component() (i.e. the parent's constructor)
where all configured IComponentInstantiationListener's are called. Same for
Behavior.

Since all models/providers do not have a common parent class (they
implement an interface - IModel, IDataProvider, ...) there is no such
auto-injection and the user code has to call Injector.get().inject(this)
explicitly.


On Wed, Mar 20, 2013 at 2:34 AM, Stephen Walsh <
[email protected]> wrote:

> How does wicket know which module to inject?
>
> _______________________________________
> Stephen Walsh | http://connectwithawalsh.com
>
>
> On Sun, Mar 17, 2013 at 12:59 PM, Dan Retzlaff <[email protected]>
> wrote:
>
> > Wicket only injects Components and Behaviors by default. To inject into
> > anything else, call Injector.get().inject(this) in its constructor.
> >
> > On Fri, Mar 15, 2013 at 2:27 PM, Stephen Walsh <
> > [email protected]> wrote:
> >
> > > I have a much better understanding on this now.  Are there any plans to
> > > support injection on LDMs, or is there a suggested work around for
> this?
> > >
> > > It seems like you'd want a DAO service to get an object from the DB
> > within
> > > a custom model so you can return that back to your component.
> > >
> > > _______________________________________
> > > Stephen Walsh | http://connectwithawalsh.com
> > >
> > >
> > > On Thu, Mar 14, 2013 at 5:03 PM, Martin Grigorov <[email protected]
> > > >wrote:
> > >
> > > > Take a look at wicket-examples and the unit tests in wicket-guice
> > module.
> > > >
> > > >
> > > > On Thu, Mar 14, 2013 at 10:53 PM, Stephen Walsh <
> > > > [email protected]> wrote:
> > > >
> > > > > Any other thoughts on this?
> > > > >
> > > > > _______________________________________
> > > > > Stephen Walsh | http://connectwithawalsh.com
> > > > >
> > > > >
> > > > > On Thu, Mar 14, 2013 at 10:30 AM, Stephen Walsh <
> > > > > [email protected]> wrote:
> > > > >
> > > > > > Thanks, Martin.  I intialize here, (which I just realized is not
> > the
> > > > best
> > > > > > spot):
> > > > > >
> > > > > >     private void setUpMongo() {
> > > > > >         mongo = MongoUtil.getMongo();
> > > > > >         morphia = new
> Morphia().map(Blog.class).map(Person.class);
> > > > > >         blogDAO = new BlogDAO(mongo, morphia);
> > > > > >     }
> > > > > >
> > > > > > I am using the Wicket Guice module, and I think your second point
> > is
> > > > what
> > > > > > I was getting at.  From learning about Guice (
> > > > > >
> http://www.youtube.com/watch?feature=player_embedded&v=hBVJbzAagfs
> > ),
> > > I
> > > > > > thought the point was to initialize once and then reuse wherever
> > > > needed.
> > > > >  I
> > > > > > figured initialization would happen in the application class.
> >  Maybe
> > > > I'm
> > > > > > misunderstanding.  If it's supposed to happen in the application
> > > class,
> > > > > > then I don't really have need for a module because I don't have
> an
> > > > > > interface in this case, right?
> > > > > >
> > > > > > Thanks for the help on this.
> > > > > >
> > > > > > _______________________________________
> > > > > > Stephen Walsh | http://connectwithawalsh.com
> > > > > >
> > > > > >
> > > > > > On Thu, Mar 14, 2013 at 3:20 AM, Martin Grigorov <
> > > [email protected]
> > > > > >wrote:
> > > > > >
> > > > > >> Hi,
> > > > > >>
> > > > > >> I don't see how you initialize blogDAO. If you don't use
> > wicket-ioc
> > > > > module
> > > > > >> then you will need to lookup the DAO from the application
> whenever
> > > you
> > > > > >> need
> > > > > >> it:
> > > > > >>
> > > > > >> public void onSubmit() {
> > > > > >>
> > > > > >>   BlogDAO blogDao = MyApplication.get().getBlogDAO();
> > > > > >>   blogDao.save(blog);
> > > > > >> }
> > > > > >> This way you wont keep reference to it in the page/component and
> > it
> > > > wont
> > > > > >> be
> > > > > >> serialized.
> > > > > >>
> > > > > >> If you use wicket-guice module then you can do:
> > > > > >>
> > > > > >> @Inject
> > > > > >> private  BlogDAO blogDao;
> > > > > >>
> > > > > >> and use it anywhere.
> > > > > >> Wicket will use Guice to lookup the bean at component creation
> but
> > > the
> > > > > >> bean
> > > > > >> will be wrapped in a serializable proxy. That is a lightweight
> > proxy
> > > > > will
> > > > > >> be (de)serialized with the page.
> > > > > >> This is the recommended way.
> > > > > >> wicket-string works the same way.
> > > > > >> wicket-cdi leaves the proxy creation to the CDI implementation.
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > >> On Thu, Mar 14, 2013 at 5:19 AM, Stephen Walsh <
> > > > > >> [email protected]> wrote:
> > > > > >>
> > > > > >> > I'm attempting to implement Guice for my DAO connections as my
> > > JBoss
> > > > > >> server
> > > > > >> > keeps running out of memory.  Not entirely sure why that is,
> but
> > > I'm
> > > > > >> hoping
> > > > > >> > this is at least part of it.  I read through
> > > > > >> > http://markmail.org/message/sz64l4eytzc3ctkh and understand
> why
> > > the
> > > > > DAO
> > > > > >> > needs to be serialized, and I also followed
> > > > > >> >
> > > > > >> >
> > > > > >>
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/WICKET/Wicket%2C+Guice+and+Ibatis+exampleto
> > > > > >> > try and figure out where and how exactly to inject my DAO.
> > > > > >> >
> > > > > >> > My DAO already extends a basic DAO class that has all of the
> > > basics
> > > > > for
> > > > > >> > getting stuff from the database.  Neither of these are
> > interfaces
> > > > (not
> > > > > >> sure
> > > > > >> > if this is a problem or not).  My DAO works just fine in
> panels,
> > > but
> > > > > as
> > > > > >> > soon as it's on a page, it throws the not seralizable
> exception.
> > > > > >> >  Regardless it doesn't really solve the problem of really only
> > > > needing
> > > > > >> one
> > > > > >> > DAO for the whole application instead of creating one whenever
> > > it's
> > > > > >> needed
> > > > > >> > in every place that it's needed.  If I understand dependency
> > > > > injection,
> > > > > >> > then this is the whole point.
> > > > > >> >
> > > > > >> > Here's my class.  Hopefully someone can point me in the right
> > > > > direction
> > > > > >> for
> > > > > >> > this page and my application class:
> > > > > >> >
> > > > > >> > public class EditBlogEntry extends BasePage {
> > > > > >> >
> > > > > >> >     private Logger logger =
> > > > > >> LoggerFactory.getLogger(EditBlogEntry.class);
> > > > > >> >
> > > > > >> >     private Mongo mongo;
> > > > > >> >     private Morphia morphia;
> > > > > >> >     private BlogDAO blogDAO;
> > > > > >> >
> > > > > >> >     public EditBlogEntry(final Blog blogEntry) {
> > > > > >> >  // Add edit blogPost form to page
> > > > > >> >         Form<?> form = new Form("form");
> > > > > >> >         form.add(new Button("postIt") {
> > > > > >> >             @Override
> > > > > >> >             public void onSubmit() {
> > > > > >> >                 // This merely gets a new mongo instance that
> > has
> > > my
> > > > > >> blog
> > > > > >> > entry mapped by morphia for saving the whole POJO to mongo
> > > > > >> >                 setUpMongo();
> > > > > >> >                 blogDAO.save(blogEntry);
> > > > > >> >                 BlogEntryDetails details = new
> > > BlogEntryDetails(new
> > > > > >> > PageParameters().add("id",
> blogEntry.getObjectId().toString()));
> > > > > >> >                 setResponsePage(details);
> > > > > >> >             }
> > > > > >> >         });
> > > > > >> >
> > > > > >> >         LoadableDetachableModel ldm = new
> > > LoadableDetachableModel()
> > > > {
> > > > > >> >             @Override
> > > > > >> >             protected Object load() {
> > > > > >> > //                TODO need to set athr only on new blogEntry
> > > > > >> >
> > > > > blogEntry.setAthr(CampingAwaitsSession.get().getUser());
> > > > > >> >                 return blogEntry;
> > > > > >> >             }
> > > > > >> >         };
> > > > > >> >
> > > > > >> >         form.add(new BlogEntryPanel("blogEntry", new
> > > > > >> > CompoundPropertyModel<Blog>(ldm)));
> > > > > >> >         add(form);
> > > > > >> >
> > > > > >> > }
> > > > > >> >
> > > > > >> > Any thoughts?  I feel like I understand the concept but the
> > > > > >> implementation
> > > > > >> > is throwing me.
> > > > > >> >
> > > > > >> > _______________________________________
> > > > > >> > Stephen Walsh | http://connectwithawalsh.com
> > > > > >> >
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > >> --
> > > > > >> Martin Grigorov
> > > > > >> jWeekend
> > > > > >> Training, Consulting, Development
> > > > > >> http://jWeekend.com <http://jweekend.com/>
> > > > > >>
> > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Martin Grigorov
> > > > jWeekend
> > > > Training, Consulting, Development
> > > > http://jWeekend.com <http://jweekend.com/>
> > > >
> > >
> >
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Reply via email to