Shing,
I very much appreciate your time on this by the way, and your website
looks very handy. :)
I have gone back to the ApplicationServlet, and have written code as you
show below into a static method in a singleton in my app. When calling
the method from a page class, Home, I get to my Visit object just as you
did, so the method code is valid. When calling the same method from my
filter (non page class) I get the webRequest related exception, see
below. I did create a non page pojo from Home in which the pojo calls
my method and it worked. So non page pojos can do this but the filter
can not. It definitely in not trivial to get to the Registry from a
filter it would seem. Not sure what to do now for the filter. May have
to look at HiveUtils.
Thanks,
Joseph
Exception:
java.lang.NullPointerException: Property 'webRequest' of <OuterProxy for
tapestry.globals.RequestGlobals(org.apache.tapestry.services.RequestGlobals)>
is null.
$WebRequest_10c4ab9cc40._targetServiceProperty($WebRequest_10c4ab9cc40.java)
$WebRequest_10c4ab9cc40.getSession($WebRequest_10c4ab9cc40.java)
$WebRequest_10c4ab9cc25.getSession($WebRequest_10c4ab9cc25.java)
$WebRequest_10c4ab9cc24.getSession($WebRequest_10c4ab9cc24.java)
org.apache.tapestry.engine.state.SessionScopeManager.getSession(SessionScopeManager.java:48)
org.apache.tapestry.engine.state.SessionScopeManager.get(SessionScopeManager.java:64)
$StateObjectPersistenceManager_10c4ab9cc3b.get($StateObjectPersistenceManager_10c4ab9cc3b.java)
$StateObjectPersistenceManager_10c4ab9cc3a.get($StateObjectPersistenceManager_10c4ab9cc3a.java)
org.apache.tapestry.engine.state.StateObjectManagerImpl.get(StateObjectManagerImpl.java:50)
org.apache.tapestry.engine.state.ApplicationStateManagerImpl.get(ApplicationStateManagerImpl.java:60)
$ApplicationStateManager_10c4ab9cbfc.get($ApplicationStateManager_10c4ab9cbfc.java)
$ApplicationStateManager_10c4ab9cbfd.get($ApplicationStateManager_10c4ab9cbfd.java)
foo.apply.utility.Utility.testASOService(Utility.java:61)
foo.apply.application.SampleFilter.doFilter(SampleFilter.java:176)
Shing Hing Man wrote:
The registry is stored in the servlet context.
You can retreived it by :
String REGISTRY_KEY_PREFIX =
"org.apache.tapestry.Registry:";
ServletContext context = getServletContext();
Registry registry = (Registry)
context.getAttribute(REGISTRY_KEY_PREFIX +
"testPojoASO");
IInjectEnhancementWorker stateWorker =
(IInjectEnhancementWorker)
registry.getService(IInjectEnhancementWorker.class);
(In your case you need to replace testPojoASO by the
servlet name in web.xml.)
In your orginal post,
you have a custom ApplicationServlet.
I have try the following approach with the code in
your orginal post.
Step 1) Use the framework ApplicationServlet.
Step 2) Retrieve the registry as described above.
Then I have no problem retrieving the stateWorker in
the Home page using the
above method. (As long as you have access to the
context servlet, you can get stateWorker.)
Joseph : I am sending your a war file (binary and
source) of the above example off the list.
Shing
--- Joseph Hannon <[EMAIL PROTECTED]> wrote:
Shing,
Cool. I did replace <set-object with the
<set-service and got the same
exception. If you will notice in my original post,
this was commented
out, I uncommented it and commented the line with
<set-object .
Would you mind showing some code where you are
getting your asoService
class from a pojo? I would like to see how you are
making the call that
gets the service. I suspect getting my registry
from my servlet is not
the way to go.
Thanks,
Joseph
Shing Hing Man wrote:
How are you calling getAppStateManager(), from
what
class? How are you
getting access to the registry from a POJO?
In my how-to, appStateManager is injected to
the tapestry service asoSerivce by hivemind.
The following piece of code is meant to be in the
.java
class of my asoService.
HelloMessage message = (HelloMessage)
getAppStateManager().get("message");
Also, in the .java of my asoService, there is
getter/setter method for the property
appStateManager.
I have noticed that in your
service-point id="InjectStateWorker", you have
<set-object property="applicationStateManager"
value="infrastructure:applicationStateManager"/>
try replacing it by
<set-service property="applicationStateManager"
service-id="tapestry.state.ApplicationStateManager"/>
Shing
--- Joseph Hannon <[EMAIL PROTECTED]> wrote:
Shing,
I did change the 'Visit' id to something else,
'message', as a test and
still get the exception of webRequest being null.
From your website: HelloMessage message =
(HelloMessage)
getAppStateManager().get("message");
How are you calling getAppStateManager(), from
what
class? How are you
getting access to the registry from a POJO?
Thanks,
Joseph
Shing Hing Man wrote:
Sorry ! Here is the correct link.
http://lombok.demon.co.uk/tapestry4Demo/app
Shing
--- Shing Hing Man <[EMAIL PROTECTED]> wrote:
I have noticed that in the retrieveVisit method
of
InjectStateWorker.java :
visit = (Visit)
_applicationStateManager.get("visit")
;
But in the hivemodule.xml, the state object
name
is
'Visit' with a captial V.
You might like to rename 'visit' to something
else.
I do not know whether it would conflict with
the
default visit object (the one that could be
specified
in
.application.)
I have written up an example on injecting an
aso
into
a service and put it on
http://lombok.demon.co.uk/tapestry4Demo
If you like, you can take a look and see if it
helps.
Shing
--- Finster Hannon <[EMAIL PROTECTED]>
wrote:
I would like to get access to my ASO 'Visit'
from
a
servlet filter let's
say. I have used a piece I saw Howard post
where
I
am subclassing the
ApplicationServlet which will provide access
to
the
HiveMind (HM)
registry. I would think then calling from
anywhere
in the app to the
servlet would give me the HM registry. Once I
have
the registry, I
would think I can access it's services. I saw
an
example of injecting
an ASO into a POJO using a service and
implemented
that below. It is
not really the ASO getting injected, rather it
is
the
ApplicationStateManager (ASM) getting
injected.
I
am getting the
service, getting the ASM, but when attempting
to
get
'Visit' from the
ASM, an exception is thrown visible in the
logging
below. I then moved
my call to a page class to see if that would
change
things and it did
not. Debugging my servlet shows the registry
obtained has many services
including mine.
I have seen many references to 'HiveUtils
ObjectBuilder' and would like
to get this working before attempting use of
that.
Also saw in this
list: 'how to inject visit object into pojo',
'how
to inject aso in
service', 'injecting an aso into a hivemind
service', and 'injecting
an aso into a service' which all relate to
this
post.
Can I get the HM registry from my servlet and
is
it
valid? Is there
another way to get the registry? Suggestions
on
getting the ASO 'Visit'
from a POJO? Is my code invalid?
Thanks,
Joseph
The call:
IInjectEnhancementWorker stateWorker =
(IInjectEnhancementWorker)
=== message truncated ===
Home page :
http://uk.geocities.com/matmsh/index.html
___________________________________________________________
All new Yahoo! Mail "The new Interface is stunning in its simplicity and ease of use." - PC Magazine
http://uk.docs.yahoo.com/nowyoucan.html
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]