Добавлен TomcatStarter

This commit is contained in:
2024-07-02 18:19:30 +03:00
parent 410ea4d826
commit 306ae182c1
9 changed files with 158 additions and 46 deletions

20
.idea/compiler.xml generated
View File

@ -32,6 +32,26 @@
</processorPath>
<module name="sample.main" />
</profile>
<profile name="Gradle Imported" enabled="true">
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/biz.redsoft.ncore/ncoreAnnotationProcessor/1.0.10/52f347369a8b6f7467f9be747d42f1386c632c2c/ncoreAnnotationProcessor-1.0.10.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.auto.service/auto-service/1.0.1/c9779f7372192a96c957a3df1faeeabd07881085/auto-service-1.0.1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.13.4/jackson-databind-2.13.4.jar" />
<entry name="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.13.4/jackson-core-2.13.4.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.auto.service/auto-service-annotations/1.0.1/ac86dacc0eb9285ea9d42eee6aad8629ca3a7432/auto-service-annotations-1.0.1.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.auto/auto-common/1.2/ca270191fd7d2a7297da7c8f29184206df10c67d/auto-common-1.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.jar" />
<entry name="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.13.4/jackson-annotations-2.13.4.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar" />
</processorPath>
<module name="biz.redsoft.sample.sample.main" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="biz.redsoft.sample-sample" target="1.8" />

2
.idea/gradle.xml generated
View File

@ -4,8 +4,8 @@
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="1.8" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />

View File

@ -26,5 +26,15 @@
<option name="name" value="maven" />
<option name="url" value="https://nexus.red-soft.ru/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="maven3" />
<option name="name" value="maven3" />
<option name="url" value="https://ncore-repo.red-soft.ru/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenLocal" />
<option name="name" value="MavenLocal" />
<option name="url" value="file:$MAVEN_REPOSITORY$/" />
</remote-repository>
</component>
</project>

3
.idea/modules.xml generated
View File

@ -3,6 +3,9 @@
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/modules/biz.redsoft.sample-sample.iml" filepath="$PROJECT_DIR$/.idea/modules/biz.redsoft.sample-sample.iml" group="sample" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/biz.redsoft.sample.sample.iml" filepath="$PROJECT_DIR$/.idea/modules/biz.redsoft.sample.sample.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/biz.redsoft.sample.sample.main.iml" filepath="$PROJECT_DIR$/.idea/modules/biz.redsoft.sample.sample.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/biz.redsoft.sample.sample.test.iml" filepath="$PROJECT_DIR$/.idea/modules/biz.redsoft.sample.sample.test.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/sample.main.iml" filepath="$PROJECT_DIR$/.idea/modules/sample.main.iml" />
</modules>
</component>

View File

@ -35,6 +35,8 @@ repositories {
dependencies {
implementation 'javax.servlet:javax.servlet-api:3.1.0'
testCompileClasspath 'org.junit.jupiter:junit-jupiter:5.8.2'
testImplementation 'org.apache.tomcat.embed:tomcat-embed-core:9.0.76'
testImplementation 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.76'
runtimeClasspath files(ncoreGenerateControlDataJar)
runtimeClasspath files(genJar)
annotationProcessor 'biz.redsoft.ncore:ncoreAnnotationProcessor:1.0.+'

View File

@ -1,45 +0,0 @@
/*
* Copyright (C) 2023 Red Soft Corporation.
*
* This file is part of Red nCore.
*
* Red nCore is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* Red nCore is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Red nCore; see the file COPYING. If not, write to the
* Red Soft Corporation, 117105, Russia, Moscow, Nagornyy proyezd, 5.
*
* Linking this library statically or dynamically with other modules is
* making a combined work based on this library. Thus, the terms and
* conditions of the GNU General Public License cover the whole
* combination.
*
* As a special exception, the copyright holders of this library give you
* permission to link this library with independent modules to produce an
* executable, regardless of the license terms of these independent
* modules, and to copy and distribute the resulting executable under
* terms of your choice, provided that you also meet, for each linked
* independent module, the terms and conditions of the license of that
* module. An independent module is a module which is not derived from
* or based on this library. If you modify this library, you may extend
* this exception to your version of the library, but you are not
* obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/
package biz.redsoft.sample;
public class MainForm extends biz.redsoft.ncore.client.MainForm {
public static void main(String[] args) throws Throwable {
biz.redsoft.ncore.client.MainForm.main(args);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 953 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1016 B

View File

@ -0,0 +1,122 @@
/*
* Copyright (C) 2017 Red Soft Corporation.
*
* This file is part of Red nCore.
*
* Red nCore is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* Red nCore is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Red nCore; see the file COPYING. If not, write to the
* Red Soft Corporation, 117105, Russia, Moscow, Nagornyy proyezd, 5.
*
* Linking this library statically or dynamically with other modules is
* making a combined work based on this library. Thus, the terms and
* conditions of the GNU General Public License cover the whole
* combination.
*
* As a special exception, the copyright holders of this library give you
* permission to link this library with independent modules to produce an
* executable, regardless of the license terms of these independent
* modules, and to copy and distribute the resulting executable under
* terms of your choice, provided that you also meet, for each linked
* independent module, the terms and conditions of the license of that
* module. An independent module is a module which is not derived from
* or based on this library. If you modify this library, you may extend
* this exception to your version of the library, but you are not
* obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/
package biz.redsoft.sample;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.servlet.ServletException;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Server;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.FileResourceSet;
import org.apache.catalina.webresources.StandardRoot;
import org.apache.tomcat.util.scan.StandardJarScanner;
/**
* @author Victor Bellavin
*/
public class TomcatStarter {
private String contextPath = "/ncore";
private int port = 8080;
private int shutdownPort = 8020;
private String shutdownCommand = "SHUTDOWN";
public void start() throws ServletException, LifecycleException {
System.setProperty("catalina.home", new File(".").getAbsolutePath());
final Tomcat tomcat = new Tomcat();
tomcat.setPort(port);
tomcat.setBaseDir(".");
tomcat.getHost().setAppBase(".");
tomcat.getConnector(); // initialize standard HTTP 1.1 connector
tomcat.enableNaming();
final Server server = tomcat.getServer();
server.setPort(shutdownPort);
server.setShutdown(shutdownCommand);
final StandardContext webContext = (StandardContext) tomcat.addWebapp(contextPath, "src/main/webapp");
webContext.setUseNaming(true);
final WebResourceRoot resources = new StandardRoot(webContext);
//aliases to resources
final String base = ap("");
resources.addPreResources(new DirResourceSet(resources, "/META-INF/resources", ap("src/main/resources"), "/META-INF/resources"));
//resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/classes/export_templates", base, "/export_templates"));
if (new File(base, "ncore-properties-local.xml").exists())
resources.addPreResources(new FileResourceSet(resources, "/WEB-INF/ncore-properties-local.xml", base, "/ncore-properties-local.xml"));
//resources.addPreResources(new FileResourceSet(resources, "/WEB-INF/ncore-properties-local-openid.xml", base, "/ncore-properties-local-openid.xml"));
resources.addPreResources(new FileResourceSet(resources, "/WEB-INF/logback.xml", base, "/logback.xml"));
webContext.setResources(resources);
// IDEA не всегда корректно формирует пути. Отключим проверку ресурсов.
((StandardJarScanner)webContext.getJarScanner()).setScanClassPath(false);
webContext.setWorkDir("build/tomcat/work");
tomcat.start();
server.await();
tomcat.stop();
}
private String ap(String s) {
return new File(s).getAbsolutePath();
}
public void stop() throws IOException {
final InetAddress serverAddress = InetAddress.getByName("localhost");
final Socket socket = new Socket(serverAddress, shutdownPort);
try (OutputStream os = socket.getOutputStream()) {
final byte[] buffer = shutdownCommand.getBytes();
os.write(buffer, 0, buffer.length);
os.flush();
}
}
public static void main(String[] args) throws ServletException, LifecycleException, IOException {
if (args.length > 0) {
String command = args[0];
if ("start".equals(command))
new TomcatStarter().start();
else if ("stop".equals(command))
new TomcatStarter().stop();
}
}
}