2015-01-21 107 views
0

我試圖通過使用Manager-Script servlet上載WAR來自動化在tomcat中部署我的WAR 8.0.12Tomcat管理器腳本部署大型戰爭不起作用

執行PUT這個網址:

http://tomcaserver:8080/manager/text/deploy?path=/myApp&update=true 

我的抗戰大小約爲80MB,我認爲這就是問題所在。

我使用一個小的WAR(約500kb)進行測試,並且沒有問題地上傳。

我已經嘗試指定/webapps/manager/WEB-INF/web.xml內多 - 配置,將這樣的:

<servlet> 
    <servlet-name>Manager</servlet-name> 
    <servlet-class>org.apache.catalina.manager.ManagerServlet</servlet-class> 
    <init-param> 
    <param-name>debug</param-name> 
    <param-value>2</param-value> 
    </init-param> 
    <multipart-config> 
    <!-- 200MB max --> 
    <max-file-size>209715200</max-file-size> 
    <max-request-size>209715200</max-request-size> 
    <file-size-threshold>0</file-size-threshold> 
    </multipart-config> 
</servlet> 

在此之後,問題仍然存在。

我使用Apache了HTTPClient上傳,這是例外:

Exception in thread "main" java.net.SocketException: Connection reset by peer: socket write error 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113) 
    at java.net.SocketOutputStream.write(SocketOutputStream.java:159) 
    at org.apache.http.impl.io.SessionOutputBufferImpl.streamWrite(SessionOutputBufferImpl.java:123) 
    at org.apache.http.impl.io.SessionOutputBufferImpl.flushBuffer(SessionOutputBufferImpl.java:135) 
    at org.apache.http.impl.io.SessionOutputBufferImpl.write(SessionOutputBufferImpl.java:164) 
    at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:115) 
    at org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:120) 
    at org.apache.http.entity.mime.AbstractMultipartForm.doWriteTo(AbstractMultipartForm.java:150) 
    at org.apache.http.entity.mime.AbstractMultipartForm.writeTo(AbstractMultipartForm.java:173) 
    at org.apache.http.entity.mime.MultipartFormEntity.writeTo(MultipartFormEntity.java:97) 
    at org.apache.http.impl.DefaultBHttpClientConnection.sendRequestEntity(DefaultBHttpClientConnection.java:155) 
    at org.apache.http.impl.conn.CPoolProxy.sendRequestEntity(CPoolProxy.java:149) 
    at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:236) 
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:254) 
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) 
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) 
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) 
    at br.com.jjw.atualizador.core.Atualizador.deploy(Atualizador.java:175) 

這是我的代碼:

String url = "http://tomcatserver:8080/manager/text/deploy?path=/organize&update=true"; 

    HttpPut req = new HttpPut(url); 
    MultipartEntityBuilder meb = MultipartEntityBuilder.create(); 
    // upload the big war (80mb) 
    meb.addBinaryBody("attachment", war, ContentType.APPLICATION_OCTET_STREAM, "myApp.war"); 
    req.setEntity(meb.build()); 

    CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
    credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("tomcat", "s3cret")); 

    CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); 
    CloseableHttpResponse resp = client.execute(req); <<<---- EXCEPTION! 

我該如何解決這個問題?

+0

,如果你使用一些簡單的像'curl'或'wget'代替手卷客戶端會發生什麼? – 2015-01-21 20:38:18

+0

@ChristopherSchultz我測試了捲曲,它工作**!你能幫我用我的代碼找到問題嗎? – 2015-01-22 10:15:41

回答

0

問題是你構建文件上傳的奇怪方式。我不知道「附件」會做什麼,但HTTP PUT是正確的。

試試這個:

String url = "http://tomcatserver:8080/manager/text/deploy?path=/organize&update=true"; 

HttpPut req = new HttpPut(url); 
File war = new File("myApp.war"); 
req.setEntity(new FileEntity(war, ContentType.APPLICATION_OCTET_STREAM)); 

CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("tomcat", "s3cret")); 

CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); 
CloseableHttpResponse resp = client.execute(req);