Monday, January 16, 2012

How to deploy DVM using JAVA Code:



Generally we migrate DVM’s from one env. to other env. using ESB console. But when there is a lot of DVM’s it becomes difficult and time taking process to migrate using ESB console.
We can use Java code to migrate all the DVM’s to a server at a time.

Set JAVA HOME and CLASSPATH
export CLASSPATH=$ORACLE_HOME/integration/esb/lib/commons-logging.jar:
$ORACLE_HOME/integration/esb/lib/commons-codec-1.3.jar:
$ AIAHOME/Infrastructure/install/lib/commons-httpclient-3.1.jar
 
export JAVA_HOME=$ORACLE_HOME/jdk
or we can keep these jar files in a folder and set CLASSPATH according to that.
commons-httpclient-3.1.jar- this jar file comes with AIA installation, if only SOA is installed we need to download this jar.

2.)Place all the DVM files to be migrated inside home/Migration/DVM/

3.)Create ImportDVM.properties file inside /home/ Migration  which contains the connection details of the server.
hostname=<host name of the server>
port=<port no of the server>
username=oc4jadmin
password=welcome1
dvm=home/Migration/DVM/DVM1.xml, home/Migration/DVM/DVM2.xml, home/Migration/DVM/DVM3.xml, home/Migration/DVM/DVM4.xml

4.)create ImportDVM.java file inside /home/ Migration
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;

public class ImportDVM {
public static void main(String[] args) {
Properties props = new Properties();
try {
InputStream in = Class.forName("ImportDVM").getResourceAsStream("ImportDVM.properties"); // Properties file to define your dynamic parameters
props.load(in);
String esbHost = props.getProperty("hostname");
int esbPort = Integer.parseInt(props.getProperty("port"));
String username = props.getProperty("username");
String password = props.getProperty("password");
String fileLocation = props.getProperty("dvm"); //dvm file location
StringTokenizer st = new StringTokenizer(fileLocation, ",");
while (st.hasMoreTokens()) {
String dvm = st.nextToken();
importDVM(esbHost, esbPort, username, password, dvm);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void importDVM(String esbHost, int esbPort, String username, String password, String fileLocation) {
try {
InputStream is = null;
HttpClient client = new HttpClient();
int responseCode = 0;
client.getHttpConnectionManager().getParams().setConnectionTimeout(90000);

// Authenticate
String authUrl = "http://"+esbHost+":"+esbPort+"/esb/j_security_check?j_username="+username+"&j_password="+password;
GetMethod auth = new GetMethod(authUrl);
responseCode = client.executeMethod(auth);

// ImportDVM
File targetFile = new File(fileLocation);
PostMethod post = new PostMethod("http://"+esbHost+":"+esbPort+"/esb/esbConfiguration/executeCommand?action=ImportDVM");
post.setRequestHeader("User-Agent", "ESB Client/1.0");
//StringPart s1 = new StringPart("importType","map");
//StringPart s2 = new StringPart("importMode","overwrite");
//FilePart f1 = new FilePart(targetFile.getName(), targetFile);
Part[] parts = {new StringPart("importType","map"), new StringPart("importMode","overwrite"), new FilePart(targetFile.getName(), targetFile)};
System.out.println(Part.getLengthOfParts(parts));
post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));
responseCode = client.executeMethod(post);
System.out.println("Response code: " + responseCode);
is = post.getResponseBodyAsStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c;
while ((c = is.read()) != -1) {
baos.write((char)c);
}
byte[] responseBody = baos.toByteArray();
post.releaseConnection();
String response = new String(responseBody);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}
}

compile the java file as:
javac ImportDVM.java


run ImportDVM.java
java ImportDVM

Deploying BPEL using ANT Script


In this blog we will assume that we have already changed the url's of the BPEL process to the corresponding url of the server to which we are going to migrate.
Set devprompt.sh
cd <SOA_HOME>/bpel/bin/
sh devprompt.sh

Set env. variables
. setsoaenv.sh
export OC4J_USERNAME=<username>
export OC4J_PASSWORD=<password>

go to the  process which needs to be migrated
cd /home/stage/Migration/
cd bpelProcess/

run Ant script:
ant -f build.xml -Dadmin.password=<password>