[JAVA] J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
Aperçu
Présenté avant Application Web remplie de bogues ["EasyBuggy"](https://github.com/k-tamura/easybuggy/blob/master/README Réimplémentez le clone basé sur Spring Boot "EasyBuggy Boot" de .jp.md) dans Kotlin Je l'ai vu ("EasyBuggy Bootlin").
Vous pouvez le télécharger depuis cette page et le démarrer avec la commande suivante.
java -jar ROOT.war
: writing_hand_tone1: Java 8 ou supérieur est requis pour démarrer. Si vous définissez `java -jar ROOT.war --port = 9000`, il démarrera sur le port 9000. td> tr>
En ajoutant l'option Java comme indiqué ci-dessous, vous pouvez générer des journaux, déboguer et surveiller avec JMX. Il limite également l'utilisation maximale de la mémoire, ce qui le rend plus sujet à des problèmes tels que OutOfMemoryError.
java -Xmx256m -XX:MaxPermSize=64m -XX:MaxDirectMemorySize=90m -XX:+UseSerialGC -Xloggc:logs/gc.log -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -XX:GCTimeLimit=15 -XX:GCHeapFreeLimit=50 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/ -XX:ErrorFile=logs/hs_err_pid%p.log -agentlib:jdwp=transport=dt_socket,server=y,address=9009,suspend=n -Dderby.stream.error.file=logs/derby.log -Dderby.infolog.append=true -Dderby.language.logStatementText=true -Dderby.locks.deadlockTrace=true -Dderby.locks.monitor=true -Dderby.storage.rowLocking=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7900 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -ea -jar ROOT.war
Lorsque le message suivant s'affiche, l'application Web a été lancée.
2017-10-19 16:36:01.065 INFO 5304 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-10-19 16:36:01.075 INFO 5304 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0
2017-10-19 16:36:01.242 INFO 5304 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-10-19 16:36:01.249 INFO 5304 --- [ main] o.t.e.Easybuggy4ktApplicationKt : Started Easybuggy4ktApplicationKt in 37.355 seconds (JVM running for 38.916)
Lorsque vous visitez http: // localhost: 8080, vous verrez la page principale.
Le démarrage est un peu lent (environ 15 secondes. EasyBuggy démarre dans 3 secondes ...)
Méthodes de démarrage autres que celles ci-dessus
Vous pouvez également le démarrer avec git clone et gradle bootRun .
$ git clone https://github.com/k-tamura/easybuggy4kt
$ cd easybuggy4kt
$ gradle bootRun
`server.port = $ {port: 8080}` ligne dans `src / main / resources / application.properties` est remplacée par` server.port = 9000` Ensuite, il démarrera sur le port 9000. td> tr>
Vous pouvez également déployer ROOT.war dans un conteneur Java tel que Tomcat 8.5 et cela fonctionnera également.
Utilisation de cette application
Semblable à "Easy Buggy" et "Easy Buggy Boot", le but est de reproduire, analyser et approfondir la compréhension des différents obstacles. La raison pour laquelle je l'ai réimplémenté à Kotlin était parce que je voulais savoir ce qui suit:
――Est-il possible de créer des vulnérabilités et des fuites de ressources dans les applications implémentées avec Kotlin?
- Que faut-il pour réimplémenter une application implémentée en Java dans Kotlin?
- Kotlin améliore-t-il la lisibilité en réimplémentant les applications implémentées par Java?
démo
Ce qui suit est une démonstration de l'accès à la page où la fuite de mémoire se produit plusieurs fois et de l'observation de l'état de la fuite de mémoire.
Différences de configuration
Les principales différences dans les configurations de «EasyBuggy», «EasyBuggy Boot» et «EasyBuggy Bootlin» sont les suivantes.
Différence |
EasyBuggy |
EasyBuggy Boot |
EasyBuggy Bootlin |
Langue |
Java |
Java |
Kotlin |
Technologie de base |
Servlet 3.0.1 |
Spring Boot 1.5.6 (Servlet 3.0.1) |
Spring Boot 1.5.7 (Servlet 3.0.1) |
Couche de présentation |
inutilisé(Certains JSP 2.2 + JSTL 1.2) |
Thymeleaf 2.1.5 (Certains JSP 2.3 + JSTL 1.2) |
Thymeleaf 2.1.5 (Certains JSP 2.3 + JSTL 1.2) |
Conteneur de servlet |
Tomcat 7.0.37 |
Tomcat 8.5.16 |
Tomcat 8.5.20 |
Client DB/serveur |
JDBC / Derby 10.8.3.0 |
Spring JDBC 4.3.9 / Derby 10.12.1.1 (Pour Java 7), Ou 10.13.1.1 (Pour Java 8) |
Spring JDBC 4.3.11 / Derby 10.13.1.1 |
Client LDAP/serveur |
Apache DS Client API 1.0.0 / Server 1.5.5 |
Spring LDAP 2.3.1 / unboundid-ldapsdk 3.2.1 |
Spring LDAP 2.3.1 / unboundid-ldapsdk 3.2.1 |
Email |
JavaMail 1.5.1 |
JavaMail 1.5.1 (Java Mail introduit par Spring Boot Mail 1.5.Remplacer 6) |
JavaMail 1.5.1 (Java Mail introduit par Spring Boot Mail 1.5.Remplacer 6) |
Outils de développement |
Aucun |
Spring Boot Developer Tools 1.5.6 |
Spring Boot Developer Tools 1.5.7 |
Outil de création |
Maven |
Maven |
Gradle |
Java |
Prend en charge Java 6 et supérieur |
Prend en charge Java 7 et supérieur |
Prend en charge Java 8 et supérieur |
Comment construire
Vous pouvez créer un fichier war exécutable et déployable avec la commande suivante:
$ gradle clean build
Méthode de développement
Pour le développement d'EasyBuggy Bootlin, nous utilisons IntelliJ IDEA de JetBrains, qui a développé Kotlin. J'ai choisi IntelliJ plutôt que STS car il avait des fonctionnalités utiles comme la conversion de programmes Java en programmes Kotlin. Grâce à IntelliJ, j'ai pu développer cette application en un temps assez court.
Pour accélérer le développement, démarrez EasyBuggy Bootlin avec gradle bootRun tout en construisant en continu avec gradle build --continuous . Avec cette méthode, si vous modifiez le code source, Spring Boot DevTools le rechargera automatiquement pour refléter la modification.
| |