Ich habe versucht, CAS webapp wie eine ausführbare WAR zu starten, und zunächst habe ich zwei mögliche Lösungen gefunden. Aber dafür gäbe es eine bessere Lösung?Wie ein Webserver in CAS webapp release
1) Erstellen einer Hauptklasse zum Starten eines eingebetteten Jetty-Servers und der CAS WAR-Datei zum Ausführen;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.tomcat.InstanceManager;
import org.apache.tomcat.SimpleInstanceManager;
import org.eclipse.jetty.annotations.ServletContainerInitializersStarter;
import org.eclipse.jetty.apache.jsp.JettyJasperInitializer;
import org.eclipse.jetty.plus.annotation.ContainerInitializer;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.h2.jdbcx.JdbcDataSource;
public class CasServerEmbedded {
public static void main(String[] args) throws Exception {
// Create the server
Server server = new Server(8080);
// Enable parsing of jndi-related parts of web.xml and jetty-env.xml
org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList
.setServerDefault(server);
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
"org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration");
// Create a WebApp
final WebAppContext webAppContext = new WebAppContext();
webAppContext.setAttribute("javax.servlet.context.tempdir", getScratchDir());
webAppContext.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/.*taglibs.*\\.jar$");
webAppContext.setAttribute("org.eclipse.jetty.containerInitializers", jspInitializers());
webAppContext.setAttribute(InstanceManager.class.getName(), new SimpleInstanceManager());
webAppContext.addBean(new ServletContainerInitializersStarter(webAppContext), true);
webAppContext.setWar("C:\\temp\\cas-server-webapp-4.2.1.war");
server.setHandler(webAppContext);
final JdbcDataSource jdbcDataSource = new JdbcDataSource();
jdbcDataSource.setURL("jdbc:h2:c:\\temp\\teste;mv_store=false");
jdbcDataSource.setUser("sa");
jdbcDataSource.setPassword("sa");
jdbcDataSource.getConnection();
new org.eclipse.jetty.plus.jndi.Resource(webAppContext, "jdbc/mydatasource", jdbcDataSource);
server.start();
server.join();
}
/**
* Establish Scratch directory for the servlet context (used by JSP
* compilation)
*/
private static File getScratchDir() throws IOException {
File tempDir = new File(System.getProperty("java.io.tmpdir"));
File scratchDir = new File(tempDir.toString(), "embedded-jetty-jsp");
if (!scratchDir.exists()) {
if (!scratchDir.mkdirs()) {
throw new IOException("Unable to create scratch directory: " + scratchDir);
}
}
return scratchDir;
}
/**
* Ensure the jsp engine is initialized correctly
*/
private static List<ContainerInitializer> jspInitializers() {
JettyJasperInitializer sci = new JettyJasperInitializer();
ContainerInitializer initializer = new ContainerInitializer(sci, null);
List<ContainerInitializer> initializers = new ArrayList<ContainerInitializer>();
initializers.add(initializer);
return initializers;
}
}
2) Mit Maven ich das Ziel Anlegestelle ausführen: Lauf Krieg, die die WAR-Overlay innerhalb Jetty Embedded Server startet.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd ">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-overlay</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<properties>
<cas.version>4.2.1</cas.version>
<maven-jetty-plugin.version>9.3.6.v20151106</maven-jetty-plugin.version>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp</artifactId>
<version>${cas.version}</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>cas</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
<overlays>
<overlay>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp</artifactId>
</overlay>
</overlays>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${maven-jetty-plugin.version}</version>
<configuration>
<jettyXml>${basedir}/etc/jetty/jetty.xml</jettyXml>
<systemProperties>
<systemProperty>
<name>org.eclipse.jetty.annotations.maxWait</name>
<value>240</value>
</systemProperty>
</systemProperties>
<webApp>
<contextPath>/cas</contextPath>
<overrideDescriptor>${basedir}/etc/jetty/web.xml</overrideDescriptor>
</webApp>
<webAppConfig>
<allowDuplicateFragmentNames>true</allowDuplicateFragmentNames>
</webAppConfig>
<jvmArgs>-Dlog4j.configurationFile=/etc/cas/log4j2.xml -Xdebug
-Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n</jvmArgs>
</configuration>
</plugin>
</plugins>
<finalName>cas</finalName>
</build>
</project>
Wie Sie sehen können, beide Lösungen starten CAS in einem eigenständigen Web-Server, aber was ich versuche zu erreichen ist etwas, was Jenkins tut, eine WAR-Datei, die durch eine einfache Befehlszeile gestartet werden kann: java - jar CAS.war
Gibt es eine Möglichkeit, diesen Maven Build in eine WAR-Datei zu exportieren, die über Jetty embedded läuft?
TKS,
Ok, aber wo kann ich diese CAS 5 Version bekommen? Bisher ist nur die Version 4.2.1 auf Maven verfügbar. Gibt es eine Roadmap? –
Es ist dies: https://github.com/apereo/cas und diese: https://github.com/apereo/cas/issues (Filter von Meilenstein) und diese: https: // github.com/apereo/cas/milestones und das: https://github.com/apereo/cas-overlay-template/tree/5.0 v5 ist immer noch in dev. Erwarte Rauheit. –
Ich habe nichts gefunden, wo erwähnt wird, dass CAS v5 über Spring Boot läuft. Wo hast du es gesehen? –