{"id":20474157,"url":"https://github.com/marschall/seaside-servlet-squeak","last_synced_at":"2026-05-27T20:31:54.108Z","repository":{"id":57721323,"uuid":"204743996","full_name":"marschall/seaside-servlet-squeak","owner":"marschall","description":"run Seaside inside a servlet container","archived":false,"fork":false,"pushed_at":"2022-08-16T13:18:52.000Z","size":84,"stargazers_count":1,"open_issues_count":8,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-12T22:25:45.928Z","etag":null,"topics":["graalvm","seaside","servlet","squeak"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marschall.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-27T16:26:01.000Z","updated_at":"2022-08-16T11:46:27.000Z","dependencies_parsed_at":"2022-09-26T21:41:26.063Z","dependency_job_id":null,"html_url":"https://github.com/marschall/seaside-servlet-squeak","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/marschall/seaside-servlet-squeak","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marschall%2Fseaside-servlet-squeak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marschall%2Fseaside-servlet-squeak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marschall%2Fseaside-servlet-squeak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marschall%2Fseaside-servlet-squeak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marschall","download_url":"https://codeload.github.com/marschall/seaside-servlet-squeak/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marschall%2Fseaside-servlet-squeak/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33583394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["graalvm","seaside","servlet","squeak"],"created_at":"2024-11-15T14:28:25.105Z","updated_at":"2026-05-27T20:31:54.093Z","avatar_url":"https://github.com/marschall.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"Seaside Servlet Bridge for Squeak\n=================================\n\nRun [Seaside](http://www.seaside.st) in a Servlet container using [TruffleSqueak](https://github.com/hpi-swa/trufflesqueak).\n\nUsage\n-----\n\nAdd the dependency to your project\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.marschall\u003c/groupId\u003e\n  \u003cartifactId\u003eseaside-servlet-squeak\u003c/artifactId\u003e\n  \u003cversion\u003e0.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nAdd the servlet to your `web.xml`\n\n\n```xml\n\u003cservlet\u003e\n  \u003cservlet-name\u003eSeasideGraalSqueakBridgeServlet\u003c/servlet-name\u003e\n  \u003cservlet-class\u003ecom.github.marschall.seaside.servlet.squeak.SeasideGraalSqueakBridgeServlet\u003c/servlet-class\u003e\n  \u003cinit-param\u003e\n    \u003cparam-name\u003esmalltalk.ImagePath\u003c/param-name\u003e\n    \u003cparam-value\u003e/WEB-INF/squeak/graalsqueak-1.0.0-rc2-seaside.image\u003c/param-value\u003e\n  \u003c/init-param\u003e\n  \u003casync-supported\u003efalse\u003c/async-supported\u003e\n\u003c/servlet\u003e\n\n\u003cservlet-mapping\u003e\n  \u003cservlet-name\u003eSeasideGraalSqueakBridgeServlet\u003c/servlet-name\u003e\n  \u003curl-pattern\u003e/*\u003c/url-pattern\u003e\n\u003c/servlet-mapping\u003e\n```\n\n* load GraalSqueak-Core\n* load Seaside\n\n\n```\nInstaller ensureRecentMetacello. \nMetacello new\n baseline:'Seaside3';\n repository: 'github://SeasideSt/Seaside:develop/repository';\n load\n```\n\n* load `Servlet-Seaside` from this repository\n* stop `WAWebServerAdaptor` as it fails during startup on TruffleSqueak\n\nAnd run with GraalVM.\n\nMake sure you explode WARs for Tomcat, this means having `unpackWARs=\"true\"` on the `\u003cHost\u003e` element of `server.xml`. See [Tomcat Web Application Deployment](https://tomcat.apache.org/tomcat-9.0-doc/deployer-howto.html).\n\nMake sure you have TruffleSqueak installed in GraalVM.\n\nHave a look at [marschall/seaside-servlet-squeak-demo](https://github.com/marschall/seaside-servlet-squeak-demo) for a complete demo project.\n\nRequirements\n------------\n\n * GraalVM 22.2\n * TruffleSqueak\n  * `gu install -u https://github.com/hpi-swa/graalsqueak/releases/download/1.0.0-rc2/graalsqueak-component-1.0.0-rc2-for-GraalVM-19.2.0.1.jar`\n * Jakarka Servlet 5\n\nLimitations\n-----------\n\n* Limitations inherited from TruffleSqueak\n  * As TruffleSqueak is currently not thread safe we are limited to one concurrent request. This is especially damning in case of blocking IO like database access.\n  * Stack traces currently are not very useful.\n  * Continuations are not supported.\n  * Initial performance before warm up is not good compared to OpenSmalltalk VM.\n  * Startup is not good compared to OpenSmalltalk VM.\n  * Memory consumption and allocation rate are higher compared to OpenSmalltalk VM\n* Asynchronous web request processing is not supported.\n\nJMX\n---\n\nIncluded is a small framework to register Squeak objects as MBeans. To create a custom one:\n\n* sublcass `WAMBean`\n* override `#objectName`, check out the [ObjectName](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/javax/management/ObjectName.html) class comment for information about the syntax\n* add methods with `\u003cattribute\u003e` and `\u003coperation\u003e` pragmas\n* have a look at `WAAdminMBean` for an example\n\nTips \u0026 Tricks\n-------------\n\nEnable Graal compilation logging\n\n    export CATALINA_OPTS=\"-Dgraal.TraceTruffleCompilation=true\"\n\nTo make WAUrlDecodingFunctionalTest pass use, this is not needed in general\n\n    export CATALINA_OPTS=\"-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true\"\n\nIf you have the Tomcat examples application installed (per default) this overrides the Seaside examples.\n\nWarm up the compiler\n\n    for run in {1..100}; do curl -L 'http://127.0.0.1:8080/tests/functional/WALotsaLinksFunctionalTest?_s=_eYKKM3Gl3XzVM5T\u0026_k=JIp_6FO_QQ26nQob' \u003e /dev/null; done\n\nInclude the session key to avoid session creation and follow redirects.\n\nRunning the image directly with GraalVM\n\n    $JAVA_HOME/bin/graalsqueak --jvm --polyglot src/main/webapp/WEB-INF/squeak/graalsqueak-1.0.0-rc2-seaside.image\n\nBuilding a native Tomcat image https://ci.apache.org/projects/tomcat/tomcat9/docs/graal.html\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarschall%2Fseaside-servlet-squeak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarschall%2Fseaside-servlet-squeak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarschall%2Fseaside-servlet-squeak/lists"}