# Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss)



## Björn K. (13. Jun 2007)

Hallo!

Ich habe mit dem WTP eine J2EE-Anwendung mit JSF erstellt, auf dem Tomcat läuft sie. Sie soll aber auf einen JBoss deployt werden. Ich habe einfach die Target-Runtime geändert, erhalte jetzt aber folgende Fehlermeldung:


```
3:24:57,789 INFO  [TomcatDeployer] deploy, ctxPath=/containeraufstellung, warUrl=.../tmp/deploy/tmp52151containeraufstellung-exp.war/
13:24:58,867 INFO  [WebappClassLoader] validateJarFile(C:\server\jboss-4.0.5.GA\server\default\.\tmp\deploy\tmp52151containeraufstellung-exp.war\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
13:24:58,945 ERROR [STDERR] log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable.
13:24:58,945 ERROR [STDERR] log4j:ERROR The class "org.apache.log4j.spi.ErrorHandler" was loaded by 
13:24:58,945 ERROR [STDERR] log4j:ERROR [WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@1b93526
```

Muss ich was anderes anstelle der servlet-api nehmen?


----------



## bronks (13. Jun 2007)

Björn K. hat gesagt.:
			
		

> ... Muss ich was anderes anstelle der servlet-api nehmen?


Ist Deine App für die Servlet Spec 2.3 gebaut, was ich bei JSF nicht glaube?


----------



## Björn K. (13. Jun 2007)

Danke für deine Antwort!

Woran sehe ich das? Also ich habe als Grundlage das Quickstart-Tutorial jsftutorials.net genommen und später die Version in der web.xml von 2.3 auf 2.4 geändert damit ich <dispatcher>-Tags verwenden kann. Im Tomcat ging das auch alles soweit. 


```
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	version="2.4">

	<display-name>Hallo</display-name>
	<description>blasdklfjwelf</description>

	<context-param>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>server</param-value>
	</context-param>

	<context-param>
		<param-name>javax.faces.CONFIG_FILES</param-name>
		<param-value>/WEB-INF/faces-config.xml</param-value>
	</context-param>

	<listener>
		<listener-class>
			com.sun.faces.config.ConfigureListener
		</listener-class>
	</listener>

	
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>


	
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>

	<filter>

		<filter-name>extensionsFilter</filter-name>

		<filter-class>
			org.apache.myfaces.webapp.filter.ExtensionsFilter
		</filter-class>
		<init-param>
			<description>
				Set the size limit for uploaded files. Format: 10 - 10
				bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB
			</description>
			<param-name>uploadMaxFileSize</param-name>
			<param-value>100m</param-value>

		</init-param>
		<init-param>
			<description>
				Set the threshold size - files below this limit are
				stored in memory, files above this limit are stored on
				disk.

				Format: 10 - 10 bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB
			</description>
			<param-name>uploadThresholdSize</param-name>
			<param-value>100k</param-value>
		</init-param>

	</filter>

	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry
		-->
		<servlet-name>Faces Servlet</servlet-name>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>

	<!-- extension mapping for serving page-independent resources (javascript, stylesheets,
		images, etc.)  -->
	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>

	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>*.faces</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>
	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>/faces/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>
	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>*.jsf</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>
	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>/jsf/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>


</web-app>
```


----------



## bronks (13. Jun 2007)

Björn K. hat gesagt.:
			
		

> Danke für deine Antwort!
> 
> Woran sehe ich das? Also ich habe als Grundlage das Quickstart-Tutorial jsftutorials.net genommen und später die Version in der web.xml von 2.3 auf 2.4 geändert damit ich <dispatcher>-Tags verwenden kann. Im Tomcat ging das auch alles soweit.


Naja, dann ist es 2.4. Das unterstützt der JBoss4.0.5 nicht. Probier evtl. den JBoss4.2.


----------



## Björn K. (13. Jun 2007)

Hallo Danke!

ich habe folgendes gemacht:

Ich habe ein Ant-Script geschrieben und ein exclude für die servlet-api.jar angegeben und somit nicht in das WAR-File eingebracht.

Ein zweiter Fehler für JSF-Anwendungen trat auch auf, konnte folgendermaßen behoben werden:


```
One way to solve the classloader issue is by reverting the JBoss configuration to the old classloading model.
Edit the file jboss/server/default/jbossweb-tomcat55.sar/META-INF/jboss-service.xml
Change the following lines:
<attribute name="Java2ClassLoadingCompliance">true</attribute>
<attribute name="UseJBossWebLoader">true</attribute> 
(both are default set to false in jboss-4.0.2).
```


----------

