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

4 comments:

  1. Hi Vivek

    I executed your code in Jdeveloper and Eclipse.It works great !!

    I am facing issue while am executing through command prompt.

    I have included all the jar in class path.

    Following is the error am getting:


    Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.httpclient.methods.multipart.Part.getLengthOfParts([Lorg/apache/commons/httpclient/methods/multipart/Part;[B)J
    at org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity.getContentLength(MultipartRequestEntity.java:172)
    at org.apache.commons.httpclient.methods.EntityEnclosingMethod.getRequestContentLength(EntityEnclosingMethod.java:322)
    at org.apache.commons.httpclient.methods.EntityEnclosingMethod.addContentLengthRequestHeader(EntityEnclosingMethod.java:392)
    at org.apache.commons.httpclient.methods.EntityEnclosingMethod.addRequestHeaders(EntityEnclosingMethod.java:360)
    at org.apache.commons.httpclient.HttpMethodBase.writeRequestHeaders(HttpMethodBase.java:1977)
    at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:1865)
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:975)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:368)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:164)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:437)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
    at DVMInstall.main(DVMInstall.java:49)



    --- I have changed the code acording to the need.

    Kindly help me in sorting the issue

    Thank you

    Regards
    Naveen M

    ReplyDelete
    Replies
    1. Add ImportDVM to your classpath.
      ideally first compiling java program using javac and them running should work fine.

      Delete