[
https://issues.jboss.org/browse/WELD-983?page=com.atlassian.jira.plugin.s...
]
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