Próbuję uzyskać adres URL serwera (np. http://www.mywebapp.com/myapp) z ServletContext podczas uruchamiania aplikacji, robię to poprzez wywołanie metody fasoli przy starcie (za pomocą @Startup) i pobranie kontekstu serwletu,

@Startup
@Name("startupActions")
@Scope(ScopeType.APPLICATION)
public class StartupActionsBean implements StartupActions,
Serializable {

@Logger private Log log;

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Create
@Override
public void create(){
    ServletContext sc = org.jboss.seam.contexts.ServletLifecycle.getServletContext();
    String context = sc.getContextPath();
    String serverInfo = sc.getServerInfo();
    log.debug("__________________START__________________");
    log.debug("Context Path: "+context);
    log.debug("Server Info: "+serverInfo);
}

// Cleanup methods
@Remove
@BypassInterceptors
@Override
public void cleanUp(){}
}

To działa dobrze, jednak ścieżka ServletContext jest pusta, zobacz dane wyjściowe konsoli poniżej..

18:52:54,165 DEBUG [uk.co.app.actions.startup.StartupActionsBean] __________________START__________________
18:52:54,165 DEBUG [uk.co.app.actions.startup.StartupActionsBean] Context Path: 
18:52:54,165 DEBUG [uk.co.app.actions.startup.StartupActionsBean] Server Info: JBoss Web/3.0.0-CR1

Czy ktoś wie, jak uzyskać ścieżkę kontekstu w ten lub inny sposób?

Ps. przy użyciu SEAM 2.2.2, Jboss AS6 Final, Richfaces 3.3.3

0
DaveB 23 wrzesień 2012, 22:13

2 odpowiedzi

Najlepsza odpowiedź

Nie używaj @Startup, kod startowy twojego komponentu jest wywoływany zanim konteksty zostaną w pełni skonfigurowane i niektórych innych fabryk nie można jeszcze zainicjować.

Obserwuj wydarzenie org.jboss.seam.postInitialization i użyj tego samego ServletLifecycle.getCurrentServletContext(), aby uzyskać potrzebne dane. Szybki przykład:

@Name("contextPath")
public class ContextPathInit implements Serializable {
    private String contextPath;

    @Observer("org.jboss.seam.postInitialization")
    public void init() {
        contextPath = ServletLifecycle.getCurrentServletContext().getContextPath();
    }
}
1
EmirCalabuch 25 wrzesień 2012, 03:18