Embedded Jetty und MyFaces

Nexi

Grünschnabel
Hiho,

habe hier ein sehr fieses Problem.

Zunächst mal die Grundlagen:
Ich habe eine WebApplication welche ich mit MyFaces 1.2.7 laufen habe.
Nun möchte ich gern für einige Klassen UnitTests schreiben.

Soviel zu den Grundlagen. Mein Problem liegt darin, das ich für diese UnitTests (welche ich mit HtmlUnits abhandeln möchte) einen Server benötige, auf dem die Application im Testmodus läuft.

Hierfür habe ich mir Jetty inkl des Maven-Jetty-Plugins (fürs bauen der app).
Was auch wunderbar funktioniert, sobald ich die Tests über die Kommandozeile starte, wird der Jetty-Server hochgefahren und die Tests laufen durch.

Wenn ich allerdings die Tests aus Eclipse herraus starten möchte, brauch ich diesen Server auch, der wiederrum nicht automatisch (wie in der pom.xml definiert) gestartet wird. Hierzu haben ich mir folgenden Embedded Code erstellt, der mir einen WebServer starten soll (natürlich mit den normalen Einstellungen aus der web.xml, wie als wenn ich ihn von hand in der Kommandozeile starten würde).

Hier erstmal der Code:

Code:
public class TestServer
{
    private static Server _server;
    
    public static void startServer() throws Exception
    {
        if(_server == null)
        {
            _server = new Server(8888);
            WebAppContext webapp = new WebAppContext(_server, "src/main/webapp", "/yp-webapp");
            ServletHolder facesServlet = new ServletHolder(new FacesServlet());
            facesServlet.setInitOrder(1);
            webapp.addServlet(facesServlet, "*.jsf");
            _server.addHandler(webapp);
            webapp.getServer().start();
        }
    }
}

Mein Problem liegt darin, dass der MayFaces context nicht initalisiert werden kann.
Hier der Fehler der geworfen wird:

Code:
java.lang.IllegalStateException: No Factories configured for this Application. This 
happens if the faces-initialization does not work at all - make sure that you properly
 include all configuration settings necessary for a basic faces application and that all 
the necessary libs are included. Also check the logging output of your web application and your container for any exceptions!
If you did that and find nothing, the mistake might be due to the fact that you use 
some special web-containers which do not support registering context-listeners via
 TLD files and a context listener is not setup in your web.xml.
A typical config looks like this;
<listener>
  <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>

Den Ursprung des Fehlers konnte ich auch schon Lokalisieren.
Während der Initalisierung des Contextes wird irgendwann eine Klasse namens FactoryFinder aufgerufen in welcher verschiedene Factories beinhaltet, eben auch die Factory für den Faces-Context.

Problem hierbei, die Variable _registeredFactoryNames ist leer.
Somit kann kein FacesContext erstellt werden und die Abarbeitung endet in obigen Fehlermeldung.

Wie gesagt wenn ich den Server von hand start: mvn jetty:run (oder einfach den Tomcat starte auf dem die Webapp auf meine Produktionsumgebung läuft) läuft alles wie geschmiert.

Ich hoffe man kann mir helfen.
grüße cinteX
 

Neue Beiträge

Zurück