DMX 5.0-beta-2 released

12 weeks after the 1st beta DMX 5.0-beta-2 is released at Apr 23, 2019.

There are a lot of new features and improvements in the DMX Webclient.
In the backend the focus was on database consolidation.
For detailed information about this release see the Release Notes:

For general information about DMX see the README:

Many thanks to Jürgen Neumann, Malte Reißig, Daniel Mania, Silke Meyer, Ingo Rau, Iris Rabener, and Robert Schuster!

Dear friends, how to upload files (such as PDF, JPEG) in DM5?

Dear zhlbb,

at the moment you can upload and embed images via the richtext editor. This works in all HTML fields, e.g. in a Note topic. Consider using the latest DM5 Beta-3 SNAPSHOT as we’re improving this feature at this very moment.


DM also features a (server side or local) file repository you can browse and upload arbitrary files to. File topics are rendered within the Webclient if the browser supports them (e.g. PDF). However the frontend part (file browser) is still missing in DM5. It will be ported from DM4 soon. You could check out DM4 meanwhile.

Thanks for your question, and welcome to DMX!

1 Like

Dear jri: Thank you very much for your patience. DMX is a very excellent knowledge management platform and I like it very much. Thank you for your hard work!

Dear Friends: I deploy DMX to remote server. Classes and instances can be created when accessing the server through Localhost:8080, but when accessing the server remotely through IP address locally, a new Topic type can be created, but no new instance can be created. When creating a new instance, the following error will be reported:

500 Server Error

{ “exception”: “java.lang.RuntimeException”, “message”: “Response filtering failed”, “cause”: { “exception”: “java.lang.RuntimeException”, “message”: “No WebSocket connection open for session “1wr3xc9cq4djm1uzgqjg0xjsqw” (plugin “systems.dmx.webclient”)” } }


Excuse me, where is my configuration file wrong?

In addition, my configuration file is as follows:

### DeepaMehta Configuration ###

## Webserver ##

org.osgi.service.http.port = 8080
org.apache.felix.http.enable = true

# Session timeout in minutes. Set 0 for no timeout.
org.apache.felix.http.session.timeout = 0

# HTTPS = 8443

# To enable HTTPS set this to "true"
org.apache.felix.https.enable = false

# The **Keystore Password** (as entered in the `keytool`)
org.apache.felix.https.keystore.password = 

# The **Key Password** (as entered in the `keytool`)
org.apache.felix.https.keystore.key.password = 

# WebSockets

# The port the WebSocket server opens for accepting connections
dmx.websockets.port = 8081

# The URL the WebSocket clients use to connect to the WebSocket server
dmx.websockets.url = ws://localhost:8081

## Request Filter ##

# Filter for anonymous read (that is GET) requests.
# "ALL" allows all anonymous read requests. This is the default.
# "NONE" allows no anonymous read requests.
# To allow specific anonymous read requests set a comma-separated list of URI-prefixes.
# Each prefix must begin with slash but have *no* slash at the end, e.g. "/eu.crowd-literature, /crowd".
# (To each prefix a slash is appended automatically.)
# Spaces, tabs, and line breaks are allowed. IMPORTANT: line breaks must be escaped with backslash (\). = ALL

# Filter for anonymous write (that is POST, PUT, DELETE) requests.
# "ALL" allows all anonymous write requests.
# "NONE" allows no anonymous write requests. This is the default.
# To allow specific anonymous write requests set a comma-separated list of URI-prefixes.
# Each prefix must begin with slash but have *no* slash at the end, e.g. "/eu.crowd-literature, /crowd".
# (To each prefix a slash is appended automatically.)
# Spaces, tabs, and line breaks are allowed. IMPORTANT: line breaks must be escaped with backslash (\). = NONE

# Requests are allowed from this subnet only.
# An address range denoted by network number and netmask.
# To allow local access only set "". This is the default.
# To allow global access set "". =

## User Accounts ##

# The initial password for the "admin" user account.
# Note: this setting is only evaluated while the first DeepaMehta start.
# Once started the admin password can be changed interactively (using the Webclient). = 

# If true newly created user accounts are enabled instantly. This is the default.
# If false user accounts must be manually enabled by an administrator (using the Webclient). = true

dmx.ldap.server =
dmx.ldap.port = 389
dmx.ldap.manager = 
dmx.ldap.password = 
dmx.ldap.user_base = 
dmx.ldap.user_attribute = 
dmx.ldap.filter = 

## Workspace Sharing Modes ##

# When a user creates a workspace only the enabled sharing modes will be available.
# By default all sharing modes are enabled.
# Note: individual (per-user) sharing modes can be configured by an administrator (using the Webclient).
dmx.workspaces.private.enabled = true
dmx.workspaces.confidential.enabled = true
dmx.workspaces.collaborative.enabled = true
dmx.workspaces.public.enabled = true
dmx.workspaces.common.enabled = true

## File Repository ##

# The file repository's base path: an absolute path leading to a directory, *no* slash at the end.
# This directory must exist. To enable the entire file system set "/". This is the default.
dmx.filerepo.path = jiutu/

# Set to "true" to put the file repository under access control.
# DM then creates a separate file repository for each workspace beneath the base path.
# This allow for e.g. private and collaborative file repositories.
# If set to "false" (the default) there is one big public file repository shared by all users.
# Use this also for a single-user DeepaMehta installation.
dmx.filerepo.per_workspace = false

# Standard disk quota (for file uploads) allocated to each user (in MB).
# Set -1 for no disk quota (unlimited uploads). This is the default.
# Note: individual (per-user) disk quotas can be configured by an administrator (using the Webclient).
dmx.filerepo.disk_quota = -1

## Hot Deployment ##

# DeepaMehta plugins (jar files) from this directory are hot deployed (like any other OSGi bundle).
# You can add further directories here, separated by comma. Also you can remove the standard directory
# ("bundle-deploy") if you like.
# Spaces, tabs, and line breaks are allowed. IMPORTANT: line breaks must be escaped with backslash (\).
felix.fileinstall.dir = bundle-deploy

## Host ##

# The URL (protocol, host, port) this DeepaMehta installation is accessible from "outside".
# Some DeepaMehta plugins make use of this value when creating public DeepaMehta URLs.
# This setting is of particular interest when DeepaMehta runs behind a reverse proxy. =  http://localhost:8080

## Webservice ##

# Only these 2 values are supported:
#     /     For use with Apache Felix HTTP (the default)
#     /*    For use with OPS4J Pax Web
dmx.webservice.path = /

## Database ##

dmx.database.path = jiutu-db

## Logging ##

java.util.logging.config.file = conf/

# To see any Felix/File Install logging set the level to at least 4
felix.log.level = 0
felix.fileinstall.log.level = 0

## Encoding ##

file.encoding = UTF-8

## OSGi Runtime ## = bundle-cache = install,start

When you deploy DMX at a remote server you have to configure dmx.websockets.url accordingly.


You have to specify the domain or IP address of your server, e.g. ws://

The port must match your dmx.websockets.port setting (8081 by default). If your server does HTTPS use wss: as the protocol instead ws: (anyways your config shows you’re not using HTTPS).

If you don’t set dmx.websockets.url properly the DMX Webclient can’t establish a WebSocket connection to the server. This results in the “No WebSocket connection open” error you’re currently experiencing.

To check whether the webclient can establish the WebSocket connection open the browser console. When the webclient starts the console output is supposed to look like this:


BTW: you’re recommended to install the latest DMX snapshot (instead the Beta 2 release). This will raise the possibility you can migrate your data to the upcoming Beta 3 release.

Thank you for the question as it helps us with improving the DMX docs!

Dear jri: Thank you for your answer. The problem has been solved according to your method.

Dear friends:

  1. I created a new “Topic type” named Organization, and “data type” for “Identity” in “Compostie”.

  2. Then I created another “Topic type” named Manager, and “data type” chose “Value” in “Compostie”; Manager as "Parent Type” and contains several “Child Types”, such as CEO, CFO, CTO, etc.

  3. I associate the Organization with the Manager. The Organization is "Parent Type ” and the manager is “Child Type”.

  4. Then I created an instance of an Organization and entered the name information of CEO, CFO, CTO, etc. without any error. But when I created another instance of Organization and entered the name information of CEO, CFO, CTO, etc., the system reported the following error:

500 Server Error

{ “exception”: “java.lang.RuntimeException”, “message”: “Fetching and updating topic 5294 failed”, “cause”: { “exception”: “java.lang.RuntimeException”, “message”: “Updating topic 5294 failed”, “cause”: { “exception”: “java.lang.RuntimeException”, “message”: “Updating topic 5294 failed (typeUri=“domain.project.topic_type_4012”)”, “cause”: { “exception”: “java.lang.RuntimeException”, “message”: "Value integration failed, newValues=TopicModelImpl {\n “id”: 5294,\n “uri”: “”,\n “typeUri”: “domain.project.topic_type_4012”,\n “value”: “中国贵州茅台酒厂(集团)习酒有限责任公司”,\n “childs”: {\n “domain.project.topic_type_4242”: {\n “id”: 5289,\n “uri”: “”,\n “typeUri”: “domain.project.topic_type_4242”,\n “value”: “中国贵州茅台酒厂(集团)习酒有限责任公司”,\n “childs”: {},\n “assoc”: {\n “id”: 5299,\n “uri”: “”,\n “typeUri”: “dmx.core.composition”,\n “value”: “”,\n “childs”: {},\n “role1”: {\n “topicId”: 5289,\n “roleTypeUri”: “dmx.core.child”\n },\n “role2”: {\n “topicId”: 5294,\n “roleTypeUri”: “dmx.core.parent”\n }\n }\n },\n “domain.project.topic_type_6112”: {\n “id”: 6605,\n “uri”: “”,\n “typeUri”: “domain.project.topic_type_6112”,\n “value”: “遵义市”,\n “childs”: {},\n “assoc”: {\n “id”: 6614,\n “uri”: “”,\n “typeUri”: “dmx.core.composition”,\n “value”: “”,\n “childs”: {},\n “role1”: {\n “topicId”: 6605,\n “roleTypeUri”: “dmx.core.child”\n },\n “role2”: {\n “topicId”: 5294,\n “roleTypeUri”: “dmx.core.parent”\n }\n }\n },\n “domain.project.topic_type_4179”: {\n “id”: 5458,\n “uri”: “”,\n “typeUri”: “domain.project.topic_type_4179”,\n “value”: “2000年08月15日”,\n “childs”: {},\n “assoc”: {\n “id”: 5493,\n “uri”: “”,\n “typeUri”: “dmx.core.composition”,\n “value”: “”,\n “childs”: {},\n “role1”: {\n “topicId”: 5458,\n “roleTypeUri”: “dmx.core.child”\n },\n “role2”: {\n “topicId”: 5294,\n “roleTypeUri”: “dmx.core.parent”\n }\n }\n },\n “domain.project.topic_type_6268”: {\n “id”: 6514,\n “uri”: “”,\n “typeUri”: “domain.project.topic_type_6268”,\n “value”: “400-667-1988”,\n “childs”: {},\n “assoc”: {\n “id”: 6524,\n “uri”: “”,\n “typeUri”: “dmx.core.composition”,\n “value”: “”,\n “childs”: {},\n “role1”: {\n “topicId”: 6514,\n “roleTypeUri”: “dmx.core.child”\n },\n “role2”: {\n “topicId”: 5294,\n

I don’t know why? Thank you!

Dear Liangbing,

unfortunately extensive error messages shown in the Webclient are sometimes incomplete due to space restrictions. Can you please post the complete error message as appearing in the DMX server log. Without it I can’t say what the actual problem is.

Note that the very Organization-Person-Role scenario you describe is already part of the DMX standard distribution. My advice is to play with the standard model first, that is creating content. Then start investigating how the standard model is build. You can do all that interactively in the Webclient.

Associate a Person with an Organization. Result is an association of type “Organization Involvement”. That association further qualifies the person-organization relationship by “Role” (e.g. “Founder”, “Employee” …). Note also that you can introduce new roles (“CTO”, “CFO”, …) just by typing in the form (when the association is selected, see screenshot). You’re not required to define any new topic type for that. If a person occupies several roles in the same company create several Organization Involvement associations. If the existing model is not sufficient you can extend it e.g. by adding further child types to the “Organization Involvement” association type and/or to the “Person”/“Organization” topic types.


According to DMX’s “semantic” approach it’s a good idea to use the types that exist already. E.g. one would not define “Manager” as a topic type because a manager is a person, and topic type “Person” exists already. Semantic-wise “manager” is not a quality of a certain person per-se, but of that person’s relationship to a particular organization. The same person can play different roles in different organizations.

Modeling is a tricky subject in general, and modeling in DMX definitely has its particularities. Do you think the DMX docs could be improved in that area?

BTW: for new questions please start a new forum topic (and add an informative title to it). This will help others to find and refer to relevant forum information.

Thank you for the question!

Thank you for your answer. I have adopted other solutions.

@jri Just a note, I’m currently working with @jpn and @silke on Check out our DMX Admin Documentation, esp. on Running DMX behind an Apache Reverse Proxy, in order to get the The DMX Debian Package on FreedomBox.