[weld-issues] [JBoss JIRA] Issue Comment Edited: (WELD-983) Portable war: Weld deployment on JBoss AS 7 should not require to remove the WeldListener line from the web.xml
Geoffrey De Smet (JIRA)
jira-events at lists.jboss.org
Tue Oct 4 05:41:26 EDT 2011
[ https://issues.jboss.org/browse/WELD-983?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12632014#comment-12632014 ]
Geoffrey De Smet edited comment on WELD-983 at 10/4/11 5:40 AM:
----------------------------------------------------------------
Here's a workaround I wrote following solution 1 and 2.
It works when weld-servlet.jar is excluded from the war on jboss 7 (which is very annoying to do). Note that SafeWeldListener is in my codebase (so not in weld-servlet.jar of course).
{code}
/**
* Workaround for https://issues.jboss.org/browse/WELD-983
*/
public class SafeWeldListener implements ServletContextListener, HttpSessionListener, ServletRequestListener {
private Boolean onJBoss7 = null;
private ServletContextListener servletContextListener;
private HttpSessionListener httpSessionListener;
private ServletRequestListener servletRequestListener;
private void checkOnJBoss(String serverInfo) {
onJBoss7 = serverInfo.startsWith("JBoss Web/7.");
if (!onJBoss7) {
// Note that weldListener is not a global variable to avoid a ClassNotFoundException on JBoss 7
Listener weldListener = new Listener();
servletContextListener = weldListener;
httpSessionListener = weldListener;
servletRequestListener = weldListener;
}
}
public void contextInitialized(ServletContextEvent sce) {
checkOnJBoss(sce.getServletContext().getServerInfo());
if (onJBoss7) {
return;
}
servletContextListener.contextInitialized(sce);
}
public void contextDestroyed(ServletContextEvent sce) {
if (onJBoss7) {
return;
}
servletContextListener.contextDestroyed(sce);
}
public void sessionCreated(HttpSessionEvent se) {
if (onJBoss7) {
return;
}
httpSessionListener.sessionCreated(se);
}
public void sessionDestroyed(HttpSessionEvent event) {
if (onJBoss7) {
return;
}
httpSessionListener.sessionDestroyed(event);
}
public void requestDestroyed(ServletRequestEvent event) {
if (onJBoss7) {
return;
}
servletRequestListener.requestDestroyed(event);
}
public void requestInitialized(ServletRequestEvent event) {
if (onJBoss7) {
return;
}
servletRequestListener.requestInitialized(event);
}
}
{code}
was (Author: ge0ffrey):
Solution proposal 1 and 2 works if you do it correctly (notice the note):
{code}
/**
* Workaround for https://issues.jboss.org/browse/WELD-983
*/
public class SafeWeldListener implements ServletContextListener, HttpSessionListener, ServletRequestListener {
private Boolean onJBoss7 = null;
private ServletContextListener servletContextListener;
private HttpSessionListener httpSessionListener;
private ServletRequestListener servletRequestListener;
private void checkOnJBoss(String serverInfo) {
onJBoss7 = serverInfo.startsWith("JBoss Web/7.");
if (!onJBoss7) {
// Note that weldListener is not a global variable to avoid a ClassNotFoundException on JBoss 7
Listener weldListener = new Listener();
servletContextListener = weldListener;
httpSessionListener = weldListener;
servletRequestListener = weldListener;
}
}
public void contextInitialized(ServletContextEvent sce) {
checkOnJBoss(sce.getServletContext().getServerInfo());
if (onJBoss7) {
return;
}
servletContextListener.contextInitialized(sce);
}
public void contextDestroyed(ServletContextEvent sce) {
if (onJBoss7) {
return;
}
servletContextListener.contextDestroyed(sce);
}
public void sessionCreated(HttpSessionEvent se) {
if (onJBoss7) {
return;
}
httpSessionListener.sessionCreated(se);
}
public void sessionDestroyed(HttpSessionEvent event) {
if (onJBoss7) {
return;
}
httpSessionListener.sessionDestroyed(event);
}
public void requestDestroyed(ServletRequestEvent event) {
if (onJBoss7) {
return;
}
servletRequestListener.requestDestroyed(event);
}
public void requestInitialized(ServletRequestEvent event) {
if (onJBoss7) {
return;
}
servletRequestListener.requestInitialized(event);
}
}
{code}
> Portable war: Weld deployment on JBoss AS 7 should not require to remove the WeldListener line from the web.xml
> ---------------------------------------------------------------------------------------------------------------
>
> Key: WELD-983
> URL: https://issues.jboss.org/browse/WELD-983
> Project: Weld
> Issue Type: Bug
> Affects Versions: 1.1.2.Final
> Reporter: Geoffrey De Smet
> Priority: Critical
>
> When deploying on JBoss AS 7, the web.xml can't contain this:
> {code}
> <listener>
> <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
> </listener>
> {code}
> When deploying on any other app servers (JBoss AS 5.1 EAP, Tomcat 6, Jetty 6, ...) that code needs to be there.
> This makes for an unportable wars.
> Maven profiles cannot fix this in many cases:
> - You don't want to run your build 5 times to build 5 different wars. You run it once, build a generic war and use assembly descriptors to build 5 appserver specific wars from that.
> - When you're using GWT, you want run in GWT-hosted mode (which uses jetty 6) a lot. So the default web.xml needs to contain it.
> - When you're using arquillian-jboss7 (in maven and straight for your IDE), the default web.xml should not have it.
> - When you're deploying a generic war to nexus, the web.xml should contain it?
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the weld-issues
mailing list