struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Laurie Harper <lau...@holoweb.net>
Subject Re: ApplicationListener issue
Date Fri, 26 Sep 2008 04:22:18 GMT
Sure, that ought to work; but so should the code shown. If 
getApplication() is returning null, setApplication() must have been 
called with a null argument. That shouldn't be happening.

Martin, can you set a breakpoint (or add logging) in your 
setApplication() method to confirm this? If that's what's happening, 
it's probably a bug.

If you can produce a minimal web app that does nothing more than 
reproduce this behaviour, attach it to a JIRA issue. I've never seen 
this behaviour before, though, which suggests something 'funky' in your 
environment or configuration -- and again, trying to create a minimal 
example to reproduce the problem may lead you to discover what that is.

L.

Martin Gainty wrote:
> this may be what you're looking for 
> ActionContext context = ActionContext.getContext();then use 
> context.getApplication()
> to acquire your Map
> http://www.opensymphony.com/webwork/api/com/opensymphony/xwork/ActionContext.html#getApplication()
> 
> and to acquire specific keyed value try get(DATABASE_KEY);
>  
> 
> Saludos /
> 
> 
> Martin 
> ______________________________________________ 
> Disclaimer and confidentiality note 
> Everything in this e-mail and any attachments relates to the official business of Sender.
This transmission is of a confidential nature and Sender does not endorse distribution to
any party other than intended recipient. Sender does not necessarily endorse content contained
within this transmission. 
> 
> 
>> Date: Thu, 25 Sep 2008 22:37:05 -0300
>> Subject: Re: ApplicationListener issue
>> From: martin@growebs.com.ar
>> To: user@struts.apache.org
>> CC: user@struts.apache.org
>>
>>
>>
>> Hi RDB,
>>
>>
>>
>> Thanks for your answer. I think I'm doing it OK though, let me paste here the
>> code of my app:
>>
>>
>>
>> import java.util.Map;
>>
>>
>>
>> import org.apache.log4j.Logger;
>>
>> import org.apache.struts2.interceptor.ApplicationAware;
>>
>>
>>
>> import database.DBConnector;
>>
>>
>>
>> import com.opensymphony.xwork2.ActionSupport;
>>
>>
>>
>> public class MyAction extends ActionSupport implements ApplicationAware {
>>
>>
>>
>>     private static Logger logger =
>> Logger.getLogger(MyAction.class);
>>
>>
>>
>>     private Map application;
>>
>>
>>
>>     
>>
>>     public void setApplication(Map value) {
>>
>>         application = value;
>>
>>     }
>>
>>     
>>
>>     public static final String DATABASE_KEY =
>> "database";
>>
>>
>>
>>
>>
>>     public DBConnector getDatabase() {
>>
>>         Map application = getApplication();
>>
>>
>>
>>         if(application == null) {
>>
>>             logger.error("null
>> application context");
>>
>>             return
>> null;
>>
>>            }
>>
>>          return
>> application.get(DATABASE_KEY);
>>
>>     }
>>
>>
>>
>>     /**
>>
>>      * <p>Provide application context.</p>
>>
>>      */
>>
>>     public Map getApplication() {
>>
>>         return application;   
>>
>>  }
>>
>> }
>>
>>
>>
>> This is the Action and the getApplication call is giving me a null application
>> object, what am I doing wrong? 
>>
>>
>>
>> Thank you,
>>
>>
>>
>> Martin
>>
>>
>>
>>
>>
>>
>>
>>> Not knowing the whole story, I may be off target... However, your code
>>> below is suspect to me:
>>> public class MyAction extends ActionSupport implements ApplicationAware {
>>> public DBConnector getDatabase() {
>>> Map application = getApplication();
>>> Object db = application.get(DATABASE_KEY);
>>> ....
>>> }
>>> At the top of the class you should have a variable declared called:
>>> private Map application;
>>> You need to implement/override setApplication(...), like so:
>>> public void setApplication(Map map) {
>>>     this.application = map;
>>> }
>>> When struts enters your class it will set the application variable for
>>> you.  Then inside your method above, you can dispense with:
>>> Map application = getApplication();
>>> As Laurie suggested, make sure you have (1) correct.
>>> If I'm missing the point, ignore my email.
>>> RDB
>>> Martín Mauri wrote:
>>>> Hi Laurie, I've checked all the points that you suggested, and I
>>>> think that #3 could be a possibility. The thing is that the
>>>> database object is not null when I do the
>>>> context.setAttribute(DATABASE_KEY, database); But in the Action
>>>> that implements the ApplicationAware interface I did the following:
>>>>  Inside the method that gets invoked I did: Map application =
>>>> getApplication(); and it turned out to be that the application
>>>> object is null. Am I missing something in the configuration files?
>>>> Is it required to do an interceptor to transfer this object from
>>>> the Application Listener to my Action class?
>>>> I'll appreciate your help,
>>>> Thank you. Martin
>>>> ----- Original Message ----- From: "Laurie Harper"
>>>> <laurie@holoweb.net> To: <user@struts.apache.org> Sent:
>> Thursday,
>>
>>>> September 25, 2008 4:45 AM Subject: Re: ApplicationListener issue
>>>> Martín Mauri wrote:
>>>>> Hi all, I'm having an issue while implementing an App Listener
>>>>> for my App. Thing is that the ApplicationListener appears to be
>>>>> working fine, as from the logs I can see that the
>>>>> contextInitialized method is being invoked.
>>>>> Inside the method I do this call, same way as the Mailreader
>>>>> sample app does:
>>>>> context.setAttribute(DATABASE_KEY, database); The problem comes
>>>>> when from my action:
>>>>> public class MyAction extends ActionSupport implements
>>>>> ApplicationAware {
>>>>> public DBConnector getDatabase() {
>>>>> Map application = getApplication();
>>>>> Object db = application.get(DATABASE_KEY);
>>>>> ....
>>>>> }
>>>>> db is returning null, like if the object got lost somewhere...
>>>>> here's the fragmen of my web.xml:
>>>>> <listener>
>>>>> <listener-class>
>>>>> myApp.ApplicationListener
>>>>> </listener-class>
>>>>> </listener>
>>>>> Any ideas?
>>>> 1) there's something wrong in your implementation of
>>>> ApplicationAware and/or your getApplication() method
>>>> 2) the 'database' variable was null when you called setAttribute()
>>>> in your listener
>>>> 3) you have code somewhere which is overwriting the
>>>> application-scope property with a null value after the listener
>>>> initializes it
>>>> 4) the value of DATABASE_KEY is different in the listener and the
>>>> action
>>>> Those are the most obvious places to start. In fact, I can't think
>>>> of anything else it could be unless there's something very funky
>>>> going on, in which case I doubt it can be diagnosed through a
>>>> mailing list...
>>>> L.
>>>> ---------------------------------------------------------------------
>>>>  To unsubscribe, e-mail: user-unsubscribe@struts.apache.org For
>>>> additional commands, e-mail: user-help@struts.apache.org
>>>> __________ Información de NOD32, revisión 3469
>> (20080924)
>>
>>>> __________
>>>> Este mensaje ha sido analizado con  NOD32 antivirus system
>>>> http://www.nod32.com
>>>> ---------------------------------------------------------------------
>>>>  To unsubscribe, e-mail: user-unsubscribe@struts.apache.org For
>>>> additional commands, e-mail: user-help@struts.apache.org
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: user-help@struts.apache.org
> 
> _________________________________________________________________
> See how Windows connects the people, information, and fun that are part of your life.
> http://clk.atdmt.com/MRT/go/msnnkwxp1020093175mrt/direct/01/



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message