GithubHelp home page GithubHelp logo

antville / helma Goto Github PK

View Code? Open in Web Editor NEW

This project forked from helma-org/helma

3.0 3.0 1.0 50.79 MB

Antville Fork of Helma Object Publisher

Home Page: https://antville.org

License: Other

JavaScript 22.99% HTML 35.29% Shell 0.05% Java 38.90% XSLT 0.13% Batchfile 0.10% CSS 0.11% Perl 2.43%
java application-server jetty austria rhino server-side-javascript since-2001 javascript runtime webserver orm scripting-java

helma's Introduction

How to Helma

TL;DR

  • Make sure you have Java 11 or higher installed
  • Download and unpack the latest release
  • Invoke ./bin/helma, resp. ./bin/helma.bat, depending on your platform
  • Direct your web browser to http://localhost:8080

Introduction

Helma is an open source web application framework for fast and efficient scripting and serving of your websites and Internet applications.

Helma is written in Java and employs JavaScript for its server-side scripting environment, removing the need for compilation cycles and reducing development costs while giving you instant access to leverage the whole wealth of Java libraries out there.

Helma pioneered the simple and codeless mapping of application objects to database tables, which has only recently come into vogue with other web frameworks. In addition, an embedded object-oriented database performs automatic data persistence of unmapped objects.

Helma has proven itself to be stable and fast, capable of serving high traffic sites with hundreds of thousands of dynamic pages per day. The Austrian Broadcasting Corporation, popular weblog hosting sites such as antville.org, twoday.net, and blogger.de, among many others, have successfully been deploying Helma for several years now.

Although Helma became a Grande Dame of server-side JavaScript already decades ago when she performed in cozy Finnish clubs, she appears somehow retired nowadays. Nevertheless, she is here to stay for those last ones out there still tinkering with this nostalgic and wonderful piece of software.

System Requirements

You need a Java virtual machine version 11 or higher to run Helma.

Please consult the documentation of your platform how to obtain and install Java.

You also can directly download a Java runtime or development kit from Oracle.

Helma is built with Gradle, the build task depends on the binaries rsync and npx being installed on your system.

Development

Additional Prerequisites

Clone this repository to your machine and run Helma with ./gradlew run.

To update the installation from a build, run ./gradlew update and enter yes at the prompt.

⚠️
Please be aware that this step is going to overwrite files in the installation directory – escpecially at a later time when there might be substantial changes. Should this happen by accident you find the previous installation in the backups directory.

Alternatively, you could move or copy the desired files manually from the installation directory build/install/helma.

After all files are put into place start Helma by invoking ./bin/helma.bat or ./bin/helma, depending on whether you are on Windows or Linux / Unix / OS X, respectively. If the java command is not found, try setting the JAVA_HOME environment variable to the location of your Java installation.

You can adjust server-wide settings in the server.properties file. For example, you could set the smtp property to the name of the SMTP server that Helma should use to send e-mail. Applications can be started or stopped by editing the apps.properties file, or through the web interface using the management application that is part of Helma.

If all goes well you should be able to connect your browser to http://localhost:8080 – port 8080 on the local machine, that is.

Helma comes with a version of Jetty, a lightweight yet industrial strength web server.

While Jetty works well for development and in fact deploying real web sites, you might want to run Helma with the web server you are already using. This is most easily done by proxying Helma. Please consult the documentation of your web server how to achieve this.

Finally, Helma can be plugged into Servlet containers using Servlet classes that communicate with Helma either directly or via Java RMI. Be warned that these options may be harder to set up and maintain though, since most of the recent development efforts have been geared towards a proxied setup.

Documentation and Further Information

After installing and running Helma, you will be able to access introductions to the features of Helma and the various included development tools. Further information you will find on the helma.org website:

😿
Unfortunately, the Helma website disappeard in the meantime. However, with some archaeological web digging and thanks to the great search engines and archive services out there it is still possible to find useful resources.

helma's People

Contributors

danielruthardt avatar dependabot[bot] avatar grob avatar hns avatar lehni avatar oberhamsi avatar p3k avatar renovate[bot] avatar zumbrunn avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

pgio

helma's Issues

SecurityManager is deprecated

Resolve the following warnings:

  • SecurityManager in java.lang has been deprecated and marked for removal
  • setSecurityManager(SecurityManager) in System has been deprecated and marked for removal
  • stop() in Thread has been deprecated and marked for removal

Originally posted by @p3k in #107 (comment)

Side-effects in jetty8 branch

With 51b5712 I cherry-picked (hopefully all?) changes for integrating Jetty 8 from @lehni’s fork and noticed that it breaks either the mountpoint setting in apps.properties or the baseUri setting in app.properties (or both).

Attached a test case which should demonstrate the issue.

Using the master branch there should be displayed success under the URL http://localhost:8080/helma/test while with the jetty8 branch a status 500 (“Object not found”) is returned.

(Are there any other side-effects?)

Untangle Helma for an Extended JavaScript Approach

The idea is to extract Java code from Helma and transform it into compatible JavaScript code. Ideally, this JS code would be running with Rhino as well as V8 (NodeJS) or even other engines.

Feasible

  • Global Object
  • HopObject (as far as no database is involved)
  • Skin rendering (i.e. templating; additionally, a popular template framework could be added, e.g. Mustache)
  • Java imaging
  • Repositories
  • Request/response framework (servlet, session?)
  • Helma extensions (DatabaseObject, FileObject etc.)
  • Command-line runner
  • HTTP server
  • DOM handling

Laborious

  • Code in util (Base64, CacheMap etc.)
  • Find and implement replacements for Java libs in userland (e.g. Rome in Antville)
  • HacHspConverter

Problematic

  • Application framework (i.e. core)
  • Database layer / object model (INode et al.)

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Edited/Blocked

These updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox.


Warning

Renovate failed to look up the following dependencies: Failed to look up maven package net.sf.javamusictag:jid3lib.

Files affected: modules/jala/build.gradle


Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/deploy.yml
.github/workflows/release.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/actions v3
.github/workflows/stage.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/actions v3
gradle
gradle.properties
settings.gradle
build.gradle
  • com.github.jk1.dependency-license-report 2.7
  • com.google.code.gson:gson 2.11.0
  • commons-codec:commons-codec 1.17.0
  • commons-fileupload:commons-fileupload 1.5
  • commons-logging:commons-logging 1.3.2
  • commons-net:commons-net 3.10.0
  • com.sun.mail:javax.mail 1.6.2
  • javax.servlet:javax.servlet-api 4.0.1
  • org.ccil.cowan.tagsoup:tagsoup 1.2.1
  • org.eclipse.jetty:jetty-servlet 9.4.54.v20240208
  • org.eclipse.jetty:jetty-xml 9.4.54.v20240208
  • org.mozilla:rhino 1.7.13
  • org.sejda.imageio:webp-imageio 0.1.6
  • xerces:xercesImpl 2.12.2
  • xmlrpc:xmlrpc 2.0.1
launcher/build.gradle
modules/helma/build.gradle
  • org.apache.lucene:lucene-analyzers 2.2.0
  • org.apache.lucene:lucene-core 2.2.0
modules/jala/build.gradle
  • net.sf.javamusictag:jid3lib 0.5.4
modules/jala/util/HopKit/build.gradle
modules/jala/util/Test/build.gradle
  • org.subethamail:subethasmtp-smtp 1.2
  • org.subethamail:subethasmtp-wiser 1.2
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7

  • Check this box to trigger a request for Renovate to run again on this repository

Prerequisites for building Helma

It went rather unnoticed on a rather fully equipped Linux machine that the following prerequisites are needed to build Helma:

  • Java 😜
  • npx (NodeJS)
  • rsync

This should at least be documented (Java is already, afair).

Add support for jEnv

jEnv is a command line tool to help you forget how to set the JAVA_HOME environment variable

As a first step, simply add the .java-version file. This only contains the version number (e.g. 11.0).

Might come in handy using with Gradle's Java settings…?

Error with helma.Http and Java 17

When uploading an image via URL in Antville:

JavaException: java.lang.IllegalAccessException: class org.mozilla.javascript.MemberBox cannot access class sun.net.www.protocol.https.HttpsURLConnectionImpl (in module java.base) because module java.base does not export sun.net.www.protocol.https to unnamed module @56636066

Gradle 8.8 crashing Java on macOS

Looks like merging #112 was premature – at least with macOS 10.15.7 ./gradlew build is causing a nasty Java crash:

Click to expand
./gradlew build
Starting a Gradle Daemon, 10 busy Daemons could not be reused, use --status for details
> Task :hopKit:compileJava SKIPPED
> Task :jala:compileJava SKIPPED
> Task :hopKit:processResources SKIPPED
> Task :jala:processResources SKIPPED
> Task :hopKit:classes UP-TO-DATE
> Task :jala:classes UP-TO-DATE
> Task :hopKit:jar SKIPPED
> Task :jala:jar SKIPPED
> Task :hopKit:assemble UP-TO-DATE
> Task :jala:assemble UP-TO-DATE
> Task :jala:compileTestJava SKIPPED
> Task :hopKit:compileTestJava SKIPPED
> Task :jala:processTestResources SKIPPED
> Task :hopKit:processTestResources SKIPPED
> Task :jala:testClasses UP-TO-DATE
> Task :hopKit:testClasses UP-TO-DATE
> Task :jala:test SKIPPED
> Task :hopKit:test SKIPPED
> Task :jala:check UP-TO-DATE
> Task :hopKit:check UP-TO-DATE
> Task :jala:build UP-TO-DATE
> Task :hopKit:build UP-TO-DATE
> Task :modules:compileJava SKIPPED
> Task :test:compileJava SKIPPED
> Task :modules:processResources SKIPPED
> Task :test:processResources SKIPPED
> Task :modules:classes UP-TO-DATE
> Task :test:classes UP-TO-DATE
> Task :modules:jar SKIPPED
> Task :test:jar SKIPPED
> Task :modules:assemble UP-TO-DATE
> Task :test:assemble UP-TO-DATE
> Task :test:compileTestJava SKIPPED
> Task :modules:compileTestJava SKIPPED
> Task :modules:processTestResources SKIPPED
> Task :test:processTestResources SKIPPED
> Task :test:testClasses UP-TO-DATE
> Task :modules:testClasses UP-TO-DATE
> Task :test:test SKIPPED
> Task :test:check UP-TO-DATE
> Task :test:build UP-TO-DATE
> Task :modules:test SKIPPED
> Task :modules:check UP-TO-DATE
> Task :modules:build UP-TO-DATE
The message received from the daemon indicates that the daemon has disappeared.
Build request sent: Build{id=154e88c4-3bee-4477-b9ad-698cf0edad87, currentDir=/Users/tobi/Projects/helma}
Attempting to read last messages from the daemon log...
Daemon pid: 99864
  log file: /Users/tobi/.config/gradle/daemon/8.8/daemon-99864.out.log
----- Last  20 lines from daemon log file - daemon-99864.out.log -----
2024-06-14T22:57:00.076+0200 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 18: received class org.gradle.launcher.daemon.protocol.Build
2024-06-14T22:57:00.077+0200 [DEBUG] [org.gradle.launcher.daemon.server.DefaultDaemonConnection] thread 18: Received non-IO message from client: Build{id=154e88c4-3bee-4477-b9ad-698cf0edad87, currentDir=/Users/tobi/Projects/helma}
2024-06-14T22:57:00.078+0200 [INFO] [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler] Received command: Build{id=154e88c4-3bee-4477-b9ad-698cf0edad87, currentDir=/Users/tobi/Projects/helma}.
2024-06-14T22:57:00.078+0200 [DEBUG] [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler] Starting executing command: Build{id=154e88c4-3bee-4477-b9ad-698cf0edad87, currentDir=/Users/tobi/Projects/helma} with connection: socket connection from /127.0.0.1:53442 to /127.0.0.1:53443.
2024-06-14T22:57:00.082+0200 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] Command execution: started DaemonCommandExecution[command = Build{id=154e88c4-3bee-4477-b9ad-698cf0edad87, currentDir=/Users/tobi/Projects/helma}, connection = DefaultDaemonConnection: socket connection from /127.0.0.1:53442 to /127.0.0.1:53443] after 0.0 minutes of idle
2024-06-14T22:57:00.082+0200 [INFO] [org.gradle.launcher.daemon.server.DaemonRegistryUpdater] Marking the daemon as busy, address: [c0cd8ec9-1c64-4873-bff9-8515e72f7819 port:53442, addresses:[localhost/127.0.0.1]]
2024-06-14T22:57:00.082+0200 [DEBUG] [org.gradle.launcher.daemon.registry.PersistentDaemonRegistry] Marking busy by address: [c0cd8ec9-1c64-4873-bff9-8515e72f7819 port:53442, addresses:[localhost/127.0.0.1]]
2024-06-14T22:57:00.083+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on daemon addresses registry.
2024-06-14T22:57:00.083+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2024-06-14T22:57:00.086+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2024-06-14T22:57:00.086+0200 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] resetting idle timer
2024-06-14T22:57:00.087+0200 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] daemon is running. Sleeping until state changes.
2024-06-14T22:57:00.089+0200 [INFO] [org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy] Daemon is about to start building Build{id=154e88c4-3bee-4477-b9ad-698cf0edad87, currentDir=/Users/tobi/Projects/helma}. Dispatching build started information...
2024-06-14T22:57:00.090+0200 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 20: dispatching org.gradle.launcher.daemon.protocol.BuildStarted@7fbb857c
2024-06-14T22:57:00.094+0200 [DEBUG] [org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment] Configuring env variables: [PATH, __impureHostDeps, GETTEXTDATADIRS, FNM_COREPACK_ENABLED, depsBuildTarget, buildInputs, doCheck, DEVBOX_CONFIG_DIR, __propagatedSandboxProfile, NIX_PROFILES, DEVBOX_PACKAGES_DIR, FNM_NODE_DIST_MIRROR, SSH_AGENT_PID, COLORTERM, SDKMAN_DIR, depsHostHostPropagated, PWD, nativeBuildInputs, TERM_PROGRAM_VERSION, shellHook, FNM_LOGLEVEL, stdenv, patches, SIZE, SDKMAN_CANDIDATES_API, FNM_VERSION_FILE_STRATEGY, dontAddDisableDepTrack, IN_NIX_SHELL, AR, AS, XPC_FLAGS, system, DETERMINISTIC_BUILD, LC_CTYPE, NIX_SSL_CERT_FILE, SHLVL, FNM_RESOLVE_ENGINES, STRIP, NIX_ENFORCE_NO_NATIVE, MallocNanoZone, HOST_PATH, JAVA_HOME, cmakeFlags, TERM, PIP_REQUIRE_VIRTUALENV, depsTargetTarget, propagatedBuildInputs, out, JAVA_MAIN_CLASS_99852, VENV_DIR, PKG_CONFIG_PATH_FOR_TARGET, builder, SDKMAN_OFFLINE_MODE, phases, __sandboxProfile, CC, CADDY_ROOT_DIR, PYTHONNOUSERSITE, FNM_MULTISHELL_PATH, _tide_color_separator_same_color, TERM_PROGRAM, DEVBOX_PATH_STACK, DEVBOX_SYSTEM_SED, ZERO_AR_DATE, __DEVBOX_SHELLENV_HASH_da7a34312cc66be048ba49740b70f2938984582c957d4494be76b9b86706a809, DEVBOX_REFRESH_ALIAS_da7a34312cc66be048ba49740b70f2938984582c957d4494be76b9b86706a809, CADDY_LOG_DIR, propagatedNativeBuildInputs, LAUNCHER_VERSION, LD, SDKMAN_ENV, NIX_HARDENING_ENABLE, NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_apple_darwin, outputs, CXX, DEVBOX_NIX_ENV_PATH_da7a34312cc66be048ba49740b70f2938984582c957d4494be76b9b86706a809, XDG_DATA_DIRS, NIX_IGNORE_LD_THROUGH_GCC, strictDeps, CADDY_CONFIG, LAUNCHER_PATH, _tide_location_color, LOGNAME, depsTargetTargetPropagated, PYTHONPATH, RANLIB, SHELL, __ETC_PROFILE_NIX_SOURCED, LD_DYLD_PATH, FNM_ARCH, doInstallCheck, NIX_CC, DEVBOX_SYSTEM_BASH, mesonFlags, TMPDIR, buildPhase, ORIGINAL_XDG_CURRENT_DESKTOP, GNUPGHOME, shell, NIX_BINTOOLS, __CF_USER_TEXT_ENCODING, name, NIX_LDFLAGS, __structuredAttrs, depsBuildTargetPropagated, depsHostHost, MACOSX_DEPLOYMENT_TARGET, NM, STRINGS, NIX_NO_SELF_RPATH, FNM_DIR, DEVBOX_PROJECT_ROOT, configureFlags, PATH_LOCALE, LANG, DISPLAY, DEVBOX_INIT_PATH, PKG_CONFIG_FOR_TARGET, CONFIG_SHELL, SOURCE_DATE_EPOCH, XPC_SERVICE_NAME, PYTHONHASHSEED, SDKMAN_CANDIDATES_DIR, __propagatedImpureHostDeps, NIX_DONT_SET_RPATH_FOR_BUILD, NIX_DONT_SET_RPATH, __darwinAllowLocalNetworking, NIX_CFLAGS_COMPILE, GPG_AGENT_INFO, preferLocalBuild, GPG_TTY, SDKMAN_PLATFORM, depsBuildBuildPropagated, USER, NIX_PKG_CONFIG_WRAPPER_TARGET_TARGET_x86_64_apple_darwin, SSH_AUTH_SOCK, EDITOR, NIX_STORE, NIX_CC_WRAPPER_TARGET_HOST_x86_64_apple_darwin, depsBuildBuild, HOME, NIX_BUILD_CORES]
2024-06-14T22:57:00.109+0200 [DEBUG] [org.gradle.launcher.daemon.server.exec.LogToClient] About to start relaying all logs to the client via the connection.
2024-06-14T22:57:00.109+0200 [INFO] [org.gradle.launcher.daemon.server.exec.LogToClient] The client will now receive all logging from the daemon (pid: 99864). The daemon log file: /Users/tobi/.config/gradle/daemon/8.8/daemon-99864.out.log
2024-06-14T22:57:00.119+0200 [INFO] [org.gradle.launcher.daemon.server.exec.LogAndCheckHealth] Starting build in new daemon [memory: 2 GiB]
2024-06-14T22:57:00.122+0200 [DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] The daemon has started executing the build.
2024-06-14T22:57:00.122+0200 [DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] Executing build with daemon context: DefaultDaemonContext[uid=39e68a53-6486-48d7-8d3b-4557d8d12aa6,javaHome=/Users/tobi/.sdkman/candidates/java/11.0.23-tem,javaVersion=11,daemonRegistryDir=/Users/tobi/.config/gradle/daemon,pid=99864,idleTimeout=10800000,priority=NORMAL,applyInstrumentationAgent=true,nativeServicesMode=ENABLED,daemonOpts=-XX:+HeapDumpOnOutOfMemoryError,--add-opens=java.base/java.util=ALL-UNNAMED,--add-opens=java.base/java.lang=ALL-UNNAMED,--add-opens=java.base/java.lang.invoke=ALL-UNNAMED,--add-opens=java.prefs/java.util.prefs=ALL-UNNAMED,--add-opens=java.base/java.nio.charset=ALL-UNNAMED,--add-opens=java.base/java.net=ALL-UNNAMED,--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED,-Xmx2g,-Dfile.encoding=UTF-8,-Duser.country=US,-Duser.language=en,-Duser.variant]
----- End of the daemon log -----

JVM crash log found: file:///Users/tobi/Projects/helma/hs_err_pid99864.log

FAILURE: Build failed with an exception.

* What went wrong:
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
> Task :launcher:compileJava
> Task :generateLicenseReport

Reverting to Gradle 8.7 is a work-around.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.