Настройка Http-прокси для Wildfly 8.1.0

Как настроить HTTP-прокси для Wildfly 8.1? Экземпляр Wildfly работает автономно на RHEL 6.5. Машина не имеет прямого доступа к Интернету, но одно из развернутых приложений должно использовать существующий прокси-сервер HTTP (без аутентификации) для вызова службы покоя Google Cloud Messaging. Так что каким-то образом я должен сказать Wildfly или приложению на нем, чтобы сообщить, где находится прокси. Я запускаю/останавливаю экземпляр с помощью сценариев init.d по умолчанию с запуском/остановкой/перезапуском службы wildfly.

Я уже получил прокси, работающий для экземпляра Tomcat, используя JAVA_OPTS, поэтому я попробовал то же самое для wildfly:

Настройка прокси через JAVA_OPTS в standalone.sh

# Display our environment  
echo "========================================================================="  
echo ""  
echo "  JBoss Bootstrap Environment"  
echo ""  
echo "  JBOSS_HOME: $JBOSS_HOME"  
echo ""  
echo "  JAVA: $JAVA"  
echo ""  
echo "  JAVA_OPTS: $JAVA_OPTS"  
echo ""  
echo "========================================================================="  
echo ""  

JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=3128 -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=3128"  

while true; do  
   if [ "x$LAUNCH_JBOSS_IN_BACKGROUND" = "x" ]; then  
      # Execute the JVM in the foreground  
      eval \"$JAVA\" -D\"[Standalone]\" $JAVA_OPTS  \  
         \"-Dorg.jboss.boot.log.file=$JBOSS_LOG_DIR/server.log\" \  
         \"-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties\" \  
         -jar \"$JBOSS_HOME/jboss-modules.jar\" \  
         -mp \"${JBOSS_MODULEPATH}\" \  
         org.jboss.as.standalone \  
         -Djboss.home.dir=\"$JBOSS_HOME\" \  
         -Djboss.server.base.dir=\"$JBOSS_BASE_DIR\" \  
         "$SERVER_OPTS"  
      JBOSS_STATUS=$?  
   else  
      # Execute the JVM in the background  
      eval \"$JAVA\" -D\"[Standalone]\" $JAVA_OPTS \  
         \"-Dorg.jboss.boot.log.file=$JBOSS_LOG_DIR/server.log\" \  
         \"-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties\" \  
         -jar \"$JBOSS_HOME/jboss-modules.jar\" \  
         -mp \"${JBOSS_MODULEPATH}\" \  
         org.jboss.as.standalone \  
         -Djboss.home.dir=\"$JBOSS_HOME\" \  
         -Djboss.server.base.dir=\"$JBOSS_BASE_DIR\" \  
         "$SERVER_OPTS" "&"  
      JBOSS_PID=$!

Сервер загружается без ошибок, и запуск ps aux дает мне экземпляр wildfly с правильной настройкой JAVA_OPTS. ps aux output

Прокси настроен правильно и работает, т.е. с завитком: пример завитка

Однако в приложении, которое развернуто на лету и пытается вызвать веб-службу GCM, я все равно получаю исключение ConnectionException:

java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.7.0_65]

person NorRen    schedule 26.11.2014    source источник


Ответы (2)


Проблема может быть решена путем не глобальной установки прокси-сервера для сервера приложений, а в исходном коде, который выполняет запросы REST к GCM:

//this is your request-body, as byte-array
byte[] body; 
URL url = new URL("https://android.googleapis.com/gcm/send");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy-host.com", 3128));
URLConnection con = url.openConnection(proxy);
HttpURLConnection con1 = (HttpURLConnection) con;

con1.setRequestMethod("POST");
con1.setRequestProperty("Content-type", "application/json");
con1.setDoOutput(true);
con1.setUseCaches(false);
con1.setFixedLengthStreamingMode(body.length);

OutputStream out = con1.getOutputStream();
try {
   out.write(body);
} finally {
   out.close();
}
person NorRen    schedule 12.01.2015

У вас есть механизм повтора? Если нет, вы можете просмотреть документацию об объяснениях ошибок. Вы можете попробовать шаги тайм-аута. Посмотрите, работает ли это. Это может быть проблема с использованием прокси без аутентификации.

person Kay_N    schedule 08.01.2015