Giter Club home page Giter Club logo

hawkbit's Introduction

Eclipse hawkBit™ - Update Server

Eclipse hawkBit is an domain independent back end solution for rolling out software updates to constrained edge devices as well as more powerful controllers and gateways connected to IP based networking infrastructure.

Build: Circle CI Quality Gate Status Maven Central Lines of code

Docker: Docker Docker MYSQL

Documentation

see hawkBit Documentation

Contact us

  • Having questions about hawkBit? Check Stack Overflow
  • Want to chat with the team behind hawkBit? Join the chat at https://gitter.im/eclipse/hawkbit
  • Having issues with hawkBit? Open a GitHub issue.
  • You can also check out our Project Homepage for further contact options.

Examples and Extensions

Next to the hawkBit core hosted here the project maintains as well examples and extension repositories.

hawkBit sandbox

We offer a sandbox installation that is free for everyone to try out hawkBit. However, keep in mind that the sandbox database will be reset from time to time. It is also not possible to upload any artifacts into the sandbox. But you can use it to try out the Management API and DDI API. Keep in mind as well that you are not permitted to store any kind of personal data in the sandbox.

https://hawkbit.eclipseprojects.io

In addition the following vendors offer free trial accounts for their hawkBit compatible products:

Device Integration (Client libraries)

hawkBit exposes HTTP/JSON based Direct Device Integration (API) API that allow any update client to integrate quite easily.

The Eclipse Hara subproject aims to provide a reference agent software implementation of the Eclipse hawkBit device API. The hara-ddiclient repository provides:

  • a Kotlin library that facilitates and speeds up the development of DDI API clients running on the JVM
  • a virtual-device application which provides:
    • a reference example on how to use the library
    • a configurable virtual device that can be used for different testing scenarios

The hara-ddiclient library has reached version 2.x, and has been successfully used in production for years.

Additionally, the hawkBit project has the long term goal to provide Eclipse Hono integration which will provide connectivity through various IoT protocols and as a result will allow a wide range of clients to connect to hawkBit.

Other open-source hawkBit Clients

There are clients outside of the Eclipse IoT eco system as well, e.g.:

  • SWupdate which is a Linux Update agent with focus on a efficient and safe way to update embedded systems.
  • rauc-hawkbit-updater which is a hawkBit client for the RAUC update framework written in C/glib.
  • rauc-hawkbit which is a python-based hawkBit client demo application and library for the RAUC update framework.
  • hawkbit-rs provides a couple of Rust crates to help implement and test hawkBit clients.
  • Zephyr-RTOS: The Zephyr OS is a small-footprint kernel designed for use on resource-constrained and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated embedded controllers, smart watches, and IoT wireless applications.
  • ChirpStack: ChirpStack Gateway OS uses SWUpdate for handling updates which can be integrated with Eclipse hawkBit. ChirpStack is an open-source LoRaWAN Network Server which can be used to to setup private or public LoRaWAN networks.

Runtime dependencies and support

Java Runtime Environment: 17

SQL database

Database H2 MySQL/MariaDB MS SQL Server PostgreSQL IBM DB2
DDLs maintained by project
Test dependencies defined
Versions tested 2.1 MySQL 8.0.23, AWS Aurora MS SQL Server 2017/2019 PostgreSQL 12/13 DB2 Server v11.1
Docker image with driver provided ✅ (Tag: "-mysql")
JDBC driver H2 2.1.214 MariaDB Connector/J 2.7.8 MSSQL-JDBC 10.2.3.jre8 PostgreSQL JDBC Driver 42.3.8
Status Test, Dev Production grade Production grade Test, Dev Test, Dev

(Optional) RabbitMQ: 3.6,3.7,3.8

Getting Started

We are providing a Spring Boot based reference Update Server including embedded H2 DB for test and evaluation purposes. Run with docker:

docker run -d -p 8080:8080 hawkbit/hawkbit-update-server

Open the update server in your browser:

localhost:8080

See below for how to build and run the update server on your own. In addition we have a guide for setting up a complete landscape.

Note: this docker image supports both DDI and DMF APIs. However, in order to have DMF API working you shall have started additionally RabbitMQ on localhost:5672 with user guest/guest. Then the DMF will use / vhost. See more at guide -> Configure RabbitMQ connection settings.

hawkBit (Spring boot) starters

Next to the Update Server we are also providing a set of Spring Boot Starters to quick start your own Spring Boot based application.

Clone, build and run hawkBit

Build and start hawkBit Update Server

git clone https://github.com/eclipse/hawkbit.git
cd hawkbit
mvn clean install
java -jar ./hawkbit-runtime/hawkbit-update-server/target/hawkbit-update-server-#version#.jar

Start hawkBit Device Simulator (optional)

git clone https://github.com/eclipse/hawkbit-examples.git
cd hawkbit-examples
mvn clean install
java -jar ./hawkbit-device-simulator/target/hawkbit-device-simulator-#version#.jar

Generate getting started data with the Management API example (optional)

java -jar ./hawkbit-example-mgmt-simulator/target/hawkbit-example-mgmt-simulator-#version#-exec.jar

Status and API stability

hawkBit is currently in '0.X' semantic version. That is due to the need that there is still content in hawkBit that is in need for refactoring. That includes the maven module structure, Spring Boot Properties, Spring Boot auto configuration as well as internal Java APIs (e.g. the repository API ).

However, the device facing DDI API is on major version 'v1' and will be kept stable.

Server facing and DMF API are Management API are on v1 as well. However, we cannot fully guarantee the same stability during hawkBit's 0.X development but we will try as best we can.

hawkbit's People

Contributors

a-sayyed avatar aktivk avatar ammarbikic avatar asharani-murugesh avatar avgustinmm avatar blomark avatar bogdan-bondar avatar denislavprinov avatar diegorondini avatar dobleralex avatar dominikhb avatar floruschbaschan avatar herdt-michael avatar jonkno avatar kaizimmerm avatar marcelmager avatar melled avatar michahirsch avatar nkyn avatar ramannas avatar schabdo avatar sebastian-firsching avatar singrob avatar smy4kor avatar stefanklt avatar stefbehl avatar stormc avatar strailov avatar stschake avatar venu1278 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hawkbit's Issues

hawkBit demo server not accessible and failed tests on module build of Repository JPA Implementation

The server under https://hawkbit.eu-gb.mybluemix.net/UI/ responds with different errors like:

  • JPA exception or
  • "Failed to load the bootstrap javascript: ./../VAADIN/vaadinBootstrap.js?v=7.6.5"); vaadin.initApplication("UI-2708",{"theme":"hawkbit","versionInfo":{"vaadinVersion":"7.6.5","atmosphereVersion":"2.2.7.vaadin1"},"widgetset":"org.eclipse.hawkbit.ui.AppWidgetSet","comErrMsg":{"caption":"Communication problem","message":"Take note of any unsaved data, and <u>click here</u> or press ESC to continue.","url":null},"authErrMsg":{"caption":"Authentication problem","message":"Take note of any unsaved data, and <u>click here</u> or press ESC to continue.","url":null},"sessExpMsg":{"caption":"Session Expired","message":"Take note of any unsaved data, and <u>click here</u> or press ESC key to continue.","url":null},"vaadinDir":"./../VAADIN/","standalone":true,"heartbeatInterval":60,"serviceUrl":"."}

Furthermore

  • credentials admin:admin seems not to work

Local build with skipped tests results in inaccessible/error reporting hawkBit server

The local build fails at JPA test:

`storesWrongFormattedStringAsPollingInterval(org.eclipse.hawkbit.repository.jpa.T
enantConfigurationManagementTest) Time elapsed: 1.089 sec <<< ERROR!
com.mongodb.MongoTimeoutException: Timed out after 500 ms while waiting for a se
rver that matches ReadPreferenceServerSelector{readPreference=primary}. Client v
iew of cluster state is {type=UNKNOWN, servers=[{address=localhost:51531, type=U
NKNOWN, state=CONNECTING}]
at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster
.java:369)
at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)

    at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<in

it>(ClusterBinding.java:75)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.(ClusterBinding.java:71)
at com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBin
ding.java:63)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.
java:210)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:482)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:79)
at com.mongodb.Mongo.execute(Mongo.java:772)
at com.mongodb.Mongo$2.execute(Mongo.java:759)
at com.mongodb.DBCursor.initializeCursor(DBCursor.java:851)
at com.mongodb.DBCursor.hasNext(DBCursor.java:152)
at com.mongodb.gridfs.GridFS.find(GridFS.java:247)
at com.mongodb.gridfs.GridFS.find(GridFS.java:227)
at com.mongodb.gridfs.GridFS.remove(GridFS.java:310)
at org.springframework.data.mongodb.gridfs.GridFsTemplate.delete(GridFsT
emplate.java:207)
at org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTest.clea
nCurrentCollection(AbstractIntegrationTest.java:205)
at sun.reflect.GeneratedMethodAccessor221.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Framework
Method.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCal
lable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMe
thod.java:47)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.ja
va:33)
at org.springframework.test.context.junit4.statements.RunAfterTestMethod
Callbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:53)
at org.eclipse.hawkbit.repository.test.util.WithSpringAuthorityRule$1.ev
aluate(WithSpringAuthorityRule.java:40)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.springframework.test.context.junit4.statements.SpringRepeat.evalu
ate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runCh
ild(SpringJUnit4ClassRunner.java:254)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runCh
ild(SpringJUnit4ClassRunner.java:89)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.
java:26)
at org.springframework.test.context.junit4.statements.RunBeforeTestClass
Callbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.ja
va:27)
at org.springframework.test.context.junit4.statements.RunAfterTestClassC
allbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(S
pringJUnit4ClassRunner.java:193)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provide
r.java:264)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4
Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider
.java:124)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameCla
ssLoader(ForkedBooter.java:200)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(Fork
edBooter.java:153)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:
103)

Results :

Tests in error:
RepositoryEntityEventTest>AbstractIntegrationTest.cleanCurrentCollection:205 »
MongoTimeout
EntityInterceptorListenerTest>AbstractIntegrationTest.cleanCurrentCollection:2
05 » MongoTimeout
ModelEqualsHashcodeTest>AbstractIntegrationTest.cleanCurrentCollection:205 » M
ongoTimeout
ReportManagementTest>AbstractIntegrationTest.cleanCurrentCollection:205 » Mong
oTimeout
RolloutManagementTest>AbstractIntegrationTest.cleanCurrentCollection:205 » Mon
goTimeout
RSQLActionFieldsTest>AbstractIntegrationTest.cleanCurrentCollection:205 » Mong
oTimeout
RSQLSoftwareModuleFieldTest>AbstractIntegrationTest.cleanCurrentCollection:205
» MongoTimeout
RSQLSoftwareModuleTypeFieldsTest>AbstractIntegrationTest.cleanCurrentCollectio
n:205 » MongoTimeout
SoftwareManagementTest>AbstractIntegrationTest.cleanCurrentCollection:205 » Mo
ngoTimeout
TagManagementTest>AbstractIntegrationTest.cleanCurrentCollection:205 » MongoTi
meout
TargetManagementSearchTest>AbstractIntegrationTest.cleanCurrentCollection:205
» MongoTimeout
TargetManagementTest>AbstractIntegrationTest.cleanCurrentCollection:205 » Mong
oTimeout
MultiTenancyEntityTest>AbstractIntegrationTest.cleanCurrentCollection:205 » Mo
ngoTimeout
TenantConfigurationManagementTest>AbstractIntegrationTest.cleanCurrentCollecti
on:205 » MongoTimeout`

[Enhancement] Error msg when assignment of module to distribution set fails

From gitter :

When you are creating a distribution set type you need to specify which software module types are allowed to include in this type and this will be validated when you try to assign software modules against a specific instance of a distribution set based on its type

I noticed that sometimes when assign software modules that aren't compatible with the distribution set you either get

  • a generic error message saying : X SW Module Type cannot assign to Distribution Y
  • UnsupportedModuleExceptionForThisDistributionSet

I missed the part on software distribution set types (I assumed they were just simple tags to filter distribution sets).

Perhaps error msg can be more clearer :

  • module type X not supported by distribution set type, only Y,Z,... allowed
  • check your distribution set type

[RFC] : Binary delta

Hi everybody,

not a real issue, but I want to ask if thie approach with binary deltas was already investigated (or maybe solved ?). I have SWUpdate as updater agent working together with the Hawkbit server and it works as full image updater.
There are some discussions on SWUpdate's ML how to provide binary deltas, that can reduce download time and size, but at the end without dropping the full image concept: at the end, the whole image is still installed.
At the end, there were some concepts to do this, but a possible way requires much more interaction with the backend server. In fact, a delta can grow in size and becoming very large if target is not running the last release. But on the basis of the running version on the target, the backend could compute on the fly the delta. Something like:

  • target sends version of running software, maybe with configData API
  • Hawkbit checks the version and compute the binary delta
    If the size is bigger as in case of the full image, the full image is provide
  • Hawkbit makes the new computed image available as usual, and target can start to downloadi it when polling cycle expires.
    Of course, this means a specialized image pro device (or per group of devices of the same type and running the same version).

Is there already some thought in this direction or maybe is it implemented in Hawkbit in some other ways ?

Thanks,
Stefano

Provide concept for hawkBit horizontal scale out

So far the focus in the hawkBit development has been more on resource efficiency of the server node together with a vertical scalability. However, if we are serious about IoT than horizontal scalability becomes a necessity. That should be combined with some ground work on a more micro service like architecture.

I think many preparations are already in the code base but we have to get concrete now.

Here is what I think:

  • First we should start with the option to split hawkBit into individual micro services for the 3 non message driven interfaces, i.e. separate DDI, Mgmt.-API, Mgmt.-UI service. That split should already be possible with our auto configure mechanism, but I guess documentation is in order.
  • Next we should think about scaling out the individual services, e.g. a future system setup for a large installation might look like: 2 mgmt UI instances, 2 mgmt. API instances, 6 DDI instances.
  • The biggest technical question of course is how to we bring the instances together, i.e. let them form a logical system:
    • The original thoughts we had at Bosch was to use a rather traditional setup:
    • SQL DB as central datastore of the system.
    • RabbitMQ (Spring Cloud Bus?) to publish repo updates in the system.
    • Redis based central session cache.
    • I still believe that this would be good setup and as matter of fact many preparations are already in place.
    • However, I think it might be worth the effort to look into Apache Geode which on paper could serve all three use cases. Well, that sounds to good to be true though....maybe we can get somebody from Pivotal on board to discuss this, could save us some time.
    • An outcome could be to start with the original concept first and look into Geode later.
  • Finally we should create another example "app" for such a setup, e.g. a Docker (Compose) based Micro service example.

DDI API: The config URL should be always available

Hi,
It will be grade if the configuration URL (configData) will be available on every request on the "Base Poll Resource". It is possible that the configuration is changing e.g. after update, booting to recovery mode, ...
If the target will report a new config it must save the config URL and that is not so easy. If the configuration URL is available on every request to the "Base Poll Resource" the target can decide if the configuration has changed an report if necessary.

Problem with Distribution View

After uploading an 110 MB artifact I try to create a Distribution. When I select the view in the left "navigation bar" I get an error
image

Log:
Feb 13 16:40:31 es-lxserver mvn[2052]: 2017-02-13 16:40:31.261 INFO 2052 --- [executor-pool-2] o.e.h.r.jpa.rollout.RolloutScheduler : Checking starting rollouts for 1 tenants Feb 13 16:40:33 es-lxserver mvn[2052]: 2017-02-13 16:40:33.266 INFO 2052 --- [executor-pool-2] o.e.h.r.jpa.rollout.RolloutScheduler : Checking starting rollouts for 1 tenants Feb 13 16:40:33 es-lxserver mvn[2052]: 2017-02-13 16:40:33.266 INFO 2052 --- [executor-pool-0] o.e.h.r.jpa.rollout.RolloutScheduler : Checking creating rollouts for 1 tenants Feb 13 16:40:35 es-lxserver mvn[2052]: 2017-02-13 16:40:35.166 WARN 2052 --- [tp1180749082-30] v.s.e.i.ScopedEventBus$DefaultUIEventBus : Listener [org.eclipse.hawkbit.ui.distributions.disttype.CreateUpdateDistSetTypeLayout@227b546] did not contain a single listener method! Feb 13 16:40:35 es-lxserver mvn[2052]: 2017-02-13 16:40:35.189 WARN 2052 --- [tp1180749082-30] v.s.e.i.ScopedEventBus$DefaultUIEventBus : Listener [org.eclipse.hawkbit.ui.artifacts.smtype.CreateUpdateSoftwareTypeLayout@74300fcf] did not contain a single listener method! Feb 13 16:40:35 es-lxserver mvn[2052]: 2017-02-13 16:40:35.270 INFO 2052 --- [executor-pool-0] o.e.h.r.jpa.rollout.RolloutScheduler : Checking creating rollouts for 1 tenants Feb 13 16:40:35 es-lxserver mvn[2052]: 2017-02-13 16:40:35.270 INFO 2052 --- [executor-pool-2] o.e.h.r.jpa.rollout.RolloutScheduler : Checking starting rollouts for 1 tenants Feb 13 16:40:37 es-lxserver mvn[2052]: 2017-02-13 16:40:37.274 INFO 2052 --- [executor-pool-2] o.e.h.r.jpa.rollout.RolloutScheduler : Checking starting rollouts for 1 tenants

Provide means to record manual off-line device updates into hawkBit's history

When having to manually update a device, e.g., for failure-recovery from a bad update, it would be nice to have a means to record this manual update into hawkBit's history so that it can serve as the single source of truth regarding the updates done to a device.

Currently, one can simulate the effect by creating an according softwaremodule/distributionset and "installing" that update on a device simulator resembling the real device in terms of configuration. However, this is a bit tedious and may mess up the history, e.g., in case the real device has performed an update in the meantime.

Refactor module structure for DDI and mgmt. API

Currently Artifact download, DDI and mgmt. API are mixed in the the two "rest" modules. We should split this in DDI and mgmt. API and in addition name the modules correctly to a avoid confusing our users.

Module naming proposal:

  • hawkbit-ddi-api
  • hawkbit-ddi-resource
  • hawkbit-ddi-dl-api (for the download part)
  • hawkbit-ddi-dl-resource (for the download part)
  • hawkbit-mgmt-api
  • hawkbit-mgmt-resource

While at it we should rename the UI module to management-ui.

can not build the master

Hello,

I followed the instruction from this page http://www.eclipse.org/community/eclipse_newsletter/2016/september/article2.php

but I get errors during mvn clean build step

This are the last lines:

[INFO]
[INFO] --- jacoco-maven-plugin:0.7.7.201606060606:prepare-agent (prepare-ut-agent) @ hawkbit-artifact-repository-filesystem ---
[INFO] jacoco.agent.ut.arg set to -javaagent:/root/.m2/repository/org/jacoco/org.jacoco.agent/0.7.7.201606060606/org.jacoco.agent-0.7.7.201606060606-runtime.jar=destfile=/home/adminArea/servers/hawkbit/hawkbit-artifact-repository-filesystem/../target/jacoco-ut.exec,append=true
[INFO]
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ hawkbit-artifact-repository-filesystem ---
[INFO] Surefire report directory: /home/adminArea/servers/hawkbit/hawkbit-artifact-repository-filesystem/target/surefire-reports


T E S T S

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Running org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.201 sec - in org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemTest
Running org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest
Tests run: 4, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 0.082 sec <<< FAILURE! - in org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest
deleteStoredArtifactBySHA1Hash(org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest) Time elapsed: 0.053 sec <<< ERROR!
org.eclipse.hawkbit.artifact.repository.ArtifactStoreException: Could not store the file ./artifactrepo/b8/21/a4a5ffefa474e626b5b9da83878555798b33b821
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.renameFileToSHA1Naming(ArtifactFilesystemRepository.java:133)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.store(ArtifactFilesystemRepository.java:84)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.store(ArtifactFilesystemRepository.java:63)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest.storeRandomArtifact(ArtifactFilesystemRepositoryTest.java:82)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest.deleteStoredArtifactBySHA1Hash(ArtifactFilesystemRepositoryTest.java:62)

getStoredArtifactBasedOnSHA1Hash(org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest) Time elapsed: 0 sec <<< ERROR!
org.eclipse.hawkbit.artifact.repository.ArtifactStoreException: Could not store the file ./artifactrepo/73/20/d478b11aac7dd8d6e3d836df563d98eb08747320
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.renameFileToSHA1Naming(ArtifactFilesystemRepository.java:133)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.store(ArtifactFilesystemRepository.java:84)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.store(ArtifactFilesystemRepository.java:63)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest.storeRandomArtifact(ArtifactFilesystemRepositoryTest.java:82)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest.getStoredArtifactBasedOnSHA1Hash(ArtifactFilesystemRepositoryTest.java:52)

storeSuccessfully(org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest) Time elapsed: 0.002 sec <<< ERROR!
org.eclipse.hawkbit.artifact.repository.ArtifactStoreException: Could not store the file ./artifactrepo/3c/82/02cc9920deb3901258c5c7e05ea236d0e3423c82
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.renameFileToSHA1Naming(ArtifactFilesystemRepository.java:133)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.store(ArtifactFilesystemRepository.java:84)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepository.store(ArtifactFilesystemRepository.java:63)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest.storeRandomArtifact(ArtifactFilesystemRepositoryTest.java:82)
at org.eclipse.hawkbit.artifact.repository.ArtifactFilesystemRepositoryTest.storeSuccessfully(ArtifactFilesystemRepositoryTest.java:39)

Results :

Tests in error:
ArtifactFilesystemRepositoryTest.deleteStoredArtifactBySHA1Hash:62->storeRandomArtifact:82 » ArtifactStore
ArtifactFilesystemRepositoryTest.getStoredArtifactBasedOnSHA1Hash:52->storeRandomArtifact:82 » ArtifactStore
ArtifactFilesystemRepositoryTest.storeSuccessfully:39->storeRandomArtifact:82 » ArtifactStore

Tests run: 6, Failures: 0, Errors: 3, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] hawkBit :: Parent .................................. SUCCESS [ 0.985 s]
[INFO] hawkBit :: Core .................................... SUCCESS [ 3.377 s]
[INFO] hawkBit :: Core Security ........................... SUCCESS [ 1.999 s]
[INFO] hawkBit :: Repository .............................. SUCCESS [ 0.015 s]
[INFO] hawkBit :: Repository API .......................... SUCCESS [ 2.251 s]
[INFO] hawkBit :: Repository Core Implementation Support .. SUCCESS [ 0.143 s]
[INFO] hawkbit-artifact-repository-filesystem ............. FAILURE [ 1.100 s]
[INFO] hawkBit :: Repository Test Utilities ............... SKIPPED
[INFO] hawkBit :: Repository JPA Implementation ........... SKIPPED
[INFO] hawkBit :: REST Core ............................... SKIPPED
[INFO] hawkBit :: Mgmt REST API ........................... SKIPPED
[INFO] hawkBit :: Device Management Federation API ........ SKIPPED
[INFO] hawkBit :: Security Integration .................... SKIPPED
[INFO] hawkBit :: HTTP Security ........................... SKIPPED
[INFO] hawkBit :: REST Mgmt Resources ..................... SKIPPED
[INFO] hawkBit :: DDI API ................................. SKIPPED
[INFO] hawkBit :: DDI Download Server (DL) API ............ SKIPPED
[INFO] hawkBit :: DDI Resources ........................... SKIPPED
[INFO] hawkBit :: DMF Amqp ................................ SKIPPED
[INFO] hawkBit :: UI ...................................... SKIPPED
[INFO] hawkBit :: Spring Boot Autoconfigure ............... SKIPPED
[INFO] hawkBit :: Test Report ............................. SKIPPED
[INFO] hawkBit-example :: Parent .......................... SKIPPED
[INFO] hawkBit-example :: Device Simulator ................ SKIPPED
[INFO] hawkBit-example :: UI Application .................. SKIPPED
[INFO] hawkBit-example :: Feign Core Client ............... SKIPPED
[INFO] hawkBit-example :: DDI Feign Client ................ SKIPPED
[INFO] hawkBit-example :: Management client API ........... SKIPPED
[INFO] hawkBit-example :: Management feign client simulator SKIPPED
[INFO] hawkBit :: Extensions .............................. SKIPPED
[INFO] hawkbit-extension-uaa .............................. SKIPPED
[INFO] hawkBit :: Artifact Repository Mongo ............... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.817 s
[INFO] Finished at: 2016-12-02T15:05:49+01:00
[INFO] Final Memory: 89M/676M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) on project hawkbit-artifact-repository-filesystem: There are test failures.
[ERROR]
[ERROR] Please refer to /home/adminArea/servers/hawkbit/hawkbit-artifact-repository-filesystem/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn -rf :hawkbit-artifact-repository-filesystem
wiens@es-lxserver:/home/adminArea/servers/hawkbit$

Setup Hawkbit for testing with SWUpdate

Hi everybody,

I I would like to set up a test environment with HawkBit and SWUpdate to better test recent inclusion of patches to connect SWUpdate to Hawkbit. I started on a fresh installed Ubuntu-16.04 with the requirements as in your guide, adjusting application.properties for the example-app as suggested in your guide. I just create an empty database before running hawkbit. I see that this is recognized by hawkbit and it starts a migration - that fails. The log is :

Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/stefano/Projects/hawkbit/file:/home/stefano/Projects/hawkbit/examples/hawkbit-example-app/target/hawkbit-example-app-0.2.0-SNAPSHOT.jar!/lib/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:444)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1117)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1012)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1120)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1044)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
... 65 more

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:

Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/stefano/Projects/hawkbit/file:/home/stefano/Projects/hawkbit/examples/hawkbit-example-app/target/hawkbit-example-app-0.2.0-SNAPSHOT.jar!/lib/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
... 80 more

Caused by: org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:

Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/stefano/Projects/hawkbit/file:/home/stefano/Projects/hawkbit/examples/hawkbit-example-app/target/hawkbit-example-app-0.2.0-SNAPSHOT.jar!/lib/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:117)
at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:71)
at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:287)
at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:285)
at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
at org.flywaydb.core.internal.command.DbMigrate.applyMigration(DbMigrate.java:285)
at org.flywaydb.core.internal.command.DbMigrate.access$800(DbMigrate.java:46)
at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:207)
at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:156)
at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:156)
at org.flywaydb.core.Flyway$1.execute(Flyway.java:972)
at org.flywaydb.core.Flyway$1.execute(Flyway.java:919)
at org.flywaydb.core.Flyway.execute(Flyway.java:1320)
at org.flywaydb.core.Flyway.migrate(Flyway.java:919)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1700)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1639)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
... 89 more

Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
at org.mariadb.jdbc.internal.util.ExceptionMapper.get(ExceptionMapper.java:125)
at org.mariadb.jdbc.internal.util.ExceptionMapper.throwException(ExceptionMapper.java:69)
at org.mariadb.jdbc.MariaDbStatement.executeQueryEpilog(MariaDbStatement.java:250)
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:278)
at org.mariadb.jdbc.MariaDbStatement.execute(MariaDbStatement.java:291)
at org.flywaydb.core.internal.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:238)
at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:114)
... 110 more
Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:908)
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:574)
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:269)

I see that the schema is partially created before the error - anyway, a key longer as 767 bytes, as the error message says, looks improbable.

If I restart the example-app, I get another error - but this is plausible with a partially set schema. Dropping all tables, I can reproduce the error with the "Specified key was too long; max key length is 767 bytes".

Any hints ?

Thanks,
Stefano Babic

Cannot run the hawkbit-example-app

Not sure what the system/software requirements are, but after doing mvn clean install trying to execute the example app fails.

Maven version: Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Java version: Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
System: macOS sierra 10.12.1

Command: java -jar ./examples/hawkbit-example-app/target/hawkbit-example-app-0.2.0-SNAPSHOT.jar

Main stack trace error
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat servlet container

Migration of schema `hawkbit` to version 1.0.1 failed

Hello,

I trying to flowing this example https://github.com/eclipse/hawkbit/wiki/Run-hawkBit to activate mysql DB support. But the hawkbit-example-app does not start because the database hackbit is empty and the init / migration fails. This error appears on the TAGs 0.2.0M2 and 0.2.0M1. I am not able to test this on the masater because I get compiler errors. https://github.com/eclipse/hawkbit/issues/374

This are some of the last lines:

2016-12-02 15:23:56.593 INFO 23429 --- [localhost:27017] org.mongodb.driver.connection : Opened connection [connectionId{localValue:1, serverValue:31}] to localhost:27017
2016-12-02 15:23:56.594 INFO 23429 --- [localhost:27017] org.mongodb.driver.cluster : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 11]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=718182}
2016-12-02 15:23:56.762 WARN 23429 --- [ost-startStop-1] org.flywaydb.core.Flyway : Flyway.isInitOnMigrate() is deprecated. Use isBaselineOnMigrate() instead. Will be removed in Flyway 4.0.
2016-12-02 15:23:56.762 WARN 23429 --- [ost-startStop-1] org.flywaydb.core.Flyway : Flyway.setInitOnMigrate() is deprecated. Use setBaselineOnMigrate() instead. Will be removed in Flyway 4.0.
2016-12-02 15:23:56.778 INFO 23429 --- [ost-startStop-1] o.f.core.internal.util.VersionPrinter : Flyway 3.2.1 by Boxfuse
2016-12-02 15:23:56.847 INFO 23429 --- [ost-startStop-1] o.f.c.i.dbsupport.DbSupportFactory : Database: jdbc:mysql://localhost:3306/hawkbit (MySQL 10.0)
2016-12-02 15:23:56.874 INFO 23429 --- [ost-startStop-1] o.f.core.internal.command.DbValidate : Validated 8 migrations (execution time 00:00.010s)
2016-12-02 15:23:56.889 INFO 23429 --- [ost-startStop-1] o.f.c.i.metadatatable.MetaDataTableImpl : Creating Metadata table: hawkbit.schema_version
2016-12-02 15:23:58.264 INFO 23429 --- [ost-startStop-1] o.f.core.internal.command.DbMigrate : Current version of schema hawkbit: << Empty Schema >>
2016-12-02 15:23:58.265 INFO 23429 --- [ost-startStop-1] o.f.core.internal.command.DbMigrate : Migrating schema hawkbit to version 1.0.1 - init

2016-12-02 15:24:10.813 ERROR 23429 --- [ost-startStop-1] o.f.core.internal.command.DbMigrate : Migration of schema hawkbit to version 1.0.1 failed! Please restore backups and roll back database and code!
2016-12-02 15:24:10.862 ERROR 23429 --- [ost-startStop-1] o.s.b.c.embedded.tomcat.TomcatStarter : Error starting Tomcat context: org.springframework.beans.factory.BeanCreationException
2016-12-02 15:24:11.177 INFO 23429 --- [ost-startStop-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [286] milliseconds.
2016-12-02 15:24:11.180 WARN 23429 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
2016-12-02 15:24:11.197 ERROR 23429 --- [ main] o.s.boot.SpringApplication : Application startup failed

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:760)
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:306)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174)
at org.eclipse.hawkbit.app.Start.main(Start.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:478)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:99)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.(TomcatEmbeddedServletContainer.java:76)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:457)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:168)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:160)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 14 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManagedConfiguration.UISecurityConfigurationAdapter': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redirectSaveHandler': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.eclipse.hawkbit.repository.SystemManagement org.eclipse.hawkbit.autoconfigure.security.TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler.systemManagement; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:368)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.boot.context.embedded.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:233)
    at org.springframework.boot.context.embedded.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:214)
    at org.springframework.boot.context.embedded.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:90)
    at org.springframework.boot.context.embedded.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:78)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getServletContextInitializerBeans(EmbeddedWebApplicationContext.java:237)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.selfInitialize(EmbeddedWebApplicationContext.java:224)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.access$000(EmbeddedWebApplicationContext.java:85)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext$1.onStartup(EmbeddedWebApplicationContext.java:209)
    at org.springframework.boot.context.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:55)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5292)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    ... 1 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redirectSaveHandler': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.eclipse.hawkbit.repository.SystemManagement org.eclipse.hawkbit.autoconfigure.security.TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler.systemManagement; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:381)
    at org.eclipse.hawkbit.autoconfigure.security.SecurityManagedConfiguration$UISecurityConfigurationAdapter$$EnhancerBySpringCGLIB$$da35ec40.redirectSaveHandler(<generated>)
    at org.eclipse.hawkbit.autoconfigure.security.SecurityManagedConfiguration$UISecurityConfigurationAdapter.afterPropertiesSet(SecurityManagedConfiguration.java:348)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:305)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
    ... 34 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.eclipse.hawkbit.repository.SystemManagement org.eclipse.hawkbit.autoconfigure.security.TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler.systemManagement; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 51 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
    ... 53 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 64 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:444)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
    ... 66 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
    ... 81 common frames omitted

Caused by: org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:117)
    at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:71)
    at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:284)
    at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:282)
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
    at org.flywaydb.core.internal.command.DbMigrate.applyMigration(DbMigrate.java:282)
    at org.flywaydb.core.internal.command.DbMigrate.access$800(DbMigrate.java:46)
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:207)
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:156)
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
    at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:156)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1059)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1418)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006)
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 90 common frames omitted

Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
at org.mariadb.jdbc.internal.util.ExceptionMapper.get(ExceptionMapper.java:125)
at org.mariadb.jdbc.internal.util.ExceptionMapper.throwException(ExceptionMapper.java:69)
at org.mariadb.jdbc.MariaDbStatement.executeQueryEpilog(MariaDbStatement.java:226)
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:260)
at org.mariadb.jdbc.MariaDbStatement.execute(MariaDbStatement.java:273)
at org.flywaydb.core.internal.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:238)
at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:114)
... 107 common frames omitted
Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1103)
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:132)
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:251)
... 110 common frames omitted

2016-12-02 15:24:11.219 INFO 23429 --- [ main] .b.l.ClasspathLoggingApplicationListener : Application failed to start with classpath: [file:/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/target/classes/, file:/root/.m2/repository/org/apache/commons/commons-lang3/3.4/commons-lang3-3.4.jar, file:/root/.m2/repository/org/springframework/spring-tx/4.2.7.RELEASE/spring-tx-4.2.7.RELEASE.jar, file:/root/.m2/repository/org/w3c/css/sac/1.3/sac-1.3.jar, file:/root/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/1.3.7.RELEASE/spring-boot-autoconfigure-1.3.7.RELEASE.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-security-integration/0.2.0-SNAPSHOT/hawkbit-security-integration-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/springframework/data/spring-data-commons/1.11.4.RELEASE/spring-data-commons-1.11.4.RELEASE.jar, file:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/8.0.36/tomcat-embed-core-8.0.36.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-security-core/0.2.0-SNAPSHOT/hawkbit-security-core-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/apache/httpcomponents/httpcore/4.4.5/httpcore-4.4.5.jar, file:/root/.m2/repository/org/springframework/data/spring-data-jpa/1.9.4.RELEASE/spring-data-jpa-1.9.4.RELEASE.jar, file:/root/.m2/repository/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar, file:/root/.m2/repository/org/vaadin/alump/distributionbar/dbar-addon/1.2.0/dbar-addon-1.2.0.jar, file:/root/.m2/repository/org/vaadin/addons/lazyquerycontainer/vaadin-lazyquerycontainer/7.4.0.1/vaadin-lazyquerycontainer-7.4.0.1.jar, file:/root/.m2/repository/com/yahoo/platform/yui/yuicompressor/2.4.8/yuicompressor-2.4.8.jar, file:/root/.m2/repository/org/vaadin/addons/flexibleoptiongroup/2.2.0/flexibleoptiongroup-2.2.0.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-autoconfigure/0.2.0-SNAPSHOT/hawkbit-autoconfigure-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-rest-core/0.2.0-SNAPSHOT/hawkbit-rest-core-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/apache/logging/log4j/log4j-api/2.4.1/log4j-api-2.4.1.jar, file:/root/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar, file:/root/.m2/repository/commons-codec/commons-codec/1.9/commons-codec-1.9.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-ui/0.2.0-SNAPSHOT/hawkbit-ui-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/jsoup/jsoup/1.8.3/jsoup-1.8.3.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-mgmt-resource/0.2.0-SNAPSHOT/hawkbit-mgmt-resource-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/mongodb/mongo-java-driver/3.2.2/mongo-java-driver-3.2.2.jar, file:/root/.m2/repository/org/eclipse/persistence/org.eclipse.persistence.jpa/2.6.2/org.eclipse.persistence.jpa-2.6.2.jar, file:/root/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar, file:/root/.m2/repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar, file:/root/.m2/repository/org/springframework/spring-aop/4.2.7.RELEASE/spring-aop-4.2.7.RELEASE.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot/1.3.7.RELEASE/spring-boot-1.3.7.RELEASE.jar, file:/root/.m2/repository/com/vaadin/vaadin-shared/7.6.5/vaadin-shared-7.6.5.jar, file:/root/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.21/jcl-over-slf4j-1.7.21.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-core/0.2.0-SNAPSHOT/hawkbit-repository-core-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/aspectj/aspectjweaver/1.8.9/aspectjweaver-1.8.9.jar, file:/root/.m2/repository/com/vaadin/external/atmosphere/atmosphere-runtime/2.2.7.vaadin1/atmosphere-runtime-2.2.7.vaadin1.jar, file:/root/.m2/repository/com/rabbitmq/amqp-client/3.6.3/amqp-client-3.6.3.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-http-security/0.2.0-SNAPSHOT/hawkbit-http-security-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/com/google/guava/guava/19.0/guava-19.0.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-starter-web/1.3.7.RELEASE/spring-boot-starter-web-1.3.7.RELEASE.jar, file:/root/.m2/repository/com/vaadin/vaadin-client/7.6.5/vaadin-client-7.6.5.jar, file:/root/.m2/repository/org/springframework/spring-expression/4.2.7.RELEASE/spring-expression-4.2.7.RELEASE.jar, file:/root/.m2/repository/org/apache/tomcat/tomcat-jdbc/8.0.36/tomcat-jdbc-8.0.36.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-ddi-api/0.2.0-SNAPSHOT/hawkbit-ddi-api-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-logging-juli/8.0.36/tomcat-embed-logging-juli-8.0.36.jar, file:/root/.m2/repository/rhino/js/1.7R2/js-1.7R2.jar, file:/root/.m2/repository/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1.jar, file:/root/.m2/repository/org/eclipse/persistence/org.eclipse.persistence.asm/2.6.2/org.eclipse.persistence.asm-2.6.2.jar, file:/root/.m2/repository/com/vaadin/vaadin-spring/1.0.0/vaadin-spring-1.0.0.jar, file:/root/.m2/repository/org/springframework/spring-web/4.2.7.RELEASE/spring-web-4.2.7.RELEASE.jar, file:/root/.m2/repository/com/vaadin/vaadin-push/7.6.5/vaadin-push-7.6.5.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-starter/1.3.7.RELEASE/spring-boot-starter-1.3.7.RELEASE.jar, file:/root/.m2/repository/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar, file:/root/.m2/repository/com/vaadin/vaadin-sass-compiler/0.9.13/vaadin-sass-compiler-0.9.13.jar, file:/root/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.6.7/jackson-core-2.6.7.jar, file:/root/.m2/repository/org/springframework/spring-jdbc/4.2.7.RELEASE/spring-jdbc-4.2.7.RELEASE.jar, file:/root/.m2/repository/org/springframework/retry/spring-retry/1.1.3.RELEASE/spring-retry-1.1.3.RELEASE.jar, file:/root/.m2/repository/org/springframework/spring-context-support/4.2.7.RELEASE/spring-context-support-4.2.7.RELEASE.jar, file:/root/.m2/repository/ch/qos/logback/logback-classic/1.1.7/logback-classic-1.1.7.jar, file:/root/.m2/repository/org/vaadin/addons/tokenfield/7.0.1/tokenfield-7.0.1.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-starter-jdbc/1.3.7.RELEASE/spring-boot-starter-jdbc-1.3.7.RELEASE.jar, file:/root/.m2/repository/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE.jar, file:/root/.m2/repository/org/flywaydb/flyway-core/3.2.1/flyway-core-3.2.1.jar, file:/root/.m2/repository/org/mariadb/jdbc/mariadb-java-client/1.5.2/mariadb-java-client-1.5.2.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-mgmt-api/0.2.0-SNAPSHOT/hawkbit-mgmt-api-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/jboss/logging/jboss-logging/3.3.0.Final/jboss-logging-3.3.0.Final.jar, file:/root/.m2/repository/org/vaadin/spring/extensions/vaadin-spring-ext-security/0.0.6.RELEASE/vaadin-spring-ext-security-0.0.6.RELEASE.jar, file:/root/.m2/repository/org/springframework/security/spring-security-config/4.1.2.RELEASE/spring-security-config-4.1.2.RELEASE.jar, file:/root/.m2/repository/org/springframework/data/spring-data-mongodb/1.8.4.RELEASE/spring-data-mongodb-1.8.4.RELEASE.jar, file:/root/.m2/repository/org/vaadin/spring/addons/vaadin-spring-addon-eventbus/0.0.6.RELEASE/vaadin-spring-addon-eventbus-0.0.6.RELEASE.jar, file:/root/.m2/repository/org/springframework/amqp/spring-amqp/1.6.1.RELEASE/spring-amqp-1.6.1.RELEASE.jar, file:/root/.m2/repository/org/slf4j/jul-to-slf4j/1.7.21/jul-to-slf4j-1.7.21.jar, file:/root/.m2/repository/org/hibernate/hibernate-validator/5.2.4.Final/hibernate-validator-5.2.4.Final.jar, file:/root/.m2/repository/com/vaadin/external/flute/flute/1.3.0.gg2/flute-1.3.0.gg2.jar, file:/root/.m2/repository/com/vaadin/vaadin-server/7.6.5/vaadin-server-7.6.5.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-artifact-repository-mongo/0.2.0-SNAPSHOT/hawkbit-artifact-repository-mongo-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/1.3.7.RELEASE/spring-boot-starter-tomcat-1.3.7.RELEASE.jar, file:/root/.m2/repository/org/springframework/spring-webmvc/4.2.7.RELEASE/spring-webmvc-4.2.7.RELEASE.jar, file:/root/.m2/repository/org/springframework/hateoas/spring-hateoas/0.19.0.RELEASE/spring-hateoas-0.19.0.RELEASE.jar, file:/root/.m2/repository/com/h2database/h2/1.4.192/h2-1.4.192.jar, file:/root/.m2/repository/org/springframework/security/spring-security-core/4.1.2.RELEASE/spring-security-core-4.1.2.RELEASE.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-ddi-resource/0.2.0-SNAPSHOT/hawkbit-ddi-resource-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/com/rabbitmq/http-client/1.0.0.RELEASE/http-client-1.0.0.RELEASE.jar, file:/root/.m2/repository/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2.jar, file:/root/.m2/repository/com/fasterxml/classmate/1.1.0/classmate-1.1.0.jar, file:/root/.m2/repository/org/eclipse/persistence/javax.persistence/2.1.1/javax.persistence-2.1.1.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-starter-data-jpa/1.3.7.RELEASE/spring-boot-starter-data-jpa-1.3.7.RELEASE.jar, file:/root/.m2/repository/org/eclipse/persistence/org.eclipse.persistence.antlr/2.6.2/org.eclipse.persistence.antlr-2.6.2.jar, file:/root/.m2/repository/org/eclipse/persistence/org.eclipse.persistence.jpa.jpql/2.6.2/org.eclipse.persistence.jpa.jpql-2.6.2.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-dmf-api/0.2.0-SNAPSHOT/hawkbit-dmf-api-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/com/vaadin/external/streamhtmlparser/streamhtmlparser-jsilver/0.0.10.vaadin1/streamhtmlparser-jsilver-0.0.10.vaadin1.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-starter-validation/1.3.7.RELEASE/spring-boot-starter-validation-1.3.7.RELEASE.jar, file:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/8.0.36/tomcat-embed-el-8.0.36.jar, file:/root/.m2/repository/org/eclipse/persistence/org.eclipse.persistence.core/2.6.2/org.eclipse.persistence.core-2.6.2.jar, file:/root/.m2/repository/org/slf4j/log4j-over-slf4j/1.7.21/log4j-over-slf4j-1.7.21.jar, file:/root/.m2/repository/org/springframework/security/spring-security-web/4.1.2.RELEASE/spring-security-web-4.1.2.RELEASE.jar, file:/root/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.6.7/jackson-annotations-2.6.7.jar, file:/root/.m2/repository/org/yaml/snakeyaml/1.16/snakeyaml-1.16.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-core/0.2.0-SNAPSHOT/hawkbit-core-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.6.7/jackson-databind-2.6.7.jar, file:/root/.m2/repository/org/springframework/security/spring-security-aspects/4.1.2.RELEASE/spring-security-aspects-4.1.2.RELEASE.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-dmf-amqp/0.2.0-SNAPSHOT/hawkbit-dmf-amqp-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/com/vaadin/vaadin-spring-boot/1.0.0/vaadin-spring-boot-1.0.0.jar, file:/root/.m2/repository/org/apache/tomcat/tomcat-juli/8.0.36/tomcat-juli-8.0.36.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-starter-logging/1.3.7.RELEASE/spring-boot-starter-logging-1.3.7.RELEASE.jar, file:/root/.m2/repository/org/vaadin/addons/contextmenu/4.5/contextmenu-4.5.jar, file:/root/.m2/repository/org/springframework/spring-beans/4.2.7.RELEASE/spring-beans-4.2.7.RELEASE.jar, file:/root/.m2/repository/com/vaadin/external/google/guava/16.0.1.vaadin1/guava-16.0.1.vaadin1.jar, file:/root/.m2/repository/org/springframework/spring-messaging/4.2.7.RELEASE/spring-messaging-4.2.7.RELEASE.jar, file:/root/.m2/repository/com/vaadin/external/slf4j/vaadin-slf4j-jdk14/1.6.1/vaadin-slf4j-jdk14-1.6.1.jar, file:/root/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/8.0.36/tomcat-embed-websocket-8.0.36.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-api/0.2.0-SNAPSHOT/hawkbit-repository-api-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/org/springframework/spring-orm/4.2.7.RELEASE/spring-orm-4.2.7.RELEASE.jar, file:/root/.m2/repository/org/springframework/spring-aspects/4.2.7.RELEASE/spring-aspects-4.2.7.RELEASE.jar, file:/root/.m2/repository/org/springframework/spring-core/4.2.7.RELEASE/spring-core-4.2.7.RELEASE.jar, file:/root/.m2/repository/org/springframework/spring-context/4.2.7.RELEASE/spring-context-4.2.7.RELEASE.jar, file:/root/.m2/repository/cz/jirutka/rsql/rsql-parser/2.1.0/rsql-parser-2.1.0.jar, file:/root/.m2/repository/org/vaadin/spring/extensions/vaadin-spring-ext-core/0.0.6.RELEASE/vaadin-spring-ext-core-0.0.6.RELEASE.jar, file:/root/.m2/repository/com/vaadin/vaadin-themes/7.6.5/vaadin-themes-7.6.5.jar, file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-ddi-dl-api/0.2.0-SNAPSHOT/hawkbit-ddi-dl-api-0.2.0-SNAPSHOT.jar, file:/root/.m2/repository/javax/transaction/javax.transaction-api/1.2/javax.transaction-api-1.2.jar, file:/root/.m2/repository/org/springframework/boot/spring-boot-starter-aop/1.3.7.RELEASE/spring-boot-starter-aop-1.3.7.RELEASE.jar, file:/root/.m2/repository/ch/qos/logback/logback-core/1.1.7/logback-core-1.1.7.jar, file:/root/.m2/repository/org/springframework/amqp/spring-rabbit/1.6.1.RELEASE/spring-rabbit-1.6.1.RELEASE.jar]
[WARNING]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:478)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:760)
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:306)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174)
at org.eclipse.hawkbit.app.Start.main(Start.java:41)
... 6 more
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:99)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.(TomcatEmbeddedServletContainer.java:76)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:457)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:168)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:160)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 14 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManagedConfiguration.UISecurityConfigurationAdapter': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redirectSaveHandler': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.eclipse.hawkbit.repository.SystemManagement org.eclipse.hawkbit.autoconfigure.security.TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler.systemManagement; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:368)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.boot.context.embedded.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:233)
    at org.springframework.boot.context.embedded.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:214)
    at org.springframework.boot.context.embedded.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:90)
    at org.springframework.boot.context.embedded.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:78)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getServletContextInitializerBeans(EmbeddedWebApplicationContext.java:237)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.selfInitialize(EmbeddedWebApplicationContext.java:224)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.access$000(EmbeddedWebApplicationContext.java:85)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext$1.onStartup(EmbeddedWebApplicationContext.java:209)
    at org.springframework.boot.context.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:55)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5292)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    ... 1 more

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redirectSaveHandler': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.eclipse.hawkbit.repository.SystemManagement org.eclipse.hawkbit.autoconfigure.security.TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler.systemManagement; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:381)
    at org.eclipse.hawkbit.autoconfigure.security.SecurityManagedConfiguration$UISecurityConfigurationAdapter$$EnhancerBySpringCGLIB$$da35ec40.redirectSaveHandler(<generated>)
    at org.eclipse.hawkbit.autoconfigure.security.SecurityManagedConfiguration$UISecurityConfigurationAdapter.afterPropertiesSet(SecurityManagedConfiguration.java:348)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:305)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
    ... 34 more

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.eclipse.hawkbit.repository.SystemManagement org.eclipse.hawkbit.autoconfigure.security.TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler.systemManagement; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 51 more

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
    ... 53 more

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 64 more

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:444)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
    ... 66 more

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
    ... 81 more

Caused by: org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
Migration V1_0_1__init___MYSQL.sql failed

SQL State : 42000
Error Code : 1071
Message : Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
Line : 361
Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)

    at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:117)
    at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:71)
    at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:284)
    at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:282)
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
    at org.flywaydb.core.internal.command.DbMigrate.applyMigration(DbMigrate.java:282)
    at org.flywaydb.core.internal.command.DbMigrate.access$800(DbMigrate.java:46)
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:207)
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:156)
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
    at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:156)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1059)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1418)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006)
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 90 more

Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
at org.mariadb.jdbc.internal.util.ExceptionMapper.get(ExceptionMapper.java:125)
at org.mariadb.jdbc.internal.util.ExceptionMapper.throwException(ExceptionMapper.java:69)
at org.mariadb.jdbc.MariaDbStatement.executeQueryEpilog(MariaDbStatement.java:226)
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:260)
at org.mariadb.jdbc.MariaDbStatement.execute(MariaDbStatement.java:273)
at org.flywaydb.core.internal.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:238)
at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:114)
... 107 more
Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Specified key was too long; max key length is 767 bytes
Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1103)
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:132)
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:251)
... 110 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.560 s
[INFO] Finished at: 2016-12-02T15:24:11+01:00
[INFO] Final Memory: 59M/746M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.7.RELEASE:run (default-cli) on project hawkbit-example-app: An exception occurred while running. null: InvocationTargetException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat: Error creating bean with name 'securityManagedConfiguration.UISecurityConfigurationAdapter': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redirectSaveHandler': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.eclipse.hawkbit.repository.SystemManagement org.eclipse.hawkbit.autoconfigure.security.TenantMetadataSavedRequestAwareVaadinAuthenticationSuccessHandler.systemManagement; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'systemManagement': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.persistence.EntityManager org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.entityManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.SharedEntityManagerCreator#0': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
[ERROR] Migration V1_0_1__init___MYSQL.sql failed
[ERROR] -----------------------------------------
[ERROR] SQL State : 42000
[ERROR] Error Code : 1071
[ERROR] Message : Specified key was too long; max key length is 767 bytes
[ERROR] Query is : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
[ERROR] Location : db/migration/MYSQL/V1_0_1__init___MYSQL.sql (/home/adminArea/servers/hawkbit/examples/hawkbit-example-app/file:/root/.m2/repository/org/eclipse/hawkbit/hawkbit-repository-jpa/0.2.0-SNAPSHOT/hawkbit-repository-jpa-0.2.0-SNAPSHOT.jar!/db/migration/MYSQL/V1_0_1__init___MYSQL.sql)
[ERROR] Line : 361
[ERROR] Statement : create index sp_idx_target_info_02 on sp_target_info (target_id, update_status)
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Provide optional integration with multi tenant identity management services

Currently hawkBit offers no identity management providers (only the Spring Security single user basic auth). We should provide an option that allows hawkBit users to integrate with external authentication providers.

I think a good approach would be to leverage the UAA project which seems to have everything we need.

Steps:

  • Provide hawkBit integration for OAuth2 providers
  • Provide hawkBit configurable authority mapping to hawkBit permissions (e.g. by Spring Boot properties).

Allow setting controller attributes via DMF API

Currently the controller attributes can only be provided via the DDI-API by putting the data via HTTP after a controller registration as documented DDI-API configData.

The DMF-API should also be able to allow putting controller attributes via the API, e.g. using the AMQP-Headers to allow putting attributes at THING_CREATED event.

Repository abstraction API

Refactoring:

  • Provide interface on top of *management implementations.
  • Make entities immutable and create proper update methods that state by signature what can be updated.
  • Introduce builder pattern for EntityFactory create methods and repository update methods.
  • Use IDs in signatures for searches, not complete entities
  • Consistent usage of Java 8 Optional in the interfaces (Repo shall never return null!)
  • Remove TargetInfo interfaces as this does not belong into the API. The very existence of this object is very Spring Data/JPA specific.
  • Consistent usage of paging (make sure that we never query everything)
  • Fix DMF model name clashes by means of renaming DMF model in similar pattern to the other APIs.
  • Check if we really always ned Page or is Slice sufficient
  • Split management services (e.g. DS and DS type)
  • Consistent naming of methods (see below)

Remove boiler plate

  • Remove external artifact (concept was never finished anyway and does not fit to hawkBit as of today)

Method naming concept (example target management)

// Count all targets
Long count()

// Count by filter parameter (example)
Long countByTargetFilterQuery(@NotEmpty String targetFilterQuery);

//Create entity
List<Target> create(@NotEmpty Collection<TargetCreate> create)
Target create(@NotNull TargetCreate create)

//Delete entities (throws EntityNotFoundException if one element does not exist (at least one not found in collection case))
void delete(@NotEmpty Collection<Long> targetIDs);
void delete(@NotNull Long targetID);
void deleteByControllerId(@NotEmpty String controllerId);
void deleteByControllerId(@NotEmpty Collection<String> controllerId);

//Update Target (throws EntityNotFoundException if one element does not exist (at least one not found in collection case))
List<Target> update(@NotEmpty Collection<TargetUpdate> update);
Target update(@NotNull TargetUpdate update);

//Exist
boolean exists(@NotNull Long targetId)
boolean existsByAssignedDistributionSet(@NotNull Long distributionSetID);

// Read methods
// Find one on technical ID (Optional, no EntityNotFoundException)
Optional<Target> get(@NotNull Long targetId);
List<Target> get(@NotEmpty Collection<Long> targetId);

// Find one on non-ID but unique constraint (Optional, no EntityNotFoundException)
Optional<Target> getByControllerID(@NotEmpty String controllerId);
List<Target> getByControllerID(@NotEmpty Collection<String> controllerId);

// Find one on non-ID but and non unique constraint (Optional, no EntityNotFoundException)
Optional<Target> findFirstByDescription(@NotEmpty String description);

// Query/search repository (page might be empty, no EntityNotFoundException) (note: pageReq always first in signature)
Page<Target> findByAssignedDistributionSet(@NotNull Pageable pageReq, @NotNull Long distributionSetID);

Downloading artifacts fails

Hi,

Hawkbit fails to download the update artefacts. If I download the uploaded artifact via the UI, I get this error:

Download link: _http://serverip:8080/DEFAULT/controller/v1/25/softwaremodules/1/artifacts_/inose_551020161216140356.swu
Response:

{"exceptionClass":"org.eclipse.hawkbit.repository.exception.GridFSDBFileNotFoundException","errorCode":"hawkbit.server.error.artifact.loadFailed","message":"23c5cdd7850b903e10b1dcf8df0554f9d466d3c7"}

If I ask the available artefacts, I get the correct download link:
Download link: http://serverip:8080/DEFAULT/controller/v1/25/softwaremodules/1/artifacts
Response:

[{"filename":"inose_551020161216140356.swu","hashes":{"sha1":"23c5cdd7850b903e10b1dcf8df0554f9d466d3c7","md5":"161637a8682ee1706463ed896670f99e"},"size":78853632,"_links":{"download-http":{"href":"http://serverip:8080/DEFAULT/controller/v1/25/softwaremodules/1/artifacts/inose_551020161216140356.swu"},"md5sum-http":{"href":"http://52.16.170.80:8080/DEFAULT/controller/v1/25/softwaremodules/1/artifacts/inose_551020161216140356.swu.MD5SUM"}}}]

This is a copy of the log token from the example app with the --debug flag enabled:

2017-01-05 12:48:04.753 INFO 31193 --- [executor-pool-1] o.e.h.r.jpa.rollout.RolloutScheduler : Checking creating rollouts for 1 tenants
2017-01-05 12:48:04.760 INFO 31193 --- [executor-pool-0] o.e.h.r.jpa.rollout.RolloutScheduler : Checking starting rollouts for 1 tenants
2017-01-05 12:48:05.910 DEBUG 31193 --- [qtp367967231-19] o.s.b.c.web.OrderedRequestContextFilter : Bound request context to thread: Request(GET /DEFAULT/controller/v1/25/softwaremodules/1/artifacts/inose_551020161216140356.swu)@a4d2e14
2017-01-05 12:48:05.910 DEBUG 31193 --- [qtp367967231-19] o.s.b.a.e.mvc.EndpointHandlerMapping : Looking up handler method for path /DEFAULT/controller/v1/25/softwaremodules/1/artifacts/inose_551020161216140356.swu
> 2017-01-05 12:48:05.912 DEBUG 31193 --- [qtp367967231-19] o.s.b.a.e.mvc.EndpointHandlerMapping : Did not find handler method for [/DEFAULT/controller/v1/25/softwaremodules/1/artifacts/inose_551020161216140356.swu]
2017-01-05 12:48:05.936 DEBUG 31193 --- [qtp367967231-19] o.s.b.c.web.OrderedRequestContextFilter : Cleared thread-bound request context: Request(GET /DEFAULT/controller/v1/25/softwaremodules/1/artifacts/inose_551020161216140356.swu)@a4d2e14
2017-01-05 12:48:06.757 INFO 31193 --- [executor-pool-2] o.e.h.r.jpa.rollout.RolloutScheduler : Checking creating rollouts for 1 tenants
2017-01-05 12:48:06.763 INFO 31193 --- [executor-pool-1] o.e.h.r.jpa.rollout.RolloutScheduler : Checking starting rollouts for 1 tenants

Somebody knows what the root cause can be?

Thx

Peter

Unable to run hawkBit Example Application

Actually I'm trying to run the example application to evaluate hawkbit with no success.

It seems that the hawkbit UI is not compatible with the hawkbit update server anymore.

After installing everything the web ui comes up and I can login successfully. When the next screen is shown the following error message pops up:

"Communication Problem Take note of any unsaved data, and click here or press ESC to continue. Invalid JSON from Server."

I tried it with the latest master (commit e1557b2) and the 0.2.0M2 tag with the same result.

Download URLs for HTTP or HTTPS differently structured

With the merge of pull 120 the structure of the JSON providing the download URLs for HTTP has changed the field "download" to "download-http". But nothing changed for HTTPS, meaning that the download URL remains in the field "download".

Is it a desired behavior? What's the rational behind it?

The undesired consequence is that the existence of the field "download" or "download-http" has to be checked before getting the value.

Have a look at the code after this line to better understand what I mean.

sandbox broken?

Hi,

it seems the hawkbit sandbox is currently not working.

  • login to management console fails
  • REST interface error:

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Tue Oct 04 13:32:34 UTC 2016
    There was an unexpected error (type=Internal Server Error, status=500).
    Tenant DEFAULT does not exists, cannot create entity class org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType with id null

Can you confirm/fix it please?

Cheers,
Johannes

What is the main goal of the tenant

Hi,
I read the DDI API and there are two questions open

  1. What is the main goal of the tenant. Currently only DEFAULT works ??
    GET /{tenant}/controller/v1/{controllerId}

  2. What is the best way to realize DDI API with multi devices behind one Device?

[Dev 1 Master with WEB Connection]
+----- [Dev 1.1]
+----- [Dev 1.2]
+----- [Dev 1.3]

Provide abstact interface for hawkBits repository implementation

Currently hawkBits interfaces interact directly with the repository implementation. That makes it very hard to evaluate/implement alternative implementations on different persistence providers (e.g. MongoDB, Geode, Cassandra etc.).

What we should do:

  • Provide interfaces for the repository services.
  • Migrate current repository to be a JPA implementation.

Tasks:

  • Split management methods (interface and JPA impl)
  • Split model POJOs (interface and JPA imply)
  • Remove org.springframework.data.jpa.domain.Specification from API
  • Split maven modules into API and JPA
  • Refactor TestDataUtils to use new API.
  • Refactor default data generation to use new API and create more reasonable type setup.
  • Document new setup in wiki.
  • Remove dependencies on JPA part from the other modules (especially the tests) and use new API instead
  • Provide auto configuration for implementations

Upload limit of 1MB

Is there a reason why uploads may not exceed 1MB in size? Can you enlarge that limit?
If I want to upload new image, I will definitely exceed it.

[Enhancement] check offered download URL works

It would be nice if Hawkbit could check if artifacts uploaded via Hawkbit are reachable via the offered URL before offering the download to the devices.

We missconfigured Hawkbit to offer both HTTP and HTTPS downloads, although only HTTP is being supported. The devices try first to use HTTPS, but since only HTTP is supported, they fail. We are adding some checks on the device software to be more robust against these kind of missconfigurations. But it would make the whole system more robust if Hawkbit could check it too.

org.eclipse.persistence.exceptions.QueryException

debug.txt

On running the example app and on login the below error occurs

org.springframework.orm.jpa.JpaSystemException: Exception [EclipseLink-6174] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.QueryException
Exception Description: No value was provided for the session property [eclipselink.tenant-id]. This exception is possible when using additional criteria or tenant discriminator columns without specifying the associated contextual property. These properties must be set through EntityManager, EntityManagerFactory or persistence unit properties. If using native EclipseLink, these properties should be set directly on the session.
Query: ReadObjectQuery(name="readJpaDistributionSetType" referenceClass=JpaDistributionSetType sql="SELECT id, tenant, colour, created_at, created_by, deleted, description, type_key, last_modified_at, last_modified_by, name, optlock_revision FROM sp_distribution_set_type WHERE ((id = ?) AND (tenant = ?))"); nested exception is javax.persistence.PersistenceException: Exception [EclipseLink-6174] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.QueryException
Exception Description: No value was provided for the session property [eclipselink.tenant-id]. This exception is possible when using additional criteria or tenant discriminator columns without specifying the associated contextual property. These properties must be set through EntityManager, EntityManagerFactory or persistence unit properties. If using native EclipseLink, these properties should be set directly on the session.
Query: ReadObjectQuery(name="readJpaDistributionSetType" referenceClass=JpaDistributionSetType sql="SELECT id, tenant, colour, created_at, created_by, deleted, description, type_key, last_modified_at, last_modified_by, name, optlock_revision FROM sp_distribution_set_type WHERE ((id = ?) AND (tenant = ?))")
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:418)
at org.springframework.orm.jpa.DefaultJpaDialect.translateExceptionIfPossible(DefaultJpaDialect.java:122)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:491)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy199.findAll(Unknown Source)
at org.eclipse.hawkbit.repository.jpa.JpaSystemManagement.findTenants(JpaSystemManagement.java:207)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:139)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:69)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy212.findTenants(Unknown Source)
at org.eclipse.hawkbit.repository.jpa.rollout.RolloutScheduler.lambda$startingRolloutScheduler$171(RolloutScheduler.java:110)
at org.eclipse.hawkbit.security.SystemSecurityContext.lambda$runAsSystemAsTenant$0(SystemSecurityContext.java:99)
at org.eclipse.hawkbit.security.SecurityContextTenantAware.runAsTenant(SecurityContextTenantAware.java:55)
at org.eclipse.hawkbit.security.SystemSecurityContext.runAsSystemAsTenant(SystemSecurityContext.java:96)
at org.eclipse.hawkbit.security.SystemSecurityContext.runAsSystem(SystemSecurityContext.java:69)
at org.eclipse.hawkbit.repository.jpa.rollout.RolloutScheduler.startingRolloutScheduler(RolloutScheduler.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.security.concurrent.DelegatingSecurityContextRunnable.run(DelegatingSecurityContextRunnable.java:83)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-6174] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.QueryException
Exception Description: No value was provided for the session property [eclipselink.tenant-id]. This exception is possible when using additional criteria or tenant discriminator columns without specifying the associated contextual property. These properties must be set through EntityManager, EntityManagerFactory or persistence unit properties. If using native EclipseLink, these properties should be set directly on the session.
Query: ReadObjectQuery(name="readJpaDistributionSetType" referenceClass=JpaDistributionSetType sql="SELECT id, tenant, colour, created_at, created_by, deleted, description, type_key, last_modified_at, last_modified_by, name, optlock_revision FROM sp_distribution_set_type WHERE ((id = ?) AND (tenant = ?))")
at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:484)
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:327)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:503)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:488)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
... 49 common frames omitted
Caused by: org.eclipse.persistence.exceptions.QueryException:
Exception Description: No value was provided for the session property [eclipselink.tenant-id]. This exception is possible when using additional criteria or tenant discriminator columns without specifying the associated contextual property. These properties must be set through EntityManager, EntityManagerFactory or persistence unit properties. If using native EclipseLink, these properties should be set directly on the session.
Query: ReadObjectQuery(name="readJpaDistributionSetType" referenceClass=JpaDistributionSetType sql="SELECT id, tenant, colour, created_at, created_by, deleted, description, type_key, last_modified_at, last_modified_by, name, optlock_revision FROM sp_distribution_set_type WHERE ((id = ?) AND (tenant = ?))")
at org.eclipse.persistence.exceptions.QueryException.missingContextPropertyForPropertyParameterExpression(QueryException.java:266)
at org.eclipse.persistence.internal.expressions.ParameterExpression.getValue(ParameterExpression.java:277)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.translate(DatabaseCall.java:1102)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:241)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectOneRow(DatasourceCallQueryMechanism.java:714)
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2803)
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2756)
at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:555)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1175)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:904)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1134)
at org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:441)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1222)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1857)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1839)
at org.eclipse.persistence.internal.indirection.NoIndirectionPolicy.valueFromQuery(NoIndirectionPolicy.java:326)
at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRowInternal(ForeignReferenceMapping.java:2327)
at org.eclipse.persistence.mappings.OneToOneMapping.valueFromRowInternal(OneToOneMapping.java:1848)
at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRow(ForeignReferenceMapping.java:2171)
at org.eclipse.persistence.mappings.ForeignReferenceMapping.buildCloneFromRow(ForeignReferenceMapping.java:336)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoWorkingCopyClone(ObjectBuilder.java:1997)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneFromRow(ObjectBuilder.java:2250)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:848)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:735)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:689)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:805)
at org.eclipse.persistence.queries.ReadAllQuery.registerResultInUnitOfWork(ReadAllQuery.java:962)
at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:573)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1175)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:904)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1134)
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:460)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1222)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1857)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1839)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:473)
... 65 common frames omitted

Should the HawkbitRepository project be responsible for creating sample data ?

org.eclipse.hawkbit.repository.SystemManagement currently has a method that creates some default meta-data.

    private DistributionSetType createStandardSoftwareDataSetup() {
        final SoftwareModuleType eclApp = softwareModuleTypeRepository.save(new SoftwareModuleType("application",
                "ECL Application", "Edge Controller Linux base application type", 1));
        final SoftwareModuleType eclOs = softwareModuleTypeRepository
                .save(new SoftwareModuleType("os", "ECL OS", "Edge Controller Linux operation system image type", 1));
        final SoftwareModuleType eclJvm = softwareModuleTypeRepository.save(
                new SoftwareModuleType("runtime", "ECL JVM", "Edge Controller Linux java virtual machine type.", 1));

        distributionSetTypeRepository.save(
                new DistributionSetType("ecl_os", "OS only", "Standard Edge Controller Linux distribution set type.")
                        .addMandatoryModuleType(eclOs));

        distributionSetTypeRepository.save(new DistributionSetType("ecl_os_app", "OS with optional app",
                "Standard Edge Controller Linux distribution set type. OS only.").addMandatoryModuleType(eclOs)
                        .addOptionalModuleType(eclApp));

        return distributionSetTypeRepository
                .save(new DistributionSetType("ecl_os_app_jvm", "OS with optional app and jvm",
                        "Standard Edge Controller Linux distribution set type. OS with optional application.")
                                .addMandatoryModuleType(eclOs).addOptionalModuleType(eclApp)
                                .addOptionalModuleType(eclJvm));
    }

Shouldn't this be put in a separate project ?

Download and deferred installation in a maintenance window

Currently, hawkBit's mode is download+install/activate, i.e., as soon as a distributionset is assigned to a target, the target device gets to know about the available update upon its next poll operation, subsequently downloading, installing, and activating the update.
Although one can orchestrate the start time of announcing updates via, e.g., rollout management, it would be nice to have, e.g., connectivity-constrained devices to download the update artifact beforehand and then to install the downloaded artifact once the defined maintenance window is reached.

This may be achieved by splitting download and installation/activation into two steps, thereby putting the burden of keeping track of the maintenance window upon hawkBit. As a result -- although not strictly required as the artifact should have been downloaded by then -- devices need to be online in order to receive the install/activate order from hawkBit. Furthermore, this would be a (major) API change.
As an alternative, the maintenance window may be communicated to the device which downloads the artifact but defers installation/activation until the maintenance window is reached. This would require to extend the feedback options in hawkBit to reflect the "downloaded but waiting for maintenance window" state. If no maintenance window is specified, the current behavior is maintained.

Duplication in URL returned when using certain clients requesting updates

I'm sorry, this issue is weird, but we are suffering it...

Depending on the client using to request the Hawkbit REST-API for updates for a device we are getting URLs with "duplicated parts". For example:

http://localhost:8080/default/controller/v1/IntegrationTestTargetID/**default/controller/v1/IntegrationTestTargetID/**configData

removing the duplicated part

http://localhost:8080/default/controller/v1/IntegrationTestTargetID/~~default/controller/v1/IntegrationTestTargetID/~~configData

remains the right URL

http://localhost:8080/default/controller/v1/IntegrationTestTargetID/configData

We found the issue when using Python "requests" module and the command line tools curl and wget.

For reproducibility, as answer to this wget request:
wget -S -q --header "Accept: application/json" -O - 'http://localhost:8080//default/controller/v1/IntegrationTestTargetID/'

we get this

  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  X-XSS-Protection: 1; mode=block
  ETag: "0a93b87de3a6db0a5f6078450569c953f"
  Content-Type: application/json;charset=UTF-8
  Content-Length: 203
  Date: Tue, 17 May 2016 09:55:12 GMT
{"config":{"polling":{"sleep":"00:05:00"}},"_links":{"configData":{"href":"http://localhost:8080/default/controller/v1/IntegrationTestTargetID/default/controller/v1/IntegrationTestTargetID/configData"}}}

See the duplication?

The Download link for the artifacts is not switching to hawkbit.url

I have set the setting hawkbit.url in the application.properties but when I perform a GET to the deploymentBase/ID/ URL the response is wrong. For the download link hawkBit returns localhost:8080...

        "_links": {
          "download-http": {
            "href":  "http://localhost:8080/DEFAULT/controller/v1/eugenId/softwaremodules/2/artifacts/fimware.txt"
          },
          "md5sum-http": {
            "href": "http://localhost:8080/DEFAULT/controller/v1/eugenId/softwaremodules/2/artifacts/fimware.txt.MD5SUM"
          }
        }

DDI API: Ability to get informed about update execution status

Currently, a device is only able to send its update execution status but is not able to query it from hawkBit.
Such a functionality may prove useful, for example, when the client software running on the device loses this information prior to reporting a final execution status such as closed to hawkBit. This may happen, e.g., due to a power cycle or simply a crash. Upon the client software restarting, it installs the same payload again as advertised by hawkBit (as the device has not sent a final update execution status). Instead, if the last feedback sent to hawkBit would be reported back to the device, the client may resume installation.

For the implementation, the DDI API response to a GET /{tenant}/controller/v1/{targetid}/deploymentBase/{actionId} could include the previously sent feedback via POST /{tenant}/controller/v1/{targetid}/deploymentBase/{actionId}/feedback.
In particular, status.result.progress and status.details for status.execution=proceeding is interesting here.

DDI API defines custom string time in body which is not specified

The DDI-API uses a time field in the feedback channel which is intend for clients to write the time of message creation in it. DDI-API

Example

{
    "id": 1,
    "time": "20140511T121314",
    "status": {
        "execution": "closed",
        "result": {
            "finished": "success",
            "progress": {}
        }
    }
}

Unfortunately this time field is not really documented in which format the time is. Furthermore it might make sense to use a standard ISO time format like ISO 8601 standard for JSON dates.

Provide Docker setup for hawkBit standard demo

Our current standard demo needs the hawkBit update server example app, the device simulator example and a RabbitMQ. If you get serious you might even need a MariaDB.

To make things easier we should provide a simple off the shelf Docker setup:

  • Docker image for example app
  • Docker image for device simulator
  • Docker compose file for the complete setup with rabbit and maria
  • Maybe we get crazy and run at startup the start of the simulation so people are good to go 😄

Release 0.2.0

Preparations on code base

  • Upgrade to Spring Boot 1.4
  • Migrate Example app to Jetty
  • Complete rollout management and modular hawkBit features
  • Migrate examples and extension to extra GitHub repositories
  • Promote example update server to "hawkBit Runtime"

Release PRE steps

  • Check for missing CQs
  • Create project plan
  • Request PMC approval
  • Generate IP Log

Release

  • Check that all CQs are completed
  • Complete Release Review
  • Technical Release 0.2.0 on Maven Central

Stretch Goals 😄

Target integration rules

Many users that leverage hawkBit's plug-and-play functionality have the problem that newly integrated devices do nothing until an operator has assigned the first distribution set.

However, in most cases users expect to a have a zero day update, i.e. the device gets updated to the current version as soon as it is connected for the first time.

Current workaround is to scan the repo through management API on a regular basis or don't use plug-and-play at all.

A target integration rule could be a more elegant way to solve this.

The idea is to define a pairs of target filter and a distribution set. Basically every target that enters the system is checked against the filter and if that one hits the defined distribution set it is automatically assigned.

The filter/ds combinations should be defined on tenant level and managed through TenantMetadata

Alternatively we could add this to the filter definition itself.

UAA Extension doesn't work as described in readme

After having followed the instructions in ./extensions/hawkbit-extension-uaa with the example app we were unable to see hawkbit make a connection to UAA. It appeared to default to the admin:admin credentials.

  1. Make changes as described here extensions/hawkbit-extension-uaa/README.md in the example app
  2. mvn clean install
  3. java -jar examples/hawkbit-example-app/target/hawkbit-example-app-0.2.0-SNAPSHOT.jar
  4. Logging in with UAA credentials results in a failed login attempt. It does not appear any attempt was made to reach UAA and the admin:admin credentials still work.

How can I remove old Rollouts

In the the Rollout Management View is no way to remove old Rollouts. Is it possible to add an delete button to each Row ?

Sandbox is down?

The login fails when clicking on "Demo", but the login somehow succeeds nevertheless since one can access "https://hawkbit.eu-gb.mybluemix.net/" properly afterthat
however virtually no operation works, since everything in the UI (e.g create a new target) seems to fail with the following exception:

The operation cannot be fulfilled due to TenantNotExistException. Please contact administrator

Provide hawkbit in a sandbox

@kartben pointed out it would be very handy to have an running hawkBit in a sandbox for users who want to see and try out the hawkBit example-application without cloning and compiling the whole hawkBit-project.

  • For this the hawkBit example app should run on a public available infrastructure (e.g. eclipse, bluemix, etc.)
  • The hawkBit example app must be protected that not too many devices can be created to overload the system.

Download URLs always starting with "http://localhost:8080"

We have installed Hawkbit on a machine and have devices getting uploads via DDI (HTTP).

In past versions (last update older than 1 month) everything worked fine, but yesterday we updated to the newest master and suddenly the downloads of artifacts aren't working anymore. The issue is that the download URL being provided starts with "http://localhost:8080" although Hawkbit is being contacted from outside of the machine.

Are there any changes in the configuration that we haven't done so far? Or is it an issue in Hawkbit?

Unfortunately I don't think I can provide which version was working fine until Tuesday.

Software download link provided has "localhost" as server

Hi,

I ran swupdate in combination with hawkbit. In the logs of swupdate I noticed that the download link provided from hawkbit has "localhost" as server. This fails of course.

In the swupdate log appended in attachment, line 23 shows a correct link to my server (REST API link) and line 27 shows the answer of the hawkbit server. In that answer, "localhost" is provided as download server.

Where can I fix this issue?

Best regards

Peter De Witte
localhost.txt

Session timeout

While playing around with Hawkbit I noticed a lot of session timeouts even after a couple of minutes, forcing me to login again very frequently.

Management API returns error

Connecting at https://hawkbit.eu-gb.mybluemix.net/rest/v1/targets and providing admin:admin as auth returns the following error:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Dec 01 09:25:12 UTC 2016
There was an unexpected error (type=Internal Server Error, status=500).
Tenant DEFAULT does not exists, cannot create entity class org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType with id null

Similar error when using the DDD API:

{"exceptionClass":"org.eclipse.hawkbit.repository.exception.TenantNotExistException","errorCode":"hawkbit.server.error.repo.tenantNotExists","message":"Tenant DEFAULT does not exists, cannot create entity class org.eclipse.hawkbit.repository.jpa.model.JpaTarget with id null"}

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.