Idea Community, Web, Jetty, kilka pytań

0

Znalazłem w sobie determinację, by w zakresie większym niż hello przemigrować na Ideę Community z realnymi projektami webowymi.

Projekt jest nie-springowy na Apache Wicket. Framework jako rdzeń ma bardzo małe dependencje od Javy EE, zaledwie Servlet i Filter mu wystarcza.
Wygenerowany z archetypu, od pierwszej chwili działa, można rozbudowywać. Idea Community zgodnie ze spodziewaniem nie robi żadnych świństw.

Tak wygląda starter, który się wygenerował.

public class Start
{
	/**
	 * Main function, starts the jetty server.
	 *
	 * @param args
	 */
	public static void main(String[] args)
	{
		System.setProperty("wicket.configuration", "development");

		Server server = new Server();

		HttpConfiguration http_config = new HttpConfiguration();
		http_config.setSecureScheme("https");
		http_config.setSecurePort(8443);
		http_config.setOutputBufferSize(32768);

		ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(http_config));
		http.setPort(8080);
		http.setIdleTimeout(1000 * 60 * 60);

		server.addConnector(http);

		Resource keystore = Resource.newClassPathResource("/keystore");
		if (keystore != null && keystore.exists())
		{
			// if a keystore for a SSL certificate is available, start a SSL
			// connector on port 8443.
			// By default, the quickstart comes with a Apache Wicket Quickstart
			// Certificate that expires about half way september 2021. Do not
			// use this certificate anywhere important as the passwords are
			// available in the source.

			SslContextFactory sslContextFactory = new SslContextFactory();
			sslContextFactory.setKeyStoreResource(keystore);
			sslContextFactory.setKeyStorePassword("wicket");
			sslContextFactory.setKeyManagerPassword("wicket");

			HttpConfiguration https_config = new HttpConfiguration(http_config);
			https_config.addCustomizer(new SecureRequestCustomizer());

			ServerConnector https = new ServerConnector(server, new SslConnectionFactory(
				sslContextFactory, "http/1.1"), new HttpConnectionFactory(https_config));
			https.setPort(8443);
			https.setIdleTimeout(500000);

			server.addConnector(https);
			System.out.println("SSL access to the examples has been enabled on port 8443");
			System.out
				.println("You can access the application using SSL on https://localhost:8443");
			System.out.println();
		}

		WebAppContext bb = new WebAppContext();
		bb.setServer(server);
		bb.setContextPath("/");
		bb.setWar("src/main/webapp");

		// uncomment the next two lines if you want to start Jetty with WebSocket (JSR-356) support
		// you need org.apache.wicket:wicket-native-websocket-javax in the classpath!
		// ServerContainer serverContainer = WebSocketServerContainerInitializer.configureContext(bb);
		// serverContainer.addEndpoint(new WicketServerEndpointConfig());

		// uncomment next line if you want to test with JSESSIONID encoded in the urls
		// ((AbstractSessionManager)
		// bb.getSessionHandler().getSessionManager()).setUsingCookies(false);

		server.setHandler(bb);

		MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
		MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer);
		server.addEventListener(mBeanContainer);
		server.addBean(mBeanContainer);

		try
		{
			server.start();
			server.join();
		}
		catch (Exception e)
		{
			e.printStackTrace();
			System.exit(100);
		}
	}
}

katalog jetty zawiera

Directory of D:\java2020\idea\myproject\src\test\jetty

20-11-2020  00:38    <DIR>          .
20-11-2020  00:38    <DIR>          ..
20-11-2020  00:38             2018 jetty-http.xml
20-11-2020  00:38             2380 jetty-https.xml
20-11-2020  00:38             2138 jetty-ssl.xml
20-11-2020  00:38             1068 jetty.xml
               4 File(s)          7604 bytes

  1. Emebedded jetty będzie OK na produkcji góra 40 user, w tym 5-10 aktywnych? To właściwie nie jest pytanie, ale oczekiwanie potwierdzenia. Jetty już używałem i było z tym dobrze.
  2. Z wielu względów, w tym repozytoria JDBI3 i deltaspike (plus inne) potrzebuję CDI 2, i to będzie w zasadzie ostatnia dependecja EE

jest to jakoś udokumentowane, ale czuję się jakbym oglądał trzeci odcinek serialu
https://www.eclipse.org/jetty/documentation/current/frameworks.html#framework-cdi
https://www.eclipse.org/jetty/documentation/9.4.34.v20201102/framework-weld.html
Niby rozumiem literki, ale nie składam w całość.

W czym mam wpisać wskazane propertisy np z nazwami modułów jetty? Biedna dokumentacja mówi o jeszcze innych xmlach od jetty, np jetty-web.xml
Jak zadbam o prawidłowe moduły jetty, dependencje się ściągną? Czy mam normalnie w pom.xml dać stosowne pliki (jakie???) a w konfigach embedded Jetty tylko przywołać?

  1. Wszelkie próby buildowania nie tworzą w katalogach target ani WAR-a, ani JAR-a. Jak się to robi w Idea?
    4. Jak się w Idea robi nowy "projekt", podobno to się nazywa "module", typu biblioteka, Plain Old Java JAR, od którego by zależała aplikacja? Oczekuję, że jednocześnie ma się da developować bibliotekę(ki) i aplikację, i to żeby się budowało i startowało na przycisk Debug (w Netbeansie trzeba jawnie budować)
0

Update, POM

<?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/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>pl.anycokolwiek</groupId>
	<artifactId>myproject</artifactId>
	<packaging>war</packaging>
	<version>1.0-SNAPSHOT</version>
		<!-- TODO project name  -->
	<name>quickstart</name>
	<description></description>
	<!--
		<organization>
			<name>company name</name>
			<url>company url</url>
		</organization>
	-->
	<licenses>
		<license>
			<name>The Apache Software License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>
	<properties>
		<wicket.version>9.2.0</wicket.version>
		<jetty9.version>9.4.34.v20201102</jetty9.version>
		<slf4j.version>1.7.25</slf4j.version>
		<junit.version>5.7.0</junit.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<!-- allowed values: R7, 1.0, 1.5, 2.0 or none -->
		<wtp.version>none</wtp.version>
	</properties>
	<dependencies>
		<!--  WICKET DEPENDENCIES -->
		<dependency>
			<groupId>org.apache.wicket</groupId>
			<artifactId>wicket-core</artifactId>
			<version>${wicket.version}</version>
		</dependency>
		<!-- OPTIONAL DEPENDENCY
		<dependency>
			<groupId>org.apache.wicket</groupId>
			<artifactId>wicket-extensions</artifactId>
			<version>${wicket.version}</version>
		</dependency>
		-->

		<!-- LOGGING DEPENDENCIES - SLF4J-SIMPLE -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<!--  JUNIT DEPENDENCY FOR TESTING -->
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-engine</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

		<!--  JETTY DEPENDENCIES FOR TESTING  -->
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-webapp</artifactId>
			<scope>test</scope>
			<version>${jetty9.version}</version>
		</dependency>
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-jmx</artifactId>
			<version>${jetty9.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.example</groupId>
			<artifactId>untitled</artifactId>
			<version>1.0-SNAPSHOT</version>
			<scope>compile</scope>
		</dependency>

		<!-- uncomment if WebSocket support is needed
		<dependency>
			<groupId>org.eclipse.jetty.websocket</groupId>
			<artifactId>javax-websocket-server-impl</artifactId>
			<version>${jetty9.version}</version>
			<scope>test</scope>
		</dependency>
		-->
	</dependencies>
	<build>
		<resources>
			<resource>
				<filtering>false</filtering>
				<directory>src/main/resources</directory>
			</resource>
			<resource>
				<filtering>false</filtering>
				<directory>src/main/java</directory>
				<includes>
					<include>**</include>
				</includes>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<filtering>false</filtering>
				<directory>src/test/resources</directory>
			</testResource>
			<testResource>
				<filtering>false</filtering>
				<directory>src/test/java</directory>
				<includes>
					<include>**</include>
				</includes>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</testResource>
		</testResources>
		<plugins>
			<plugin>
				<inherited>true</inherited>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<source>11</source>
					<target>11</target>
					<encoding>UTF-8</encoding>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.eclipse.jetty</groupId>
				<artifactId>jetty-maven-plugin</artifactId>
				<version>${jetty9.version}</version>
				<configuration>
					<systemProperties>
						<systemProperty>
							<name>maven.project.build.directory.test-classes</name>
							<value>${project.build.directory}/test-classes</value>
						</systemProperty>
					</systemProperties>
					<jettyXml>${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml</jettyXml>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.10</version>
				<configuration>
					<downloadSources>true</downloadSources>
					<wtpversion>${wtp.version}</wtpversion>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<repositories>
		<repository>
			<id>Apache Nexus</id>
			<url>https://repository.apache.org/content/repositories/snapshots/</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
	</project>

0

Re. 3
Budowanie zadziałało.
Otworzyłem wewnętrzny terminal Idei

mvn package

To jest "ortodoksyjne" użycie? (nie mówię o wojnie nt WAR, to inna sprawa)

1

Nie za bardzo rozumiem z czym walczysz. I co ma do tego Idea?
przemigrować na Ideę Community ?
Od wielu lat używam intellij i nigdy żadnego projektu nie migrowałem... co najwyżej usuwałem błędy powodujące, że coś działało tylko pod eclipse (jakieś patologie ciąży u architektów).

0
  1. Przestawię prostymi środkami obecny stan "migawkowy" pom.xml z WAR na fat JAR ?
    Śni mi się, że to pattern na kilka linijek XMLa, ale biegłości brakuje

  2. Generalnie jest fajnie z tym Community.
    Zablokowane jest wsparcie CSS, które edytuję raz na 3 lata :)
    HTML-ki Wicketa są wysoce standardowe (to nie HTML z JSF), tak, że powymierały pluginy do wszystkich IDE, które miały dawać dedykowane wsparcie - jako zbędne.
    Jak na razie nie odczuwam żadnych braków co do IDE.

0

https://github.com/Pharisaeus/SpringScaffoldApplication dość starożytne ale działało budowanie runnable jara z embedded jetty ;]

0
  1. CDI:
    Ja naszoł takoj fail
    https://java.md/cdi-and-jetty-maven-plugin-setup/
    mam już częściowe efekty, być może pełne dopiero z przemigrowaniem do fat-jar.

  2. Idea
    Jest dodawanie dependencji z GUI?
    Jak na razie klepię w pom.xml tekstowo, ale chciałbym wygody jak w pozostałych IDE "Add dependency..."

0

Jest dodawanie dependencji z GUI?

Jest. Jest nawet szukajka ;) Po prostu użyj gdzieś w kodzie nazwy klasy a następnie kliknij w co podpowie IDE. Podpowie "create class..." ale też "add dependency" i wyszuka ci wszystkie potencjalne libki które mają taką klasę

0

Integracja Jetty z CDI projektu webowego z CDI jest bajecznie łatwa, a w/w materiały dziś "niezbyt wartościowe". Tu jest dobra wskazówka.
https://docs.jboss.org/weld/reference/3.1.5.SP1/en-US/html_single/#_the_numberguess_example_in_apache_tomcat_or_jetty
a) dependencja
```xml
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet-core</artifactId>
<version>2.4.8.Final</version>
</dependency>


b) listener w web.xml
        ```xml
     <listener>
		<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
	</listener>
	<resource-env-ref>
		<resource-env-ref-name>BeanManager</resource-env-ref-name>
		<resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
	</resource-env-ref>

To wszystko. Plus konfiguracja Wicketa do w/w, ale to "my" wiemy.
Nie wypowiadam się, czy ewentualnie JSF by działało, bo tam hardkoru może jest więcej.
A najbardziej poszukiwanym skillem Autum 2020 jest nie wdupczyć się na dependencje z jakarta (tak, musiałem podkreślić to słowo - na razie Elektrody tu nie ma)

1 użytkowników online, w tym zalogowanych: 0, gości: 1