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: [EMAIL PROTECTED]
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"
<[EMAIL PROTECTED]> 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: [EMAIL PROTECTED] For
additional commands, e-mail: [EMAIL PROTECTED]
__________ 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: [EMAIL PROTECTED] For
additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

_________________________________________________________________
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to