3 Replies Latest reply on Feb 22, 2013 5:01 AM by vijaykr

    How to start new process from workItemHandler in jBpm 5.4

    vijaykr

      I want to start new instance of a process from workItemHandler of a customize service task.

      To achive this I created Service task in Process 1 and call Process 2 from workItemHandler class of service using RestFul link

      "/gwt-console-server/rs/process/definition/{id}/new_instance".but when I start Process 1 I am getting Exception

       

      Request timeout

       

      Please any one can help me to do this intercommunication between two Processes using Restful link.

        • 1. Re: How to start new process from workItemHandler in jBpm 5.4
          vijaykr

          can any one answer my query..?

          • 2. Re: How to start new process from workItemHandler in jBpm 5.4
            snowstormuser

            Hi vijay saini,

            Use the following programme may be help you,

             

            import java.io.BufferedReader;

            import java.io.InputStream;

            import java.io.InputStreamReader;

            import java.nio.charset.Charset;

            import java.util.ArrayList;

            import java.util.HashMap;

            import java.util.List;

            import java.util.*;

             

             

            import org.apache.http.HttpResponse;

            import org.apache.http.NameValuePair;

            import org.apache.http.client.entity.UrlEncodedFormEntity;

            import org.apache.http.client.methods.HttpGet;

            import org.apache.http.client.methods.HttpPost;

            import org.apache.http.entity.mime.HttpMultipartMode;

            import org.apache.http.entity.mime.MultipartEntity;

            import org.apache.http.entity.mime.content.ContentBody;

            import org.apache.http.entity.mime.content.StringBody;

            import org.apache.http.impl.client.DefaultHttpClient;

            import org.apache.http.message.BasicNameValuePair;

             

             

            /*

            * To change this template, choose Tools | Templates

            * and open the template in the editor.

            */

             

             

            /**

            *

            * @author Shahid

            */

            public class StartProcessWV {

                 private static final String authentication_url = "http://localhost:8080/gwt-console-server/rs/identity/secure/j_security_check";

            //private static final String process_start_url = "http://localhost:8080/gwt-console-server/rs/process/definition/defaultPackage.ProcessWV/new_instance";

            private static final String process_start_url = "http://localhost:8080/gwt-console-server/rs/form/process/defaultPackage.ProcessWV/complete";

             

            private static final String render_form_url = "http://localhost:8080/gwt-console-server/rs/form/process/defaultPackage.ProcessWV/render";

                 public static String KEY_USERNAME = "j_username";

            public static String KEY_PASSWORD = "j_password";

            private DefaultHttpClient httpClient = new DefaultHttpClient(); // keep this out of the method in order to reuse the object for calling other services without losing session

            public String authenticate(String address, String username, String password) {

                    String responseString = "";

                  //  new NameValuePair("j_username", username)

                    List<NameValuePair> formparams = new ArrayList<NameValuePair>();

                    formparams.add(new BasicNameValuePair(KEY_USERNAME, username));

                    formparams.add(new BasicNameValuePair(KEY_PASSWORD, password));

             

            HttpPost httpPost = new HttpPost( address );

                   // HttpPost httpPost = new HttpPost("http://" + address + "/gwt-console-server/rs/process/j_security_check");

                    InputStreamReader inputStreamReader = null;

                    BufferedReader bufferedReader = null;

                    try {

                        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");

                        //UrlEncodedFormEntity entity=new UrlEncodedFormEntity(formparams, "multipart/form-data");

                        httpPost.setEntity(entity);

                        HttpResponse response = httpClient.execute(httpPost);

                        InputStream inputStream = response.getEntity().getContent();

                        inputStreamReader = new InputStreamReader(inputStream);

                        bufferedReader = new BufferedReader(inputStreamReader);

                        StringBuilder stringBuilder = new StringBuilder();

                        String line = bufferedReader.readLine();

                     //   System.out.println("line==>"+line);

                        while (line != null) {

                            stringBuilder.append(line);

                            line = bufferedReader.readLine();

                        }

                        responseString = stringBuilder.toString();

                    } catch (Exception e) {

                        //throw new RuntimeException(e);

                        System.out.println("e = " + e);

                    } finally {

                        if (inputStreamReader != null) {

                            try {

                                inputStreamReader.close();

                            } catch (Exception e) {

                                throw new RuntimeException(e);

                            }

                        }

                        if (bufferedReader != null) {

                            try {

                                bufferedReader.close();

                            } catch (Exception e) {

                                throw new RuntimeException(e);

                            }

                        }

                    }

                    return responseString;

                }

            public String requestPostService(String url, Map<String, Object> parameters, boolean multipart) {

                    String responseString = "";

             

                    MultipartEntity multiPartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

                    List<BasicNameValuePair> formparams = new ArrayList<BasicNameValuePair>();

                    if (parameters == null) {

                        parameters = new HashMap<String, Object>();

                    }

                    Set<String> keys = parameters.keySet();

                    for (Iterator<String> keysIterator = keys.iterator(); keysIterator.hasNext();) {

                        String keyString = keysIterator.next();

                        String value = parameters.get(keyString).toString();

                        formparams.add(new BasicNameValuePair(keyString, value));

                        if (multipart) {

                            try {

                                StringBody stringBody = new StringBody(value, Charset.forName("UTF-8"));

                                //System.out.println(stringBody.);

                                multiPartEntity.addPart(keyString, (ContentBody) stringBody);

                            } catch (Exception e) {

                                throw new RuntimeException(e);

                            }

                        }

                    }

                    HttpPost httpPost = new HttpPost(url);

             

                    InputStreamReader inputStreamReader = null;

                    BufferedReader bufferedReader = null;

                    try {

                        if (multipart) {

                            httpPost.setEntity(multiPartEntity);

                        } else {

                            UrlEncodedFormEntity entity =new UrlEncodedFormEntity(formparams, "UTF-8");// new UrlEncodedFormEntity(formparams, "multipart/form-data");

                            ////

                            httpPost.setEntity(entity);

                        }

                        HttpResponse response = httpClient.execute(httpPost);

                        InputStream inputStream = response.getEntity().getContent();

                        inputStreamReader = new InputStreamReader(inputStream);

                        bufferedReader = new BufferedReader(inputStreamReader);

                        StringBuilder stringBuilder = new StringBuilder();

                        String line = bufferedReader.readLine();

                        while (line != null) {

                            stringBuilder.append(line);

                            line = bufferedReader.readLine();

                        }

                        responseString = stringBuilder.toString();

                    } catch (Exception e) {

                        throw new RuntimeException(e);

                    } finally {

                        if (inputStreamReader != null) {

                            try {

                                inputStreamReader.close();

                            } catch (Exception e) {

                                throw new RuntimeException(e);

                            }

                        }

                        if (bufferedReader != null) {

                            try {

                                bufferedReader.close();

                            } catch (Exception e) {

                                throw new RuntimeException(e);

                            }

                        }

                    }

                    return responseString;

            }

            public String requestGetService(String url, Map<String, Object> parameters, boolean multipart) {

                    String responseString = "";

             

             

             

                    HttpGet httpGet = new HttpGet(url);

             

                    InputStreamReader inputStreamReader = null;

                    BufferedReader bufferedReader = null;

                    try {

             

                        HttpResponse response = httpClient.execute(httpGet);

                        InputStream inputStream = response.getEntity().getContent();

                        inputStreamReader = new InputStreamReader(inputStream);

                        bufferedReader = new BufferedReader(inputStreamReader);

                        StringBuilder stringBuilder = new StringBuilder();

                        String line = bufferedReader.readLine();

                       // System.out.println("line = " + line);

                        while (line != null) {

                            stringBuilder.append(line);

                            line = bufferedReader.readLine();

                        }

                        responseString = stringBuilder.toString();

                    } catch (Exception e) {

                        throw new RuntimeException(e);

                    } finally {

                        if (inputStreamReader != null) {

                            try {

                                inputStreamReader.close();

                            } catch (Exception e) {

                                throw new RuntimeException(e);

                            }

                        }

                        if (bufferedReader != null) {

                            try {

                                bufferedReader.close();

                            } catch (Exception e) {

                                throw new RuntimeException(e);

                            }

                        }

                    }

                    return responseString;

            }

            public static  void main(String args[])

            {

                StartProcessWV startProcessWV=new StartProcessWV();

                 Map map=new HashMap();

                map.put("name", "Shahid Iqbal");

              //  map.put("age", "29");

                System.out.println("Login Form==> "+startProcessWV.requestGetService(render_form_url, null, true));

             

               System.out.println(startProcessWV.authenticate(authentication_url, "admin", "admin")+"\n");

              System.out.println("Render Form==> "+startProcessWV.requestGetService(render_form_url, null, true)+"\n");

               System.out.println("Process start Output==> "+startProcessWV.requestPostService(process_start_url, map, true));

             

            }

            }

             

            change the process id in this code and use the following jars

            jars.png

            Your process should have the process form.

             

            I hope so it will helpfull for you.

            Sorry for my english

            • 3. Re: How to start new process from workItemHandler in jBpm 5.4
              vijaykr

              Hi snowstorm ,

               

              Thanks for your respose ,I already tried this code as i mentioned I am getting Exception as mention in my post above.this is happning when  both process on same machine.Now i try keeping each processes on seperate machine and It worked fine.But My question is why It is not working if both process on same machine.

               

              And one more query I have .After starting 2nd process I want my customized  respone(i.e 2nd processes data) back in 1st process.By default I am getting json object .How can I get 2nd Process data in response.

               

              Thanks n Regards

              Vijay