# How It Works

This article explains how apisix-java-plugin-runner collaborate with [Apache APISIX](https://apisix.apache.org) to run plugins written in java.

## Run Mode

apisix-java-plugin-runner can be run alone or bundled with Apache APISIX.
It depends on whether you need to debug it or run it.

### Debug

If you are developing a new plugin and need to debug the code, then you can run the main class
[PluginRunnerApplication](https://github.com/apache/apisix-java-plugin-runner/blob/main/runner-starter/src/main/java/org/apache/apisix/plugin/runner/PluginRunnerApplication.java),
and before start, you need to set the following two environment variables:

- APISIX_LISTEN_ADDRESS: apisix-java-plugin-runner and APISIX for inter-process communication (Unix Domain Socket) socket type file address.
  And do not need to actively create this file, apisix-java-plugin-runner will automatically create this file when it starts.
- APISIX_CONF_EXPIRE_TIME: the time that APISIX's configuration is cached in the apisix-java-plugin-runner process.

For example, if you start apisix-java-plugin-runner as a jar package, pass the environment variables as below

```shell
java -jar -DAPISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock -DAPISIX_CONF_EXPIRE_TIME=3600 /path/to/apisix-java-plugin-runner.jar
```

Note: Refer to [apisix-java-plugin-runner.jar](#run) to get it.

and add the following configure in the `config.yaml` file of APISIX

```yaml
ext-plugin:
  path_for_test: /tmp/runner.sock
```

The `/tmp/runner.sock` is the address of the file where apisix-java-plugin-runner
and APISIX communicate between processes and must be consistent.

Note: If you see some error logs like

```
phase_func(): failed to connect to the unix socket unix:/tmp/runner.sock: permission denied
```

in the `error.log` of APISIX, you can change the permissions of this file for debug, execute commands like

```shell
chmod 777 /tmp/runner.sock
```

To get more detailed debugging information, you can modify the output level of the log.
Configure the log level in `runner-starter/src/main/resources/application.yaml`, as below
(any changes to the project files need to be re-executed `./mvnw package package`)

```yaml
logging:
  level:
    root: debug
```

### Run

No environment variables need to be set in Run mode, execute

```shell
cd /path/to/apisix-java-plugin-runner
 ./mvnw package
```

to built apisix-java-plugin-runner as a jar package, then you will see the `dist` directory, execute

```
cd dist
tar -zxvf apache-apisix-runner-bin.tar.gz
```

the layout of files in the `dist` directory is as below

```
dist
├── apache-apisix-runner-bin.tar.gz
└── apisix-runner-bin
    ├── apisix-java-plugin-runner.jar
    ├── bin
    │   ├── shutdown.sh
    │   └── startup.sh
    ├── LICENSE
    ├── NOTICE
    └── README.md

```

then add the following configure in the `config.yaml` file of APISIX

```yaml
ext-plugin:
  cmd: ['java', '-jar', '-Xmx4g', '-Xms4g', '/path/to/apisix-runner-bin/apisix-java-plugin-runner.jar']
```
