Coder Social home page Coder Social logo

eclipse / dirigible Goto Github PK

View Code? Open in Web Editor NEW
268.0 20.0 86.0 186.82 MB

Eclipse Dirigible™ Project

Home Page: https://www.dirigible.io

License: Eclipse Public License 2.0

HTML 10.77% Java 23.50% JavaScript 61.40% CSS 2.72% Dockerfile 0.01% Python 0.07% TypeScript 1.47% Rust 0.05% Shell 0.01% Mustache 0.01% XSLT 0.01% Batchfile 0.01% PowerShell 0.01%

dirigible's Introduction

Eclipse Dirigible™

Build Status Eclipse License Download Dirigible Artifact HUB Maven Central GitHub contributors FOSSA Status CII Best Practices REUSE status

Eclipse Dirigible is a High-Productivity Application Platform as a Service (hpaPaaS). It provides an application server consisting of pre-selected execution engines and built-in web development tools. It is suitable for rapid development of business applications by also leveraging the Low Code / No Code techniques.

dirigible logo

Enjoy Programming Like Never Before

From the end user's perspective (developer), Dirigible runs directly in the browser, therefore does not require any downloads or installations.

From the service provider's perspective (PaaS/SaaS), Dirigible packs all required components in a self-contained software bundle that can be deployed on a VM or Docker capable environment such as Kubernetes.

Dirigible supports access to RDBMS via JDBC. Currently supported versions for RDBMS are PostgreSQL, HANA, Sybase ASE, MySQL, H2, and Derby as well as NoSQL like MongoDB or pure OLAP like Snowflake.

Dirigible promotes the In-System Programming development model, where you make dynamic alteration of the live system. To provide the self-contained bundle serving all the needed features for a business application, Dirigible packs various engines such as ActiveMQ, Quartz, Lucene, Flowable, Mylyn, GraalJS and others.

The project started as an internal SAP initiative to address the extension and adoption use-cases related to SOA and Enterprise Services.

Instant Trial

You can try the sandbox instance to have a quick look on the functionality you are interested https://trial.dirigible.io.

Contact Us

Join the Eclipse Dirigible Slack Workspace to chat with the community: https://slack.dirigible.io

Get Started

Download

The "fast-track" - you can download the precompiled binaries produced by the GitHub Actions from http://download.dirigible.io/ and skip the build section.

Nevertheless, we highly recommend building the binaries from source in order to have all experimental features that are not available in the releases.

Build

Prerequisites
Steps
  1. Clone the project repository - master branch or download the latest sources.

In case there is an issue with 'Filename too long in Git for Windows' then add the fllowing git confoguration

git config --system core.longpaths true
  1. Go to the root folder.

  2. Build the project with:

     mvn clean install
    

    If you are using Windows, make sure that you open the terminal as Administrator otherwise the tests will fail

  • Quick build with tests:

     mvn -T 1C clean install -D maven.javadoc.skip=true -D license.skip=true
    
  • If you don't want to trigger license updates:

     mvn clean install -D license.skip=true
    
  • If you have a multi-core system, enable threads:

     mvn -T 1C clean install
    
  • If you don't need to run tests, you can add the following argument:

     mvn clean install -D skipTests
    
  • If you don't need to compile and run tests:

     mvn clean install -D skipTests
    
  • If you want to do a fast build, with no tests, javadocs and license updates:

     mvn -T 1C clean install -D skipTests -D maven.javadoc.skip=true -D license.skip=true
    

The build should pass successfully.

The produced dirigible-application-XXX-executable.jar file is in build/application/target/ and is ready to be deployed. It is Spring Boot application, so it can be executed locally right away.

Run

Standalone

Prerequisites

macOS:

    brew install ttyd

Linux:

Linux support is built-in

More info about ttyd can be found at: ttyd

Steps
  1. From the project root directory run command:

     java -jar build/application/target/dirigible-application-*-executable.jar
    

    for Windows

     java -jar build/application/target/$((Get-ChildItem dirigible-application-*-executable.jar -recurse -File | Sort-Object LastWriteTime | Select -Last 1).BaseName).jar
    
  2. In case you want to debug the application run:

     java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar build/application/target/dirigible-application-*-executable.jar
    
  3. Open a web browser and go to: http://localhost:8080

  4. Login with user: admin and password admin

  5. REST API description in an OpenAPI format can be found at: http://localhost:8080/swagger-ui/index.html

Docker

Prerequisites
Steps
  1. Get the container
  • Pull the official image from Docker Hub:

      docker pull dirigiblelabs/dirigible:latest
    
  • Build it locally

      cd build/application
      docker build -t dirigiblelabs/dirigible:latest -f Dockerfile .
    

    prerequisite: build the project as described in step 4 here

  1. Start the container
docker run --name dirigible --rm -p 8080:8080 -p 8081:8081 dirigiblelabs/dirigible:latest

If you want to have persistent workspace and databases, mount a host folder

export WORKSPACE_DIR='/tmp/dirigible'

docker run --name dirigible --rm -p 8080:8080 -p 8081:8081 \
    -v "$WORKSPACE_DIR:/target/dirigible" \
    dirigiblelabs/dirigible:latest

Note: we have observed performance issues on Windows when mounting a folder. To improve the perfomance, use dedicated volume instead:

docker volume create dirigible_volume

docker run --name dirigible --rm -p 8080:8080 `
    -v "dirigible_volume:/target/dirigible" `
    dirigiblelabs/dirigible:latest
  1. Open a web browser and go to: http://localhost:8080

  2. Optionally you can enhance and customize the Dockerfile from here

Native image

Prerequisites
  • Install SDKMAN
  • Install GraalVM: sdk install java 21.0.1-graal
  • Make sure that JAVA_HOME and PATH env variables point to your graalvm jdk from the previous step
Steps
  • Execute the following on your github repo root folder
# build dirigible fat jar
mvn -T 1C clean install -D maven.test.skip=true -D skipTests -D maven.javadoc.skip=true -D license.skip=true

rm -rf dirigible

# build native image
native-image -jar 'build/application/target/dirigible-application-10.0.0-SNAPSHOT-executable.jar' -o dirigible

# start dirigible
./dirigible

PostgreSQL

Steps
  1. Install PostgreSQL e.g. for MacOS:

     brew install postgresql
    

    Alternatively you can use docker image

     docker run -itd -e POSTGRES_DB=postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres  -p 5432:5432 --name postgresql postgres
    
  2. The run it:

     brew services start postgresql
    
  3. Create a default user:

     createuser -s postgres
    
  4. And expose the following environment variables:

     export DIRIGIBLE_DATASOURCE_DEFAULT_DRIVER=org.postgresql.Driver
     export DIRIGIBLE_DATASOURCE_DEFAULT_URL=jdbc:postgresql://localhost:5432/postgres
     export DIRIGIBLE_DATASOURCE_DEFAULT_USERNAME=postgres
     export DIRIGIBLE_DATASOURCE_DEFAULT_PASSWORD=postgres
    

    for Windows execute the following in the terminal with admin privileges

    [System.Environment]::SetEnvironmentVariable('DIRIGIBLE_DATASOURCE_DEFAULT_DRIVER','org.postgresql.Driver', 'Machine')
    [System.Environment]::SetEnvironmentVariable('DIRIGIBLE_DATASOURCE_DEFAULT_URL','jdbc:postgresql://localhost:5432/postgres', 'Machine')
    [System.Environment]::SetEnvironmentVariable('DIRIGIBLE_DATASOURCE_DEFAULT_USERNAME','postgres', 'Machine')
    [System.Environment]::SetEnvironmentVariable('DIRIGIBLE_DATASOURCE_DEFAULT_PASSWORD','postgres', 'Machine')
    
  5. Then you can run Dirigible with PostgreSQL default database (DefaultDB).

    If you have started the Dirigible before, make sure to execute mvn clean before starting the Dirigible with the PostgreSQL

CMS with AWS S3

Eclipse Dirigible's Document perspective can be used with AWS S3, providing you CMS with S3's cloud storage.

Setup:

  • AWS account with generated credentials (AWS Acces Key, AWS Secret Key)
  • Set up the environment variables regarding CMS/CMS S3 exposed by Eclipse Dirigible. Full list can be found here.

Usage:

  • Navigate to the Document perspective in your Eclipse Dirigible instance
  • Upload a file and you should see the file in the perspective as well as in the S3 bucket

Test environment with LocalStack

If you prefer working with a test environment you can use LocalStack.

Setup:

  • Install LocalStack on your machine using the installation guide here or the following commands:
    • MacOS - brew install localstack/tap/localstack-cli

    • Linux -

      For x86-64:

       curl -Lo localstack-cli-3.0.2-linux-amd64-onefile.tar.gz \ 
        https://github.com/localstack/localstack-cli/releases/download/v3.0.2/localstack-cli-3.0.2-linux-amd64-onefile.tar.gz
      

      For ARM64:

      curl -Lo localstack-cli-3.0.2-linux-arm64-onefile.tar.gz \
        https://github.com/localstack/localstack-cli/releases/download/v3.0.2/localstack-cli-3.0.2-linux-arm64-onefile.tar.gz
      

      Then extract the LocalStack CLI from the terminal:

      sudo tar xvzf localstack-cli-3.0.2-linux-*-onefile.tar.gz -C /usr/local/bin
      
  • Start LocalStack using - localstack start -d
  • Set up the environment variables, mainly DIRIGIBLE_S3_PROVIDER=localstack, exposed by Eclipse Dirigible

Additional Information

License

This project is copyrighted by Eclipse Dirigible contributors and is available under the Eclipse Public License v 2.0. See LICENSE.txt and NOTICE.txt for further details.

FOSSA Status

Contributors

If you like to contribute to Dirigible, please read the Contributor's guide.

Attribution links

Unicons by IconScout: https://github.com/Iconscout/unicons

References

dirigible's People

Contributors

antoanetamh avatar borisnen avatar cheezus1 avatar d-velev avatar delchev avatar dependabot[bot] avatar dimitarquanterall avatar dimohg avatar dpanayotov avatar entrery avatar fluctuationqt avatar g051051 avatar ialidzhikov avatar iliyan-velichkov avatar ivanvolkoff avatar krasimirdermendzhiev avatar liliyalazarova avatar marinhadzhiev avatar minadoncheva avatar mit-ko-sap avatar mvladev avatar nedelcho-delchev-tues avatar satanasovv avatar shturec avatar stanzgenchev avatar svetlinzarev avatar tdermendjiev avatar thuf avatar vmutafov avatar wildflowerr1 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

dirigible's Issues

Streams API v3

Rename/Move workspace file fails with code 500 in Workspace Manager REST API

POST /services/v3/ide/workspace/workspace1/rename HTTP/1.1
Host: localhost:8080
Authorization:
Content-Type: application/json
Cache-Control: no-cache

{
"source":"/project1/alabala/filе",
"target":"/project1/alabala/file1"
}

Response
Code 500

java.lang.RuntimeException: Failed to invoke protected java.io.Reader() with no args
at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:107)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at org.eclipse.dirigible.runtime.core.services.GsonMessageBodyHandler.readFrom(GsonMessageBodyHandler.java:63)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1348)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1299)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:825)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:789)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:212)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:77)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:262)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:299)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:218)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:274)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.eclipse.dirigible.runtime.core.filter.HttpContextFilter.doFilter(HttpContextFilter.java:34)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.eclipse.jetty.servlets.DoSFilter.doFilterChain(DoSFilter.java:474)
at org.eclipse.jetty.servlets.DoSFilter.doFilter(DoSFilter.java:319)
at org.eclipse.jetty.servlets.DoSFilter.doFilter(DoSFilter.java:289)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.eclipse.jetty.servlets.QoSFilter.doFilter(QoSFilter.java:201)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.google.inject.servlet.DefaultFilterPipeline.dispatch(DefaultFilterPipeline.java:43)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:104)
... 58 more

Xml API v3

Context API v3

Java API v3

Extensions API v3

Base64 API v3

Escape API v3

[workspace rest api] add support for file/folder properties

To add a file/folders 'Properties' section to right-click context menu in IDE workspace we need a bit more info than location and media types.
Consult with different OS approach to it. Generally, it might be benefitial to add also size in bytes , UTC date/time created, UTC date/time last modified.
In the longer run also maybe owner id, creator id, last modified by id, acl permissions...

Database Update API v3

Http Upload API v3

Hex API v3

Globals API v3

Digest API v3

Http Session API v3

URL API v3

[rest api] respect the request 'accepts' media type for the errors format

To be fair with the clients, respect their 'accepts' header also for errors. If a client accepts a json, make sure to return (structured) json-formatted error, not plain text.
json-formatted errors are also easier to consume in angular, but nevertheless the primary solution here is to consult the accepts header, and not impose format.

Console API v3

SQL View

SQL view provides an editor for writing SQL scripts and executing them against the selected underlying database.
An integration with the Database view have to be done for the on database change event.

Create file with space in the name returns http code 500

Request URL: /services/v3/ide/workspaces/workspace1/project1/alabala/file%201
Request Method: POST
Accept: application/json, text/plain, /
no body

[ERROR] Illegal character in path at index 32: workspace1/project1/alabala/file 1

The file gets created successfully though

Preview View

Preview is showing the content of an URL. It has to be integrated with the Workspace View events to update the URL on file select.

SQL Builders

Type-safe SQL builders for easy and database agnostic SQL script definition, which produce database dependent native SQL scripts.

Zip API v3

Files API v3

Http Request API v3

Workspace Service

Workspace service providing the standard REST functionality for workspaces, projects, folders and files.

Http Client API v3

Http Response API v3

Persistence Layer

Lightweight persistence layer for storing and retrieving POJOs for Dirigible's core functionality e.g. extensions, access, publishing, jobs, etc.

Database API v3

Registry View

Registry shows the currently published content in the Dirigible's instance (/registry/public Repository section).
An integration with a read only editor have to be incorporated as well.

UUID API v3

User API v3

Theme Service

Theme related functionality. Setting and retrieving themed stylesheets.

Properties View

Properties shows the available name-value pair properties attached to a given artifact.
It have to be integrated with the Workspace view on select event.

Database Query API v3

Table Editor

Table Editor shows the definition details of a given Table from the *.table file

Databases View

Databases shows the currently available databases, datasources and underlying schemas, tables, views, etc.
The information comes from the /services/v3/ide/databases REST service.

Env API v3

Workspace View

Workspace View showing the content of the currently selected user's workspace - projects, folders and files.
It have to incorporate the file management capabilities as well as lifecycle management of the artifacts - e.g. publish.

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.