Am 29.08.24 um 13:08 schrieb Mark Thomas:
On 29/08/2024 11:36, Mark Thomas wrote:
On 29/08/2024 10:06, Felix Schumacher wrote:
Am 25. August 2024 10:36:44 MESZ schrieb Mark Thomas <ma...@apache.org>:

<snip/>

Thoughts?

Personally, I am leaning towards spending the $99 so we can remove the watermark from the Tomcat docs.

Have you thought about using a tool like plantuml or mermaid-js?

I did look for free UML tools but don't recall either of those.

That way the source would be human readable. Plantuml could probably be added to the ant setup and would render SVG files or even ASCII art.

I'd like that a lot.

The files under architecture looked like sequence diagrams, which should be doable.

Agreed. I'll see if I can re-create diagrams one and two in PlantUML. If the output is comparable then we can look at integrating PlantUML into the site build.

I'm disappointed to report that I found some issues with displaying activation with both options.

mermaid-js seemed to move the messages to make space for the activation bar but then didn't display the activation bar. There were also issues with message text placement that are probably solvable but I didn't look into it.

PlantUML was better but it is opinionated on when you can activate/deactivate actors which means I can't recreate the diagrams exactly. It may well be right from a strict view of the UML spec - it is a *very* long time since I did any UML work in anger - but that strictness is a little too constraining.

Given the relatively low cost I still think the Visual Paradigm is the better option right now. I'm disappointed as I really like the idea of the source being human readable but I think the end result needs to be the priority.

While I don't object to buying a license, I would love to know, which diagram you looked at and what exactly did not work out. (the activation stuff in mermaid is brittle, but I think I managed to get them all right)

I tried to recreate https://tomcat.apache.org/tomcat-11.0-doc/architecture/startup/1_overview.png as that had the watermark on it.

For plantuml I got //www.plantuml.com/plantuml/png/bLHDRnD13BtFh_0HAeNSeoggA1SaX93Q0rTtnqcCvcCPEmtvzzG9iyl0f5LkatdlsSz-axqJnQBx69p3GVaPbU1ZpYfQS7HkEi9YFT-lW1FhVK2HBnaz5NdttZbew8lr6kvHCN12kBc15IGwV4wYc0RwdpwJLo2atx1G-hk3AIQ3bUgSfyxbAvLjs0kbwgbLX8p-Ae5jvYj6JbkJzJaZ5g47AizKliVmPdbRvIVUaYYLqogTIra92czt2dapWSu1FEu8V2KFXL1904Cmx8MgBt1--a632dZQS29lo78f9piVViMmNCBJNY6dS3IwmMUlm0AoouS4Eoe4crmC4uvZu87rw1mb3sRDEMXdhmx_pDwCNB6JgFuuJsrzfvazTIIUhdWLbnDxq48OsyHg-pEZiMp0rBszWcw9pikhWhufF23tN-g_uS_t5ZwBfNGu1VIOuu0ACbBoOh1o9B2WEMsXqCyzYSgSshMB4yrZts9t1PNUmpo9bdniuDlRnQ8Ikgj--yzl9MR3bnMUUX-_Eqf-7yDl

with the following code:

@startuml
activate Bootstrap
Bootstrap -> Bootstrap: initClassLoaders()

Bootstrap -->> Catalina ** : newInstance()

Bootstrap -> Catalina: setParentClassLoader()
activate Catalina
deactivate Catalina

Bootstrap -> Catalina: start()
activate Catalina
Catalina -> Catalina: load()
activate Catalina
Catalina -> Catalina: initNaming()
Catalina -> Catalina: parseServerXml()
activate Catalina
Catalina -->> Digester ** :
note right of Digester
  The digester creates all
  of the objects defined
  //server.xml// but only the
  Server is shown here for
  simplicity
end note

Catalina -> Digester: parse()
activate Digester

Digester -->> Server ** :
deactivate Digester
deactivate Catalina
deactivate Catalina

Catalina -> Catalina: initStream()
Catalina -> Server: init()
activate Server
deactivate Server

Catalina -> Server: start()
activate Server
Catalina -> Catalina: await()
activate Catalina
note right of Catalina
  This is where Tomcat spends
  time serving requests
end note
deactivate Catalina

Catalina -> Catalina: stop()
activate Catalina
Catalina -> Server: stop()
Catalina -> Server: destroy()
Catalina <<-- Server:
deactivate Server
deactivate Catalina

Bootstrap <<-- Catalina:
deactivate Catalina

deactivate Bootstrap
@enduml

and for mermaidjs I got https://mermaid.ink/svg/pako:eNqVVMlu2zAQ_RWCpxqN-wFE4UOTS4GiKGAfetBlLI4lplxUchTXCPLvHcparEaOG0IHSe_N9mY4z7IMGqWSCX-36Et8MFBFcIUvvOADJZknIBRfQqBEEZoBGX-sN5vxXQnjDd1bSOlbAI3xw6rjD0ZlxOysgUimNA14EvdAYI2H137XqwFTwuPxq08EnGHv8p8UPk7chPQDIvqFPPhoHGuahb7llDjnycsAzEmWYy1yJkrW5zs446tbzlikhFuMTxh_OjuxFzR8MBUmwvjK4Xo1QOrzPm4G3Ad2EE1VkwiH0VqJXY1C9199nCTA2mzLRGI47B-xpMQyHoxHnRHjWfKc5qc_zop9y069PWV2Rs-QMEmkOhy9qDGiOITYYcY1loug05IUU16dFG8qcNZpIAyWXP8ZUOKy_Gsj8DZ0tZ1b4nzccjuH8Jm3OIPzxJdM_2vy4AiXAeYNnmi7mvvAz7Hrwi64EkikBr1OWSAyDrte8niKmDdCovQ-aWZXJjSLeU-V3SBojh_D6fbl5XO2mS2NKz2_Ivl6dbHG3j8uo7G8kw6jA6N5rT5nXiH5LjgspOJXDfFXIQv_wjxoKWxPvpSKYot3Moa2qqU6gE381TaaHfcLuf_78hdLjvOC

with the following code

sequenceDiagram
    activate Bootstrap
    Bootstrap->>Bootstrap: initClassLoader()

    create participant Catalina
    Bootstrap--)Catalina: newInstance()
    Bootstrap->>+Catalina: setParentClassLoader()
    deactivate Catalina

    Bootstrap->>+Catalina: start()
    Catalina->>+Catalina: load()
    Catalina->>Catalina: initNaming()
    Catalina->>+Catalina: parseServerXml()
    create participant Digester
    Catalina--)Digester:<br>
    note right of Digester: The digester creates all<br>of the objects defined<br>in server.xml but only the<br>server is shown here for<br>simplicity
    Catalina->>+Digester: parse()
    create participant Server
    Digester--)Server: <br>
    deactivate Catalina
    deactivate Catalina
    Catalina->>Catalina: initStream()
    Catalina->>+Server: init()
    deactivate Server
    Catalina->>+Server: start()
    Catalina->>+Catalina: await()
    note right of Catalina: This is where Tomcat spends<br>time serving requests
    deactivate Catalina
    Catalina->>+Catalina: stop()
    Catalina->>Server: stop()
    Catalina->>Server: destroy()
    deactivate Catalina
    Server--)Catalina: <br>
    deactivate Server
    Catalina--)Bootstrap: <br>
    deactivate Catalina
    deactivate Bootstrap

If you want, I can give a try to recreate some other diagram of our documentation.

To summarize my findings. plantuml seemed to be more predictable and feature-rich (for sequence diagrams) than mermaidjs. But I didn't see any showstoppers with both of them.

Another alternative to use would be umlet (https://www.umlet.com/), which I used way back, but haven't looked at lately.

I hope you didn't mind the inline code and thus this long message.

Felix


Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Attachment: OpenPGP_0xEA6C3728EA91C4AF.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to