init
This commit is contained in:
		@@ -0,0 +1,4 @@
 | 
			
		||||
*
 | 
			
		||||
!target/*-runner
 | 
			
		||||
!target/*-runner.jar
 | 
			
		||||
!target/lib/*
 | 
			
		||||
							
								
								
									
										35
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
# Eclipse
 | 
			
		||||
.project
 | 
			
		||||
.classpath
 | 
			
		||||
.settings/
 | 
			
		||||
bin/
 | 
			
		||||
 | 
			
		||||
# IntelliJ
 | 
			
		||||
.idea
 | 
			
		||||
*.ipr
 | 
			
		||||
*.iml
 | 
			
		||||
*.iws
 | 
			
		||||
 | 
			
		||||
# NetBeans
 | 
			
		||||
nb-configuration.xml
 | 
			
		||||
 | 
			
		||||
# Visual Studio Code
 | 
			
		||||
.vscode
 | 
			
		||||
 | 
			
		||||
# OSX
 | 
			
		||||
.DS_Store
 | 
			
		||||
 | 
			
		||||
# Vim
 | 
			
		||||
*.swp
 | 
			
		||||
*.swo
 | 
			
		||||
 | 
			
		||||
# patch
 | 
			
		||||
*.orig
 | 
			
		||||
*.rej
 | 
			
		||||
 | 
			
		||||
# Maven
 | 
			
		||||
target/
 | 
			
		||||
pom.xml.tag
 | 
			
		||||
pom.xml.releaseBackup
 | 
			
		||||
pom.xml.versionsBackup
 | 
			
		||||
release.properties
 | 
			
		||||
							
								
								
									
										117
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/.mvn/wrapper/MavenWrapperDownloader.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/.mvn/wrapper/MavenWrapperDownloader.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,117 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 2007-present the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
import java.net.*;
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.nio.channels.*;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
 | 
			
		||||
public class MavenWrapperDownloader {
 | 
			
		||||
 | 
			
		||||
    private static final String WRAPPER_VERSION = "0.5.6";
 | 
			
		||||
    /**
 | 
			
		||||
     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
 | 
			
		||||
     */
 | 
			
		||||
    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
 | 
			
		||||
        + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
 | 
			
		||||
     * use instead of the default one.
 | 
			
		||||
     */
 | 
			
		||||
    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
 | 
			
		||||
            ".mvn/wrapper/maven-wrapper.properties";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Path where the maven-wrapper.jar will be saved to.
 | 
			
		||||
     */
 | 
			
		||||
    private static final String MAVEN_WRAPPER_JAR_PATH =
 | 
			
		||||
            ".mvn/wrapper/maven-wrapper.jar";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Name of the property which should be used to override the default download url for the wrapper.
 | 
			
		||||
     */
 | 
			
		||||
    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
 | 
			
		||||
 | 
			
		||||
    public static void main(String args[]) {
 | 
			
		||||
        System.out.println("- Downloader started");
 | 
			
		||||
        File baseDirectory = new File(args[0]);
 | 
			
		||||
        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
 | 
			
		||||
 | 
			
		||||
        // If the maven-wrapper.properties exists, read it and check if it contains a custom
 | 
			
		||||
        // wrapperUrl parameter.
 | 
			
		||||
        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
 | 
			
		||||
        String url = DEFAULT_DOWNLOAD_URL;
 | 
			
		||||
        if(mavenWrapperPropertyFile.exists()) {
 | 
			
		||||
            FileInputStream mavenWrapperPropertyFileInputStream = null;
 | 
			
		||||
            try {
 | 
			
		||||
                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
 | 
			
		||||
                Properties mavenWrapperProperties = new Properties();
 | 
			
		||||
                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
 | 
			
		||||
                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
 | 
			
		||||
            } catch (IOException e) {
 | 
			
		||||
                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
 | 
			
		||||
            } finally {
 | 
			
		||||
                try {
 | 
			
		||||
                    if(mavenWrapperPropertyFileInputStream != null) {
 | 
			
		||||
                        mavenWrapperPropertyFileInputStream.close();
 | 
			
		||||
                    }
 | 
			
		||||
                } catch (IOException e) {
 | 
			
		||||
                    // Ignore ...
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        System.out.println("- Downloading from: " + url);
 | 
			
		||||
 | 
			
		||||
        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
 | 
			
		||||
        if(!outputFile.getParentFile().exists()) {
 | 
			
		||||
            if(!outputFile.getParentFile().mkdirs()) {
 | 
			
		||||
                System.out.println(
 | 
			
		||||
                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
 | 
			
		||||
        try {
 | 
			
		||||
            downloadFileFromURL(url, outputFile);
 | 
			
		||||
            System.out.println("Done");
 | 
			
		||||
            System.exit(0);
 | 
			
		||||
        } catch (Throwable e) {
 | 
			
		||||
            System.out.println("- Error downloading");
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
            System.exit(1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
 | 
			
		||||
        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
 | 
			
		||||
            String username = System.getenv("MVNW_USERNAME");
 | 
			
		||||
            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
 | 
			
		||||
            Authenticator.setDefault(new Authenticator() {
 | 
			
		||||
                @Override
 | 
			
		||||
                protected PasswordAuthentication getPasswordAuthentication() {
 | 
			
		||||
                    return new PasswordAuthentication(username, password);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        URL website = new URL(urlString);
 | 
			
		||||
        ReadableByteChannel rbc;
 | 
			
		||||
        rbc = Channels.newChannel(website.openStream());
 | 
			
		||||
        FileOutputStream fos = new FileOutputStream(destination);
 | 
			
		||||
        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
 | 
			
		||||
        fos.close();
 | 
			
		||||
        rbc.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/.mvn/wrapper/maven-wrapper.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/.mvn/wrapper/maven-wrapper.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/.mvn/wrapper/maven-wrapper.properties
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/.mvn/wrapper/maven-wrapper.properties
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
 | 
			
		||||
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
 | 
			
		||||
							
								
								
									
										32
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
# sentinel-demo-quarkus project
 | 
			
		||||
 | 
			
		||||
This project uses Quarkus, the Supersonic Subatomic Java Framework.
 | 
			
		||||
 | 
			
		||||
If you want to learn more about Quarkus, please visit its website: [quarkus.io](https://quarkus.io/)
 | 
			
		||||
 | 
			
		||||
## Running the application in dev mode
 | 
			
		||||
 | 
			
		||||
You can run your application in dev mode that enables live coding using:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
./mvnw quarkus:dev
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Packaging and running the application
 | 
			
		||||
 | 
			
		||||
The application can be packaged using `./mvnw package`.
 | 
			
		||||
It produces the `sentinel-demo-quarkus-1.0-SNAPSHOT-runner.jar` file in the `/target` directory.
 | 
			
		||||
Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/lib` directory.
 | 
			
		||||
 | 
			
		||||
The application is now runnable using `java -jar target/sentinel-demo-quarkus-1.0-SNAPSHOT-runner.jar`.
 | 
			
		||||
 | 
			
		||||
## Creating a native executable
 | 
			
		||||
 | 
			
		||||
You can create a native executable using: `./mvnw package -Pnative`.
 | 
			
		||||
 | 
			
		||||
Or, if you don't have GraalVM installed, you can run the native executable build in a container using: `./mvnw package -Pnative -Dquarkus.native.container-build=true`.
 | 
			
		||||
 | 
			
		||||
You can then execute your native executable with: `./target/sentinel-demo-quarkus-1.0-SNAPSHOT-runner`
 | 
			
		||||
 | 
			
		||||
If you want to learn more about building native executables, please consult [building-native-image](https://quarkus.io/guides/building-native-image)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/build-native.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/build-native.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
./mvnw package -X -Pnative \
 | 
			
		||||
-Dquarkus.native.graalvm-home=/opt/graalvm-ce-java8-20.0.0
 | 
			
		||||
 | 
			
		||||
#-Dquarkus.native.container-build=true \
 | 
			
		||||
#-Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:20.0.0-java11 
 | 
			
		||||
#sudo docker build -f src/main/docker/Dockerfile.native -t quarkus/sentinel-demo-quarkus .
 | 
			
		||||
#sudo docker run -i --rm -p 8080:8182 quarkus/sentinel-demo-quarkus
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/build.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/build.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
mvn package
 | 
			
		||||
sudo docker build -f src/main/docker/Dockerfile.jvm -t quarkus/sentinel-demo-quarkus-jvm .
 | 
			
		||||
sudo docker run -i --rm -p 8080:8182 quarkus/sentinel-demo-quarkus-jvm
 | 
			
		||||
							
								
								
									
										310
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/mvnw
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										310
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/mvnw
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,310 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# ----------------------------------------------------------------------------
 | 
			
		||||
# Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
# or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
# distributed with this work for additional information
 | 
			
		||||
# regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
# to you under the Apache License, Version 2.0 (the
 | 
			
		||||
# "License"); you may not use this file except in compliance
 | 
			
		||||
# with the License.  You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing,
 | 
			
		||||
# software distributed under the License is distributed on an
 | 
			
		||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
# KIND, either express or implied.  See the License for the
 | 
			
		||||
# specific language governing permissions and limitations
 | 
			
		||||
# under the License.
 | 
			
		||||
# ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# ----------------------------------------------------------------------------
 | 
			
		||||
# Maven Start Up Batch script
 | 
			
		||||
#
 | 
			
		||||
# Required ENV vars:
 | 
			
		||||
# ------------------
 | 
			
		||||
#   JAVA_HOME - location of a JDK home dir
 | 
			
		||||
#
 | 
			
		||||
# Optional ENV vars
 | 
			
		||||
# -----------------
 | 
			
		||||
#   M2_HOME - location of maven2's installed home dir
 | 
			
		||||
#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
 | 
			
		||||
#     e.g. to debug Maven itself, use
 | 
			
		||||
#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
 | 
			
		||||
#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
 | 
			
		||||
# ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
if [ -z "$MAVEN_SKIP_RC" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -f /etc/mavenrc ] ; then
 | 
			
		||||
    . /etc/mavenrc
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -f "$HOME/.mavenrc" ] ; then
 | 
			
		||||
    . "$HOME/.mavenrc"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# OS specific support.  $var _must_ be set to either true or false.
 | 
			
		||||
cygwin=false;
 | 
			
		||||
darwin=false;
 | 
			
		||||
mingw=false
 | 
			
		||||
case "`uname`" in
 | 
			
		||||
  CYGWIN*) cygwin=true ;;
 | 
			
		||||
  MINGW*) mingw=true;;
 | 
			
		||||
  Darwin*) darwin=true
 | 
			
		||||
    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
 | 
			
		||||
    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
 | 
			
		||||
    if [ -z "$JAVA_HOME" ]; then
 | 
			
		||||
      if [ -x "/usr/libexec/java_home" ]; then
 | 
			
		||||
        export JAVA_HOME="`/usr/libexec/java_home`"
 | 
			
		||||
      else
 | 
			
		||||
        export JAVA_HOME="/Library/Java/Home"
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if [ -z "$JAVA_HOME" ] ; then
 | 
			
		||||
  if [ -r /etc/gentoo-release ] ; then
 | 
			
		||||
    JAVA_HOME=`java-config --jre-home`
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$M2_HOME" ] ; then
 | 
			
		||||
  ## resolve links - $0 may be a link to maven's home
 | 
			
		||||
  PRG="$0"
 | 
			
		||||
 | 
			
		||||
  # need this for relative symlinks
 | 
			
		||||
  while [ -h "$PRG" ] ; do
 | 
			
		||||
    ls=`ls -ld "$PRG"`
 | 
			
		||||
    link=`expr "$ls" : '.*-> \(.*\)$'`
 | 
			
		||||
    if expr "$link" : '/.*' > /dev/null; then
 | 
			
		||||
      PRG="$link"
 | 
			
		||||
    else
 | 
			
		||||
      PRG="`dirname "$PRG"`/$link"
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  saveddir=`pwd`
 | 
			
		||||
 | 
			
		||||
  M2_HOME=`dirname "$PRG"`/..
 | 
			
		||||
 | 
			
		||||
  # make it fully qualified
 | 
			
		||||
  M2_HOME=`cd "$M2_HOME" && pwd`
 | 
			
		||||
 | 
			
		||||
  cd "$saveddir"
 | 
			
		||||
  # echo Using m2 at $M2_HOME
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For Cygwin, ensure paths are in UNIX format before anything is touched
 | 
			
		||||
if $cygwin ; then
 | 
			
		||||
  [ -n "$M2_HOME" ] &&
 | 
			
		||||
    M2_HOME=`cygpath --unix "$M2_HOME"`
 | 
			
		||||
  [ -n "$JAVA_HOME" ] &&
 | 
			
		||||
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
 | 
			
		||||
  [ -n "$CLASSPATH" ] &&
 | 
			
		||||
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For Mingw, ensure paths are in UNIX format before anything is touched
 | 
			
		||||
if $mingw ; then
 | 
			
		||||
  [ -n "$M2_HOME" ] &&
 | 
			
		||||
    M2_HOME="`(cd "$M2_HOME"; pwd)`"
 | 
			
		||||
  [ -n "$JAVA_HOME" ] &&
 | 
			
		||||
    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$JAVA_HOME" ]; then
 | 
			
		||||
  javaExecutable="`which javac`"
 | 
			
		||||
  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
 | 
			
		||||
    # readlink(1) is not available as standard on Solaris 10.
 | 
			
		||||
    readLink=`which readlink`
 | 
			
		||||
    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
 | 
			
		||||
      if $darwin ; then
 | 
			
		||||
        javaHome="`dirname \"$javaExecutable\"`"
 | 
			
		||||
        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
 | 
			
		||||
      else
 | 
			
		||||
        javaExecutable="`readlink -f \"$javaExecutable\"`"
 | 
			
		||||
      fi
 | 
			
		||||
      javaHome="`dirname \"$javaExecutable\"`"
 | 
			
		||||
      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
 | 
			
		||||
      JAVA_HOME="$javaHome"
 | 
			
		||||
      export JAVA_HOME
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$JAVACMD" ] ; then
 | 
			
		||||
  if [ -n "$JAVA_HOME"  ] ; then
 | 
			
		||||
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
 | 
			
		||||
      # IBM's JDK on AIX uses strange locations for the executables
 | 
			
		||||
      JAVACMD="$JAVA_HOME/jre/sh/java"
 | 
			
		||||
    else
 | 
			
		||||
      JAVACMD="$JAVA_HOME/bin/java"
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    JAVACMD="`which java`"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ ! -x "$JAVACMD" ] ; then
 | 
			
		||||
  echo "Error: JAVA_HOME is not defined correctly." >&2
 | 
			
		||||
  echo "  We cannot execute $JAVACMD" >&2
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$JAVA_HOME" ] ; then
 | 
			
		||||
  echo "Warning: JAVA_HOME environment variable is not set."
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
 | 
			
		||||
 | 
			
		||||
# traverses directory structure from process work directory to filesystem root
 | 
			
		||||
# first directory with .mvn subdirectory is considered project base directory
 | 
			
		||||
find_maven_basedir() {
 | 
			
		||||
 | 
			
		||||
  if [ -z "$1" ]
 | 
			
		||||
  then
 | 
			
		||||
    echo "Path not specified to find_maven_basedir"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  basedir="$1"
 | 
			
		||||
  wdir="$1"
 | 
			
		||||
  while [ "$wdir" != '/' ] ; do
 | 
			
		||||
    if [ -d "$wdir"/.mvn ] ; then
 | 
			
		||||
      basedir=$wdir
 | 
			
		||||
      break
 | 
			
		||||
    fi
 | 
			
		||||
    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
 | 
			
		||||
    if [ -d "${wdir}" ]; then
 | 
			
		||||
      wdir=`cd "$wdir/.."; pwd`
 | 
			
		||||
    fi
 | 
			
		||||
    # end of workaround
 | 
			
		||||
  done
 | 
			
		||||
  echo "${basedir}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# concatenates all lines of a file
 | 
			
		||||
concat_lines() {
 | 
			
		||||
  if [ -f "$1" ]; then
 | 
			
		||||
    echo "$(tr -s '\n' ' ' < "$1")"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BASE_DIR=`find_maven_basedir "$(pwd)"`
 | 
			
		||||
if [ -z "$BASE_DIR" ]; then
 | 
			
		||||
  exit 1;
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
##########################################################################################
 | 
			
		||||
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
 | 
			
		||||
# This allows using the maven wrapper in projects that prohibit checking in binary data.
 | 
			
		||||
##########################################################################################
 | 
			
		||||
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
 | 
			
		||||
    if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
      echo "Found .mvn/wrapper/maven-wrapper.jar"
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
 | 
			
		||||
    fi
 | 
			
		||||
    if [ -n "$MVNW_REPOURL" ]; then
 | 
			
		||||
      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
 | 
			
		||||
    else
 | 
			
		||||
      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
 | 
			
		||||
    fi
 | 
			
		||||
    while IFS="=" read key value; do
 | 
			
		||||
      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
 | 
			
		||||
      esac
 | 
			
		||||
    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
 | 
			
		||||
    if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
      echo "Downloading from: $jarUrl"
 | 
			
		||||
    fi
 | 
			
		||||
    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
 | 
			
		||||
    if $cygwin; then
 | 
			
		||||
      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if command -v wget > /dev/null; then
 | 
			
		||||
        if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
          echo "Found wget ... using wget"
 | 
			
		||||
        fi
 | 
			
		||||
        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
 | 
			
		||||
            wget "$jarUrl" -O "$wrapperJarPath"
 | 
			
		||||
        else
 | 
			
		||||
            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
 | 
			
		||||
        fi
 | 
			
		||||
    elif command -v curl > /dev/null; then
 | 
			
		||||
        if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
          echo "Found curl ... using curl"
 | 
			
		||||
        fi
 | 
			
		||||
        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
 | 
			
		||||
            curl -o "$wrapperJarPath" "$jarUrl" -f
 | 
			
		||||
        else
 | 
			
		||||
            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
    else
 | 
			
		||||
        if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
          echo "Falling back to using Java to download"
 | 
			
		||||
        fi
 | 
			
		||||
        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
 | 
			
		||||
        # For Cygwin, switch paths to Windows format before running javac
 | 
			
		||||
        if $cygwin; then
 | 
			
		||||
          javaClass=`cygpath --path --windows "$javaClass"`
 | 
			
		||||
        fi
 | 
			
		||||
        if [ -e "$javaClass" ]; then
 | 
			
		||||
            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
 | 
			
		||||
                if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
                  echo " - Compiling MavenWrapperDownloader.java ..."
 | 
			
		||||
                fi
 | 
			
		||||
                # Compiling the Java class
 | 
			
		||||
                ("$JAVA_HOME/bin/javac" "$javaClass")
 | 
			
		||||
            fi
 | 
			
		||||
            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
 | 
			
		||||
                # Running the downloader
 | 
			
		||||
                if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
                  echo " - Running MavenWrapperDownloader.java ..."
 | 
			
		||||
                fi
 | 
			
		||||
                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
##########################################################################################
 | 
			
		||||
# End of extension
 | 
			
		||||
##########################################################################################
 | 
			
		||||
 | 
			
		||||
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
 | 
			
		||||
if [ "$MVNW_VERBOSE" = true ]; then
 | 
			
		||||
  echo $MAVEN_PROJECTBASEDIR
 | 
			
		||||
fi
 | 
			
		||||
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
 | 
			
		||||
 | 
			
		||||
# For Cygwin, switch paths to Windows format before running java
 | 
			
		||||
if $cygwin; then
 | 
			
		||||
  [ -n "$M2_HOME" ] &&
 | 
			
		||||
    M2_HOME=`cygpath --path --windows "$M2_HOME"`
 | 
			
		||||
  [ -n "$JAVA_HOME" ] &&
 | 
			
		||||
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
 | 
			
		||||
  [ -n "$CLASSPATH" ] &&
 | 
			
		||||
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
 | 
			
		||||
  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
 | 
			
		||||
    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Provide a "standardized" way to retrieve the CLI args that will
 | 
			
		||||
# work with both Windows and non-Windows executions.
 | 
			
		||||
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
 | 
			
		||||
export MAVEN_CMD_LINE_ARGS
 | 
			
		||||
 | 
			
		||||
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
 | 
			
		||||
 | 
			
		||||
exec "$JAVACMD" \
 | 
			
		||||
  $MAVEN_OPTS \
 | 
			
		||||
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
 | 
			
		||||
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
 | 
			
		||||
  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
 | 
			
		||||
							
								
								
									
										182
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/mvnw.cmd
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/mvnw.cmd
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,182 @@
 | 
			
		||||
@REM ----------------------------------------------------------------------------
 | 
			
		||||
@REM Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
@REM or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
@REM distributed with this work for additional information
 | 
			
		||||
@REM regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
@REM to you under the Apache License, Version 2.0 (the
 | 
			
		||||
@REM "License"); you may not use this file except in compliance
 | 
			
		||||
@REM with the License.  You may obtain a copy of the License at
 | 
			
		||||
@REM
 | 
			
		||||
@REM    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
@REM
 | 
			
		||||
@REM Unless required by applicable law or agreed to in writing,
 | 
			
		||||
@REM software distributed under the License is distributed on an
 | 
			
		||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
@REM KIND, either express or implied.  See the License for the
 | 
			
		||||
@REM specific language governing permissions and limitations
 | 
			
		||||
@REM under the License.
 | 
			
		||||
@REM ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@REM ----------------------------------------------------------------------------
 | 
			
		||||
@REM Maven Start Up Batch script
 | 
			
		||||
@REM
 | 
			
		||||
@REM Required ENV vars:
 | 
			
		||||
@REM JAVA_HOME - location of a JDK home dir
 | 
			
		||||
@REM
 | 
			
		||||
@REM Optional ENV vars
 | 
			
		||||
@REM M2_HOME - location of maven2's installed home dir
 | 
			
		||||
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
 | 
			
		||||
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
 | 
			
		||||
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
 | 
			
		||||
@REM     e.g. to debug Maven itself, use
 | 
			
		||||
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
 | 
			
		||||
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
 | 
			
		||||
@REM ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
 | 
			
		||||
@echo off
 | 
			
		||||
@REM set title of command window
 | 
			
		||||
title %0
 | 
			
		||||
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
 | 
			
		||||
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
 | 
			
		||||
 | 
			
		||||
@REM set %HOME% to equivalent of $HOME
 | 
			
		||||
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
 | 
			
		||||
 | 
			
		||||
@REM Execute a user defined script before this one
 | 
			
		||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
 | 
			
		||||
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
 | 
			
		||||
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
 | 
			
		||||
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
 | 
			
		||||
:skipRcPre
 | 
			
		||||
 | 
			
		||||
@setlocal
 | 
			
		||||
 | 
			
		||||
set ERROR_CODE=0
 | 
			
		||||
 | 
			
		||||
@REM To isolate internal variables from possible post scripts, we use another setlocal
 | 
			
		||||
@setlocal
 | 
			
		||||
 | 
			
		||||
@REM ==== START VALIDATION ====
 | 
			
		||||
if not "%JAVA_HOME%" == "" goto OkJHome
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo Error: JAVA_HOME not found in your environment. >&2
 | 
			
		||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
 | 
			
		||||
echo location of your Java installation. >&2
 | 
			
		||||
echo.
 | 
			
		||||
goto error
 | 
			
		||||
 | 
			
		||||
:OkJHome
 | 
			
		||||
if exist "%JAVA_HOME%\bin\java.exe" goto init
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo Error: JAVA_HOME is set to an invalid directory. >&2
 | 
			
		||||
echo JAVA_HOME = "%JAVA_HOME%" >&2
 | 
			
		||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
 | 
			
		||||
echo location of your Java installation. >&2
 | 
			
		||||
echo.
 | 
			
		||||
goto error
 | 
			
		||||
 | 
			
		||||
@REM ==== END VALIDATION ====
 | 
			
		||||
 | 
			
		||||
:init
 | 
			
		||||
 | 
			
		||||
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
 | 
			
		||||
@REM Fallback to current working directory if not found.
 | 
			
		||||
 | 
			
		||||
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
 | 
			
		||||
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
 | 
			
		||||
 | 
			
		||||
set EXEC_DIR=%CD%
 | 
			
		||||
set WDIR=%EXEC_DIR%
 | 
			
		||||
:findBaseDir
 | 
			
		||||
IF EXIST "%WDIR%"\.mvn goto baseDirFound
 | 
			
		||||
cd ..
 | 
			
		||||
IF "%WDIR%"=="%CD%" goto baseDirNotFound
 | 
			
		||||
set WDIR=%CD%
 | 
			
		||||
goto findBaseDir
 | 
			
		||||
 | 
			
		||||
:baseDirFound
 | 
			
		||||
set MAVEN_PROJECTBASEDIR=%WDIR%
 | 
			
		||||
cd "%EXEC_DIR%"
 | 
			
		||||
goto endDetectBaseDir
 | 
			
		||||
 | 
			
		||||
:baseDirNotFound
 | 
			
		||||
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
 | 
			
		||||
cd "%EXEC_DIR%"
 | 
			
		||||
 | 
			
		||||
:endDetectBaseDir
 | 
			
		||||
 | 
			
		||||
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
 | 
			
		||||
 | 
			
		||||
@setlocal EnableExtensions EnableDelayedExpansion
 | 
			
		||||
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
 | 
			
		||||
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
 | 
			
		||||
 | 
			
		||||
:endReadAdditionalConfig
 | 
			
		||||
 | 
			
		||||
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
 | 
			
		||||
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
 | 
			
		||||
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
 | 
			
		||||
 | 
			
		||||
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
 | 
			
		||||
 | 
			
		||||
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
 | 
			
		||||
    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
 | 
			
		||||
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
 | 
			
		||||
if exist %WRAPPER_JAR% (
 | 
			
		||||
    if "%MVNW_VERBOSE%" == "true" (
 | 
			
		||||
        echo Found %WRAPPER_JAR%
 | 
			
		||||
    )
 | 
			
		||||
) else (
 | 
			
		||||
    if not "%MVNW_REPOURL%" == "" (
 | 
			
		||||
        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
 | 
			
		||||
    )
 | 
			
		||||
    if "%MVNW_VERBOSE%" == "true" (
 | 
			
		||||
        echo Couldn't find %WRAPPER_JAR%, downloading it ...
 | 
			
		||||
        echo Downloading from: %DOWNLOAD_URL%
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    powershell -Command "&{"^
 | 
			
		||||
		"$webclient = new-object System.Net.WebClient;"^
 | 
			
		||||
		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
 | 
			
		||||
		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
 | 
			
		||||
		"}"^
 | 
			
		||||
		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
 | 
			
		||||
		"}"
 | 
			
		||||
    if "%MVNW_VERBOSE%" == "true" (
 | 
			
		||||
        echo Finished downloading %WRAPPER_JAR%
 | 
			
		||||
    )
 | 
			
		||||
)
 | 
			
		||||
@REM End of extension
 | 
			
		||||
 | 
			
		||||
@REM Provide a "standardized" way to retrieve the CLI args that will
 | 
			
		||||
@REM work with both Windows and non-Windows executions.
 | 
			
		||||
set MAVEN_CMD_LINE_ARGS=%*
 | 
			
		||||
 | 
			
		||||
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
 | 
			
		||||
if ERRORLEVEL 1 goto error
 | 
			
		||||
goto end
 | 
			
		||||
 | 
			
		||||
:error
 | 
			
		||||
set ERROR_CODE=1
 | 
			
		||||
 | 
			
		||||
:end
 | 
			
		||||
@endlocal & set ERROR_CODE=%ERROR_CODE%
 | 
			
		||||
 | 
			
		||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
 | 
			
		||||
@REM check for post script, once with legacy .bat ending and once with .cmd ending
 | 
			
		||||
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
 | 
			
		||||
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
 | 
			
		||||
:skipRcPost
 | 
			
		||||
 | 
			
		||||
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
 | 
			
		||||
if "%MAVEN_BATCH_PAUSE%" == "on" pause
 | 
			
		||||
 | 
			
		||||
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
 | 
			
		||||
 | 
			
		||||
exit /B %ERROR_CODE%
 | 
			
		||||
							
								
								
									
										184
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								sentinel/sentinel-demo/sentinel-demo-quarkus/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,184 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
 | 
			
		||||
         xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
			
		||||
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>sentinel-demo</artifactId>
 | 
			
		||||
        <groupId>com.alibaba.csp</groupId>
 | 
			
		||||
        <version>1.8.3</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
 | 
			
		||||
    <artifactId>sentinel-demo-quarkus</artifactId>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <compiler-plugin.version>3.8.1</compiler-plugin.version>
 | 
			
		||||
        <maven.compiler.parameters>true</maven.compiler.parameters>
 | 
			
		||||
        <maven.compiler.source>1.8</maven.compiler.source>
 | 
			
		||||
        <maven.compiler.target>1.8</maven.compiler.target>
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 | 
			
		||||
        <quarkus-plugin.version>1.4.1.Final</quarkus-plugin.version>
 | 
			
		||||
        <quarkus.platform.artifact-id>quarkus-universe-bom</quarkus.platform.artifact-id>
 | 
			
		||||
        <quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
 | 
			
		||||
        <quarkus.platform.version>1.4.1.Final</quarkus.platform.version>
 | 
			
		||||
        <surefire-plugin.version>2.22.1</surefire-plugin.version>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
    <dependencyManagement>
 | 
			
		||||
        <dependencies>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>${quarkus.platform.group-id}</groupId>
 | 
			
		||||
                <artifactId>${quarkus.platform.artifact-id}</artifactId>
 | 
			
		||||
                <version>${quarkus.platform.version}</version>
 | 
			
		||||
                <type>pom</type>
 | 
			
		||||
                <scope>import</scope>
 | 
			
		||||
            </dependency>
 | 
			
		||||
        </dependencies>
 | 
			
		||||
    </dependencyManagement>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.quarkus</groupId>
 | 
			
		||||
            <artifactId>quarkus-resteasy</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.quarkus</groupId>
 | 
			
		||||
            <artifactId>quarkus-jackson</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.csp</groupId>
 | 
			
		||||
            <artifactId>sentinel-core</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.csp</groupId>
 | 
			
		||||
            <artifactId>sentinel-logging-slf4j</artifactId>
 | 
			
		||||
            <version>${project.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.csp</groupId>
 | 
			
		||||
            <artifactId>sentinel-transport-simple-http</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.csp</groupId>
 | 
			
		||||
            <artifactId>sentinel-parameter-flow-control</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.csp</groupId>
 | 
			
		||||
            <artifactId>sentinel-jax-rs-quarkus-adapter</artifactId>
 | 
			
		||||
            <version>${project.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.csp</groupId>
 | 
			
		||||
            <artifactId>sentinel-annotation-quarkus-adapter</artifactId>
 | 
			
		||||
            <version>${project.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.csp</groupId>
 | 
			
		||||
            <artifactId>sentinel-native-image-quarkus-adapter</artifactId>
 | 
			
		||||
            <version>${project.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.quarkus</groupId>
 | 
			
		||||
            <artifactId>quarkus-junit5</artifactId>
 | 
			
		||||
            <scope>test</scope>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.rest-assured</groupId>
 | 
			
		||||
            <artifactId>rest-assured</artifactId>
 | 
			
		||||
            <scope>test</scope>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
        <plugins>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>io.quarkus</groupId>
 | 
			
		||||
                <artifactId>quarkus-maven-plugin</artifactId>
 | 
			
		||||
                <version>${quarkus-plugin.version}</version>
 | 
			
		||||
                <executions>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <goals>
 | 
			
		||||
                            <goal>build</goal>
 | 
			
		||||
                        </goals>
 | 
			
		||||
                    </execution>
 | 
			
		||||
                </executions>
 | 
			
		||||
            </plugin>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <artifactId>maven-compiler-plugin</artifactId>
 | 
			
		||||
                <version>${compiler-plugin.version}</version>
 | 
			
		||||
            </plugin>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <artifactId>maven-surefire-plugin</artifactId>
 | 
			
		||||
                <version>${surefire-plugin.version}</version>
 | 
			
		||||
                <configuration>
 | 
			
		||||
                    <systemProperties>
 | 
			
		||||
                        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
 | 
			
		||||
                    </systemProperties>
 | 
			
		||||
                </configuration>
 | 
			
		||||
            </plugin>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>org.jboss.jandex</groupId>
 | 
			
		||||
                <artifactId>jandex-maven-plugin</artifactId>
 | 
			
		||||
                <version>1.0.7</version>
 | 
			
		||||
                <executions>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <id>make-index</id>
 | 
			
		||||
                        <goals>
 | 
			
		||||
                            <goal>jandex</goal>
 | 
			
		||||
                        </goals>
 | 
			
		||||
                    </execution>
 | 
			
		||||
                </executions>
 | 
			
		||||
            </plugin>
 | 
			
		||||
        </plugins>
 | 
			
		||||
    </build>
 | 
			
		||||
 | 
			
		||||
    <profiles>
 | 
			
		||||
        <profile>
 | 
			
		||||
            <id>native</id>
 | 
			
		||||
            <activation>
 | 
			
		||||
                <property>
 | 
			
		||||
                    <name>native</name>
 | 
			
		||||
                </property>
 | 
			
		||||
            </activation>
 | 
			
		||||
            <build>
 | 
			
		||||
                <plugins>
 | 
			
		||||
                    <plugin>
 | 
			
		||||
                        <artifactId>maven-failsafe-plugin</artifactId>
 | 
			
		||||
                        <version>${surefire-plugin.version}</version>
 | 
			
		||||
                        <executions>
 | 
			
		||||
                            <execution>
 | 
			
		||||
                                <goals>
 | 
			
		||||
                                    <goal>integration-test</goal>
 | 
			
		||||
                                    <goal>verify</goal>
 | 
			
		||||
                                </goals>
 | 
			
		||||
                                <configuration>
 | 
			
		||||
                                    <systemProperties>
 | 
			
		||||
                                        <native.image.path>
 | 
			
		||||
                                            ${project.build.directory}/${project.build.finalName}-runner
 | 
			
		||||
                                        </native.image.path>
 | 
			
		||||
                                    </systemProperties>
 | 
			
		||||
                                </configuration>
 | 
			
		||||
                            </execution>
 | 
			
		||||
                        </executions>
 | 
			
		||||
                    </plugin>
 | 
			
		||||
                </plugins>
 | 
			
		||||
            </build>
 | 
			
		||||
            <properties>
 | 
			
		||||
                <quarkus.package.type>native</quarkus.package.type>
 | 
			
		||||
                <quarkus.native.auto-service-loader-registration>true</quarkus.native.auto-service-loader-registration>
 | 
			
		||||
                <quarkus.native.additional-build-args>-J-Dcsp.sentinel.log.dir=/tmp,-J-Dcsp.sentinel.api.port=8722,-J-Dcsp.sentinel.heartbeat.client.ip=127.0.0.1,-J-Dcsp.sentinel.dashboard.server=127.0.0.1:8080,-J-Dproject.name=sentinel-demo-quarkus,-H:+TraceClassInitialization,--report-unsupported-elements-at-runtime,--allow-incomplete-classpath</quarkus.native.additional-build-args>
 | 
			
		||||
            </properties>
 | 
			
		||||
        </profile>
 | 
			
		||||
    </profiles>
 | 
			
		||||
</project>
 | 
			
		||||
@@ -0,0 +1,55 @@
 | 
			
		||||
####
 | 
			
		||||
# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
 | 
			
		||||
#
 | 
			
		||||
# Before building the docker image run:
 | 
			
		||||
#
 | 
			
		||||
# mvn package
 | 
			
		||||
#
 | 
			
		||||
# Then, build the image with:
 | 
			
		||||
#
 | 
			
		||||
# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/sentinel-demo-quarkus-jvm .
 | 
			
		||||
#
 | 
			
		||||
# Then run the container using:
 | 
			
		||||
#
 | 
			
		||||
# docker run -i --rm -p 8080:8182 quarkus/sentinel-demo-quarkus-jvm
 | 
			
		||||
#
 | 
			
		||||
# If you want to include the debug port into your docker image
 | 
			
		||||
# you will have to expose the debug port (default 5005) like this :  EXPOSE 8080 5050
 | 
			
		||||
#
 | 
			
		||||
# Then run the container using :
 | 
			
		||||
#
 | 
			
		||||
# docker run -i --rm -p 8080:8182 -p 5005:5005 -e JAVA_ENABLE_DEBUG="true" quarkus/sentinel-demo-quarkus-jvm
 | 
			
		||||
#
 | 
			
		||||
###
 | 
			
		||||
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.1
 | 
			
		||||
 | 
			
		||||
ARG JAVA_PACKAGE=java-1.8.0-openjdk-headless
 | 
			
		||||
#ARG JAVA_PACKAGE=java-11-openjdk-headless
 | 
			
		||||
ARG RUN_JAVA_VERSION=1.3.5
 | 
			
		||||
 | 
			
		||||
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
 | 
			
		||||
 | 
			
		||||
# Install java and the run-java script
 | 
			
		||||
# Also set up permissions for user `1001`
 | 
			
		||||
RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \
 | 
			
		||||
    && microdnf update \
 | 
			
		||||
    && microdnf clean all \
 | 
			
		||||
    && mkdir /deployments \
 | 
			
		||||
    && chown 1001 /deployments \
 | 
			
		||||
    && chmod "g+rwX" /deployments \
 | 
			
		||||
    && chown 1001:root /deployments \
 | 
			
		||||
    && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
 | 
			
		||||
    && chown 1001 /deployments/run-java.sh \
 | 
			
		||||
    && chmod 540 /deployments/run-java.sh \
 | 
			
		||||
    && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security
 | 
			
		||||
 | 
			
		||||
# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
 | 
			
		||||
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
 | 
			
		||||
 | 
			
		||||
COPY target/lib/* /deployments/lib/
 | 
			
		||||
COPY target/*-runner.jar /deployments/app.jar
 | 
			
		||||
 | 
			
		||||
EXPOSE 8182
 | 
			
		||||
USER 1001
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT [ "/deployments/run-java.sh" ]
 | 
			
		||||
@@ -0,0 +1,30 @@
 | 
			
		||||
####
 | 
			
		||||
# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode
 | 
			
		||||
#
 | 
			
		||||
# Before building the docker image run:
 | 
			
		||||
#
 | 
			
		||||
# mvn package -Pnative -Dquarkus.native.container-build=true
 | 
			
		||||
#
 | 
			
		||||
# Then, build the image with:
 | 
			
		||||
#
 | 
			
		||||
# docker build -f src/main/docker/Dockerfile.native -t quarkus/sentinel-demo-quarkus .
 | 
			
		||||
#
 | 
			
		||||
# Then run the container using:
 | 
			
		||||
#
 | 
			
		||||
# docker run -i --rm -p 8080:8182 quarkus/sentinel-demo-quarkus
 | 
			
		||||
#
 | 
			
		||||
###
 | 
			
		||||
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.1
 | 
			
		||||
WORKDIR /work/
 | 
			
		||||
COPY target/*-runner /work/application
 | 
			
		||||
 | 
			
		||||
# set up permissions for user `1001`
 | 
			
		||||
RUN chmod 775 /work /work/application \
 | 
			
		||||
  && chown -R 1001 /work \
 | 
			
		||||
  && chmod -R "g+rwX" /work \
 | 
			
		||||
  && chown -R 1001:root /work
 | 
			
		||||
 | 
			
		||||
EXPOSE 8182
 | 
			
		||||
USER 1001
 | 
			
		||||
 | 
			
		||||
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
 | 
			
		||||
@@ -0,0 +1,67 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package com.alibaba.csp.sentinel.demo.quarkus;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
 | 
			
		||||
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
 | 
			
		||||
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
 | 
			
		||||
import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStrategy;
 | 
			
		||||
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
 | 
			
		||||
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
 | 
			
		||||
 | 
			
		||||
import io.quarkus.runtime.StartupEvent;
 | 
			
		||||
import org.jboss.logging.Logger;
 | 
			
		||||
 | 
			
		||||
import javax.enterprise.context.ApplicationScoped;
 | 
			
		||||
import javax.enterprise.event.Observes;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author sea
 | 
			
		||||
 */
 | 
			
		||||
@ApplicationScoped
 | 
			
		||||
public class AppLifecycleBean {
 | 
			
		||||
 | 
			
		||||
    private static final Logger LOGGER = Logger.getLogger("ListenerBean");
 | 
			
		||||
 | 
			
		||||
    void onStart(@Observes StartupEvent ev) {
 | 
			
		||||
        LOGGER.info("The application is starting...");
 | 
			
		||||
 | 
			
		||||
        // Only for test here. Actually it's recommended to configure rules via data-source.
 | 
			
		||||
        FlowRule rule1 = new FlowRule()
 | 
			
		||||
            .setCount(1)
 | 
			
		||||
            .setGrade(RuleConstant.FLOW_GRADE_QPS)
 | 
			
		||||
            .setResource("GET:/hello/txt")
 | 
			
		||||
            .setLimitApp("default")
 | 
			
		||||
            .as(FlowRule.class);
 | 
			
		||||
        FlowRule rule2 = new FlowRule("greeting2")
 | 
			
		||||
            .setCount(1)
 | 
			
		||||
            .setGrade(RuleConstant.FLOW_GRADE_QPS)
 | 
			
		||||
            .as(FlowRule.class);
 | 
			
		||||
        FlowRuleManager.loadRules(Arrays.asList(rule1, rule2));
 | 
			
		||||
 | 
			
		||||
        DegradeRule degradeRule1 = new DegradeRule("greeting1")
 | 
			
		||||
            .setCount(1)
 | 
			
		||||
            .setGrade(CircuitBreakerStrategy.ERROR_COUNT.getType())
 | 
			
		||||
            .setTimeWindow(5)
 | 
			
		||||
            .setStatIntervalMs(10000)
 | 
			
		||||
            .setMinRequestAmount(1);
 | 
			
		||||
 | 
			
		||||
        DegradeRuleManager.loadRules(Arrays.asList(degradeRule1));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package com.alibaba.csp.sentinel.demo.quarkus;
 | 
			
		||||
 | 
			
		||||
import org.jboss.logging.Logger;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Priority;
 | 
			
		||||
import javax.ws.rs.core.Response;
 | 
			
		||||
import javax.ws.rs.ext.ExceptionMapper;
 | 
			
		||||
import javax.ws.rs.ext.Provider;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author sea
 | 
			
		||||
 */
 | 
			
		||||
//@Provider
 | 
			
		||||
//@Priority(-javax.ws.rs.Priorities.USER)
 | 
			
		||||
public class CustomExceptionMapper implements ExceptionMapper<Throwable> {
 | 
			
		||||
 | 
			
		||||
    static final Logger log = Logger.getLogger(CustomExceptionMapper.class);
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Response toResponse(Throwable exception) {
 | 
			
		||||
        log.error(exception.getMessage(), exception);
 | 
			
		||||
        return Response.serverError().entity(exception.getMessage()).build();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,34 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package com.alibaba.csp.sentinel.demo.quarkus;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.csp.sentinel.slots.block.BlockException;
 | 
			
		||||
import io.quarkus.runtime.annotations.RegisterForReflection;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author sea
 | 
			
		||||
 */
 | 
			
		||||
@RegisterForReflection
 | 
			
		||||
public class GreetingFallback {
 | 
			
		||||
 | 
			
		||||
    public static String globalBlockHandler(String name, BlockException ex) {
 | 
			
		||||
        return "globalBlockHandler, ex:" + ex.getMessage();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String globalDefaultFallback(String name, Throwable t) {
 | 
			
		||||
        return "globalDefaultFallback, ex:" + t.getMessage();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,95 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package com.alibaba.csp.sentinel.demo.quarkus;
 | 
			
		||||
 | 
			
		||||
import javax.inject.Inject;
 | 
			
		||||
import javax.ws.rs.*;
 | 
			
		||||
import javax.ws.rs.container.AsyncResponse;
 | 
			
		||||
import javax.ws.rs.container.Suspended;
 | 
			
		||||
import javax.ws.rs.core.MediaType;
 | 
			
		||||
import javax.ws.rs.core.Response;
 | 
			
		||||
import java.util.concurrent.*;
 | 
			
		||||
 | 
			
		||||
@Path("/hello")
 | 
			
		||||
public class GreetingResource {
 | 
			
		||||
 | 
			
		||||
    @Inject
 | 
			
		||||
    GreetingService greetingService;
 | 
			
		||||
 | 
			
		||||
    ExecutorService executor = new ThreadPoolExecutor(5, 5,
 | 
			
		||||
            0L, TimeUnit.MILLISECONDS,
 | 
			
		||||
            new LinkedBlockingQueue<Runnable>());
 | 
			
		||||
 | 
			
		||||
    @GET
 | 
			
		||||
    @Path("/txt")
 | 
			
		||||
    @Produces(MediaType.TEXT_PLAIN)
 | 
			
		||||
    public String hello() throws InterruptedException {
 | 
			
		||||
        TimeUnit.MILLISECONDS.sleep(500);
 | 
			
		||||
        return "hello";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GET
 | 
			
		||||
    @Path("/fallback/{name}")
 | 
			
		||||
    @Produces(MediaType.TEXT_PLAIN)
 | 
			
		||||
    public String fallback(@PathParam(value = "name") String name) {
 | 
			
		||||
        return greetingService.greeting(name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GET
 | 
			
		||||
    @Path("/fallback2/{name}")
 | 
			
		||||
    @Produces(MediaType.TEXT_PLAIN)
 | 
			
		||||
    public String fallback2(@PathParam(value = "name") String name) {
 | 
			
		||||
        return greetingService.greetingWithFallbackName(name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Path("/async")
 | 
			
		||||
    @GET
 | 
			
		||||
    @Produces({ MediaType.APPLICATION_JSON })
 | 
			
		||||
    public void asyncHello(@Suspended final AsyncResponse asyncResponse) {
 | 
			
		||||
        executor.submit(() -> {
 | 
			
		||||
            try {
 | 
			
		||||
                TimeUnit.MILLISECONDS.sleep(100);
 | 
			
		||||
            } catch (InterruptedException e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
            }
 | 
			
		||||
            asyncResponse.resume("Hello!");
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Path("/ex")
 | 
			
		||||
    @GET
 | 
			
		||||
    @Produces({ MediaType.APPLICATION_JSON })
 | 
			
		||||
    public String exception() {
 | 
			
		||||
        throw new RuntimeException("test exception mapper");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Path("/400")
 | 
			
		||||
    @GET
 | 
			
		||||
    @Produces({ MediaType.APPLICATION_JSON })
 | 
			
		||||
    public String badRequest() {
 | 
			
		||||
        throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST)
 | 
			
		||||
                .entity("test return 400")
 | 
			
		||||
                .build());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Path("/delay/{seconds}")
 | 
			
		||||
    @GET
 | 
			
		||||
    @Produces({ MediaType.APPLICATION_JSON })
 | 
			
		||||
    public String delay(@PathParam(value = "seconds") long seconds) throws InterruptedException {
 | 
			
		||||
        TimeUnit.SECONDS.sleep(seconds);
 | 
			
		||||
        return "finish";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package com.alibaba.csp.sentinel.demo.quarkus;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.csp.sentinel.annotation.cdi.interceptor.SentinelResourceBinding;
 | 
			
		||||
import io.quarkus.runtime.annotations.RegisterForReflection;
 | 
			
		||||
 | 
			
		||||
import javax.enterprise.context.ApplicationScoped;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author sea
 | 
			
		||||
 */
 | 
			
		||||
@ApplicationScoped
 | 
			
		||||
@RegisterForReflection
 | 
			
		||||
public class GreetingService {
 | 
			
		||||
 | 
			
		||||
    @SentinelResourceBinding(value = "greeting1", fallback = "globalDefaultFallback", fallbackClass = GreetingFallback.class, blockHandler = "globalBlockHandler", blockHandlerClass = GreetingFallback.class)
 | 
			
		||||
    public String greeting(String name) {
 | 
			
		||||
        if ("degrade".equals(name)) {
 | 
			
		||||
            throw new RuntimeException("test sentinel fallback");
 | 
			
		||||
        }
 | 
			
		||||
        return "hello " + name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SentinelResourceBinding(value = "greeting2", fallback = "greetingFallback")
 | 
			
		||||
    public String greetingWithFallbackName(String name) {
 | 
			
		||||
        if ("degrade".equals(name)) {
 | 
			
		||||
            throw new RuntimeException("test sentinel fallback");
 | 
			
		||||
        }
 | 
			
		||||
        return "hello " + name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String greetingFallback(String name, Throwable t) {
 | 
			
		||||
        return "greetingFallback: " + t.getClass().getSimpleName();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,152 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>sentinel-quarkus-demo - 1.0-SNAPSHOT</title>
 | 
			
		||||
    <style>
 | 
			
		||||
        h1, h2, h3, h4, h5, h6 {
 | 
			
		||||
            margin-bottom: 0.5rem;
 | 
			
		||||
            font-weight: 400;
 | 
			
		||||
            line-height: 1.5;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h1 {
 | 
			
		||||
            font-size: 2.5rem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h2 {
 | 
			
		||||
            font-size: 2rem
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h3 {
 | 
			
		||||
            font-size: 1.75rem
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h4 {
 | 
			
		||||
            font-size: 1.5rem
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h5 {
 | 
			
		||||
            font-size: 1.25rem
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        h6 {
 | 
			
		||||
            font-size: 1rem
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .lead {
 | 
			
		||||
            font-weight: 300;
 | 
			
		||||
            font-size: 2rem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .banner {
 | 
			
		||||
            font-size: 2.7rem;
 | 
			
		||||
            margin: 0;
 | 
			
		||||
            padding: 2rem 1rem;
 | 
			
		||||
            background-color: #00A1E2;
 | 
			
		||||
            color: white;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        body {
 | 
			
		||||
            margin: 0;
 | 
			
		||||
            font-family: -apple-system, system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        code {
 | 
			
		||||
            font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
 | 
			
		||||
            font-size: 87.5%;
 | 
			
		||||
            color: #e83e8c;
 | 
			
		||||
            word-break: break-word;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .left-column {
 | 
			
		||||
            padding: .75rem;
 | 
			
		||||
            max-width: 75%;
 | 
			
		||||
            min-width: 55%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .right-column {
 | 
			
		||||
            padding: .75rem;
 | 
			
		||||
            max-width: 25%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .container {
 | 
			
		||||
            display: flex;
 | 
			
		||||
            width: 100%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        li {
 | 
			
		||||
            margin: 0.75rem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .right-section {
 | 
			
		||||
            margin-left: 1rem;
 | 
			
		||||
            padding-left: 0.5rem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .right-section h3 {
 | 
			
		||||
            padding-top: 0;
 | 
			
		||||
            font-weight: 200;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .right-section ul {
 | 
			
		||||
            border-left: 0.3rem solid #00A1E2;
 | 
			
		||||
            list-style-type: none;
 | 
			
		||||
            padding-left: 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="banner lead">
 | 
			
		||||
    Your new Cloud-Native application is ready!
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="container">
 | 
			
		||||
    <div class="left-column">
 | 
			
		||||
        <p class="lead"> Congratulations, you have created a new Quarkus application.</p>
 | 
			
		||||
 | 
			
		||||
        <h2>Why do you see this?</h2>
 | 
			
		||||
 | 
			
		||||
        <p>This page is served by Quarkus. The source is in
 | 
			
		||||
            <code>src/main/resources/META-INF/resources/index.html</code>.</p>
 | 
			
		||||
 | 
			
		||||
        <h2>What can I do from here?</h2>
 | 
			
		||||
 | 
			
		||||
        <p>If not already done, run the application in <em>dev mode</em> using: <code>mvn compile quarkus:dev</code>.
 | 
			
		||||
        </p>
 | 
			
		||||
        <ul>
 | 
			
		||||
            <li>Add REST resources, Servlets, functions and other services in <code>src/main/java</code>.</li>
 | 
			
		||||
            <li>Your static assets are located in <code>src/main/resources/META-INF/resources</code>.</li>
 | 
			
		||||
            <li>Configure your application in <code>src/main/resources/application.properties</code>.
 | 
			
		||||
            </li>
 | 
			
		||||
        </ul>
 | 
			
		||||
 | 
			
		||||
        <h2>How do I get rid of this page?</h2>
 | 
			
		||||
        <p>Just delete the <code>src/main/resources/META-INF/resources/index.html</code> file.</p>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="right-column">
 | 
			
		||||
        <div class="right-section">
 | 
			
		||||
            <h3>Application</h3>
 | 
			
		||||
            <ul>
 | 
			
		||||
                <li>GroupId: com.alibaba.csp</li>
 | 
			
		||||
                <li>ArtifactId: sentinel-quarkus-demo</li>
 | 
			
		||||
                <li>Version: 1.0-SNAPSHOT</li>
 | 
			
		||||
                <li>Quarkus Version: 1.4.1.Final</li>
 | 
			
		||||
            </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="right-section">
 | 
			
		||||
            <h3>Next steps</h3>
 | 
			
		||||
            <ul>
 | 
			
		||||
                <li><a href="https://quarkus.io/guides/maven-tooling.html" target="_blank">Setup your IDE</a></li>
 | 
			
		||||
                <li><a href="https://quarkus.io/guides/getting-started.html" target="_blank">Getting started</a></li>
 | 
			
		||||
                <li><a href="https://quarkus.io" target="_blank">Quarkus Web Site</a></li>
 | 
			
		||||
            </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@@ -0,0 +1,3 @@
 | 
			
		||||
# Configuration file
 | 
			
		||||
# key = value
 | 
			
		||||
quarkus.http.port=8182
 | 
			
		||||
@@ -0,0 +1,94 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package com.alibaba.csp.sentinel.demo.quarkus;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot;
 | 
			
		||||
 | 
			
		||||
import io.quarkus.test.junit.QuarkusTest;
 | 
			
		||||
import org.junit.jupiter.api.AfterEach;
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
 | 
			
		||||
import static io.restassured.RestAssured.given;
 | 
			
		||||
import static org.hamcrest.CoreMatchers.is;
 | 
			
		||||
 | 
			
		||||
@QuarkusTest
 | 
			
		||||
public class GreetingResourceTest {
 | 
			
		||||
 | 
			
		||||
    @AfterEach
 | 
			
		||||
    public void cleanUp() {
 | 
			
		||||
        ClusterBuilderSlot.resetClusterNodes();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testSentinelJaxRsQuarkusAdapter() {
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/txt")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("hello"));
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/txt")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(javax.ws.rs.core.Response.Status.TOO_MANY_REQUESTS.getStatusCode())
 | 
			
		||||
            .body(is("Blocked by Sentinel (flow limiting)"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testSentinelAnnotationQuarkusAdapter() {
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/fallback/a")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("hello a"));
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/fallback/b")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("hello b"));
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/fallback/degrade")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("globalDefaultFallback, ex:test sentinel fallback"));
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/fallback/degrade")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("globalDefaultFallback, ex:test sentinel fallback"));
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/fallback/degrade")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("globalBlockHandler, ex:null"));
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/fallback/a")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("globalBlockHandler, ex:null"));
 | 
			
		||||
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/fallback2/a")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("hello a"));
 | 
			
		||||
        given()
 | 
			
		||||
            .when().get("/hello/fallback2/b")
 | 
			
		||||
            .then()
 | 
			
		||||
            .statusCode(200)
 | 
			
		||||
            .body(is("greetingFallback: FlowException"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,24 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 1999-2020 Alibaba Group Holding Ltd.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package com.alibaba.csp.sentinel.demo.quarkus;
 | 
			
		||||
 | 
			
		||||
import io.quarkus.test.junit.NativeImageTest;
 | 
			
		||||
 | 
			
		||||
@NativeImageTest
 | 
			
		||||
public class NativeGreetingResourceIT extends GreetingResourceTest {
 | 
			
		||||
 | 
			
		||||
    // Execute the same tests but in native mode.
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user