Go to file
Markus Rathgeb f881ef87f1 model: prevent simultan access of singleton (#773)
The singleton instance of "Diagnostician" is used without
synchronization.
The singleton "Diasnostician" instance is using the singleton
"EValidator.Registry" instance (without synchronization).
In very rare high load situations there has been CME detected.

My first "solution" has been to synchronize the access of
Diagnostician's instance method by using

```java
synchronized (Diagnostician.INSTANCE) {
    ...
```

But after realize that EMF is using internally other singletons I tried
to find any information about EMF and thread safety.

I found this one: https://javahacks.net/2016/07/13/emf-thread-safety/

  EMF models are not thread-safe by default and writing multithreaded
  applications is not that simple.
  The more complex our application became, the more often we got
  concurrent modification exceptions and had problems with filtering and
  sorting operations.

So, I assume instead of adding synchronizations to our code that is
using EMF (IIRC this has been already done on the ESH hosted code base
long time ago) we should try to execute EMF code in a safe manner.

This implementation adds a "SafeEMF" OSGi service that should be used to
execute EMF code to ensure none code of EMF (or at least the ones that
calls has been migrated to the SafeEMF usage) is accessed by separate
threads at the same time.

Related to: https://github.com/openhab/openhab-core/issues/772

Signed-off-by: Markus Rathgeb <maggu2810@gmail.com>
2019-05-01 23:19:07 +02:00
bom use compendium specification R7 (#766) 2019-04-29 19:14:24 +02:00
bundles model: prevent simultan access of singleton (#773) 2019-05-01 23:19:07 +02:00
features use upstream nrjavaserial 3.15.0 on runtime (#761) 2019-04-29 19:11:32 +02:00
itests Updated xml schema locations to openhab (#769) 2019-04-29 19:15:24 +02:00
licenses/epl-2.0 mavenize openHAB and integrate mavenized ESH repository (#467) 2019-01-28 13:07:31 +01:00
notes mavenize openHAB and integrate mavenized ESH repository (#467) 2019-01-28 13:07:31 +01:00
tools Applied formatter in all files 2019-05-01 22:47:07 +02:00
.gitignore Ignore and remove Eclipse project specific settings (#677) 2019-03-26 13:04:09 +01:00
.travis.yml Require successful Travis CI Java 11 build (#688) 2019-04-01 06:25:43 +02:00
CONTRIBUTING.md Replaces 'Eclipse SmartHome' with 'openHAB' in text (#581) 2019-02-15 10:46:37 +01:00
LICENSE Changed license from EPL v1 to EPL v2 (#466) 2019-01-16 22:59:49 +01:00
NOTICE Add NOTICE file (#631) 2019-03-06 16:09:24 +01:00
README.md Update README.md (#498) 2019-02-01 16:18:41 +01:00
pom.xml removed demo app as it moves to openhab-distro (#780) 2019-05-01 23:01:12 +02:00

README.md

openHAB 2 Core bundles

This project contains core bundles of the openHAB 2 runtime.

Building and running the project is fairly easy if you follow the steps detailed below.

Please note that openHAB 2 Core is not a product itself, but a framework to build solutions on top. It is picked up by the main openHAB distribution build.

This means that what you build is primarily an artifact repository of OSGi bundles that can be used within smart home products.

1. Prerequisites

The build infrastructure is based on Maven. If you know Maven already then there won't be any surprises for you. If you have not worked with Maven yet, just follow the instructions and everything will miraculously work ;-)

What you need before you start:

Make sure that the "mvn" command is available on your path

2. Checkout

Checkout the source code from GitHub, e.g. by running

git clone https://github.com/openhab/openhab-core.git

3. Building with Maven

To build this project from the sources, Maven takes care of everything:

  • set MAVEN_OPTS to "-Xms512m -Xmx1024m"
  • change into the openhab-core directory ("cd openhab-core“)
  • run "mvn clean install" to compile and package all sources

If there are tests that are failing occasionally on your local build, run mvn -DskipTests=true clean install instead to skip them.

How to contribute

If you want to become a contributor to the project, please read about contributing and check our guidelines first.