Le dim. 17 mars 2019 à 12:56, Gaël Lalire <gael.lal...@gaellalire.fr> a écrit :
> Hello Romain, > > I already explained why I do not want to give file or jar:file URL, even > if I have it. > Maven resolver is giving me File, I create a VestigeJar from it > https://gaellalire.fr/gitlab/vestige/vestige.spi.resolver/blob/master/src/main/java/fr/gaellalire/vestige/spi/resolver/VestigeJar.java > I also create a mvn: URL accessible through getCodeBase however it is > only for policy permission you should not use openStream on it (although I > had to make it possible to get BouncyCastle working). > I get that but it also can conflict with other resolver using mvn:, open new security issues and break some libs - speaking having dropped a lib doing exactly that at work for all these reasons. > I think that SecureClassLoader is not secure enough because it only checks > classes not resources. > In a world using XML to create, configure and link instances (Spring), it > is terrible to let resources unchecked. > > That's also why VestigeClassLoader#getResource is returning vrt: URL and > not jar:file: URL. > Classloaders generally check in their own calls, not in the resource itself. Can' t you validate the resource before actually reasing it? Sounds saner and closer to security manager common configs. > The easiest way to implements War Maven artifacts deployment is to use > directly Maven resolver API and give file or jar:file URL to Tomcat. > Or war: since tomcat supports it. > I could have done that, but guess what, I'm willing to give TomEE EAR > Maven artifacts deployment after Tomcat. > In the TomEE my company uses there is a horrible CLASSPATH because they > wanted to avoid RMI call between EAR. > That is where Vestige is useful, it allows to choose which jar(s) should > be shared without any global impact. > Hmm, you use a tomee? Did you check jars.txt? Can be worth pinging tomee about it cause all is there to do it afaik. > You have 3 scopes and 2 modes in Vestige. > Mode CLASSPATH is creating one classloader with all jars inside, not easy > to share. > Mode FIXED_DEPENDENCIES is creating one classloader per jar, but implies > some good practice (use of context classloader for example). > > After setting FIXED_DEPENDENCIES you have to use the PLATFORM scope to get > it shared, this scope implies some other good practice (static field > immutable for example). > > About memory issue, I don't get your point. > I will not keep all jars content in memory I will use shared locks (fcntl) > to keep the content of RandomAccessFile the way it was when I checked it. > VestigeJar#open will create an InputStream reading from this locked > RandomAccessFile. > Oki but then you are in jar:file mode ;) > Regards, > Gaël Lalire > > Le 17 mars 2019 à 10:17, Romain Manni-Bucau <rmannibu...@gmail.com> a > écrit : > > Hi Gaël, > > In Tomee we plugged before to enrich the classloader and then tomcat -and > other libs - works normally using jar urls. > > Cant you use a listener to do that and convert m2 urls to plain jar files - > at the end it is local files i guess otherwise you generally consume too > much memory to be prod friendly? > > > Le dim. 17 mars 2019 à 09:46, Gaël Lalire <gael.lal...@gaellalire.fr> a > écrit : > > Hello Tomcat developers, > > I made a software to enable update of Java applications named Vestige. > To achieve that, Vestige use Maven, downloading Maven artifacts and > creating classloaders linked with jar inside m2 repository. > > I made it to update my IBM notes connector (POP access provider). > > The fact it is downloading Maven artifacts makes the assembly > (jar-with-dependencies of maven-assembly-plugin) of the connector not > mandatory. > > In a business project I saw that war artifacts were filling the > repository, so they had to regularly remove older version from it. > I thought it would be great if we could remove the WEB-INF/lib from the > published war and still be able to deploy it with Tomcat. > > I did that, the WebResource API helps me a lot. > However I had to disable JarScanner API (tld & fragments) because it's > using JarURLConnection and my API is not providing jar:file: nor file: URL. > My API won't provide them because I want to be able to check a pgp > signature before any use of an artifact in m2 repository. > If I check the signature and send a jar:file: or file: URL it won't be > secure because there is no way to prevent the modification of the file > after the check. > To be secure I will probably lock the file for reading, then check the > signature, and give locked InputStream. > > I would like you to change the JarScanner API/Impl so it won't rely on > JarURLConnection anymore (maybe WebResource ?). > Also I have to replace some Tomcat classes ( > > https://gaellalire.fr/gitlab/vestige_app/tomcat_vestige/commit/67dea6054c9da30047ebba3e9a376fa44b544f13 > ) > that is not future proof. > Could you provide some extension(s) so I could do the same thing without > replacing any Tomcat class ? > > Hoping that you get interested enough to help me improve the Maven > artifact deployment support, I send you my best regards. > > PS: > You can test the vwar, an xml which describes the war to deploy > (essentially repository URL, groupId, artifactId, version), deployment by : > - download (https://gaellalire.fr/vestige/) & install & run Vestige > - go to http://localhost:8480/ > - click on install > - write "tomcat" in repository application name > - write "8.0.32" in repository application version > - write "tc" in local application name > - click install button > - click play button > - go to http://localhost:8080/mywar/hello (servlet test) and > http://localhost:8080/mywar/hi.jsp?max=5 (jsp test) > > The vwar will be at $VESTIGE_BASE/app/tc/webapps/mywar.vwar > Where $VESTIGE_BASE is : > - $HOME/Vestige on Mac OS X > - $HOME/vestige on Linux > - %userprofile%\Vestige on Windows > - the place you unzip the file if you chose to install the standalone > version (a ZIP file) > > You can also see it at > > https://gaellalire.fr/gitlab/vestige_app/tomcat_vestige/blob/master/installer/src/main/resources/mywar.vwar > > tomcat_vestige sources at > https://gaellalire.fr/gitlab/vestige_app/tomcat_vestige > tomcat_vestige descriptor at > https://gaellalire.fr/vestige/repository/tomcat/tomcat-8.0.32.xml > mywar sources at https://gaellalire.fr/gitlab/vestige_app/mywar (its pom > https://gaellalire.fr/gitlab/vestige_app/mywar/blob/master/pom.xml > excludes lib folder) > > > >