Saturday, May 19, 2012

Cascade type - EJB 3.0


Cascade type - EJB 3.0:

The cascade type specifies the set of operations that can be cascaded to a related entity. CascadeType can have different values: PERSIST, MERGE, REMOVE, REFRESH, and ALL.
PERSIST is similar to an insert command. Specifying a CascadeType of PERSIST implies that a persist operation will be cascaded from a parent entity to its child entity.

MERGE is similar to an update command. Specifying a CascadeType of MERGE implies that a merge operation will be cascaded from a parent entity to its child entity.

REMOVE is similar to a delete command. Specifying a CascadeType of REMOVE implies that a remove operation will be cascaded from a parent entity to its child entity.

REFRESH reloads the related entity from the database when the referring entity is refreshed.

If you do not specify a cascade type, no operations are cascaded.

Fetch Type - Lazy vs. Eager Loading in EJB 3.0

Fetch Type - Lazy vs. Eager Loading in EJB 3.0:

The fetch type is used to specify the data-fetching strategy that a persistence provider uses to fetch data from the database. FetchType is used on the @Basicannotation, @LOB annotation, and relationship annotations such as OneToMany, ManyToMany, ManyToOne, and OneToOne. The default for fetchTypeis EAGER, except for a ManyToMany and a OneToMany relationship, for which the default is LAZY. A fetchType of EAGER means that a persistence provider will load the attribute of an entity along with the entity, whereas a fetchType of LAZY is a hint to the provider that the attribute need not be fetched along with the entity, or we can say that In eager loading we will fetch all the values from the Persistent storage and cache it. It will make serious performance issues. There we use lazy loading to avoid that.

Keep in mind that a FetchType of EAGER is a requirement on the persistence provider, whereas a fetchType of LAZY is only a hint. So even though you may specify the fetchType to be LAZY, the persistence provider may choose to load the attribute eagerly.
A FetchType of lazy benefits Large Objects and Relationships in which the attributes are not accessed immediately when the entity is loaded.The attributes are loaded whenever required.

Example:

@Entity
public class Order {
@OneToMany(fetchType=FetchType.EAGER, ...)
public Collection<OrderLineItem> getLineItems(){
return lineItems;
}
}

@Entity
public class Order {
@OneToMany(fetchType=FetchType.LAZY, ...)
public Collection<OrderLineItem> getLineItems(){
return lineItems;
}
}

Advantages of EJB 3.0

Advantages of EJB 3.0:

The below are the some of the advantages of using EJB 3.0


  1. More work is done by container,less by developer
  2. Everything is a POJO(Plain old java object)
  3. Simplify programming model
  4. Hibernate like ORM(Object Relational Mapping)
  5. Dependency injection
  6. Annotations(Requires Java 5)
  7. Bean specifies what it needs through metadata
  8. No longer written to unneeded container interfaces
  9. Deployment descriptor no longer required

FTP Upload/Download with Java

The below java code will help us to Download/Upload files from/To FTP server.

import java.io.*;
import java.net.*;

public class FTPClient {
    public final String host;
    public final String user;
    protected final String password;
    protected URLConnection ftpurl;

    public FTPClient(String host, String user, String password) {
        this.host = host;
        this.user = user;
        this.password = password;
        this.ftpurl = null;
    }

    private URL createURL(String destfile) throws MalformedURLException {
        if (user == null)
            return new URL("ftp://" + host + "/" + destfile + ";type=i");
        else
            return new URL("ftp://" + user + ":" + password + "@" + host +"/" + destfile + ";type=i");
    }

    protected InputStream openDownloadStream(String destfile) throws Exception {
        URL url = createURL(destfile);
        ftpurl = url.openConnection();
        InputStream is = ftpurl.getInputStream();
        return is;
    }

    protected OutputStream openUploadStream(String targetfile) throws Exception {
        URL url = createURL(targetfile);
        ftpurl = url.openConnection();
        OutputStream os = ftpurl.getOutputStream();
        return os;
    }

    protected void close() {
        ftpurl = null;
    }

    public void Upload(String sourcefile, String destfile) {
        try {
            OutputStream os = openUploadStream(destfile);
            FileInputStream is = new FileInputStream(sourcefile);
            byte[] buf = new byte[33554432];
            int c;
            while (true) {
                c = is.read(buf);
                if (c <= 0)
                    break;
                os.write(buf, 0, c);
            }
            os.close();
            is.close();
            close();
        } catch (Exception e) {
            System.err.println(e.getMessage());
            e.printStackTrace();
        }
    }

    public void Download(String sourcefile, String destfile) {
        try {
            InputStream is = openDownloadStream(destfile);
            FileOutputStream os = new FileOutputStream(sourcefile);
            byte[] buf = new byte[41943040];//Buffer size set to 40 MB ,change based on the file size
            int c;
            while (true) {
                c = is.read(buf);
                if (c <= 0)
                    break;
                os.write(buf, 0, c);
            }
            is.close();
            os.close();
            close();
        } catch (Exception e) {
            System.err.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Thursday, May 17, 2012

Setting the Composite Instance Name (Title) in Oracle Mediator - Oracle SOA Suite

Setting the Composite Instance Name (Title) in Oracle Mediator - Oracle SOA Suite:

 The composite instance name (Title) will help us to track the composite instances at runtime, the below two approaches can be used to set the instance Name (Title) for the composite with the Mediator instances.

Oracle SOA Suite 11g:

Assign Activity:

1.       Click on the Assign Values in the Routing Rule section and create new Assign value


 
2.       Select the Type as expression in the From (Left) side and insert the Mediator Extension Function setCompositeInstanceTitle and pass the input based on which variable the title should be set.
 
 

Recovering the Oracle BPEL instances from the Recovery Queue – Oracle SOA Suite

 Recovering the Oracle BPEL instances from the Recovery Queue – Oracle SOA:

Sometimes the BPEL instances may go to the recovery queue, the instances in the recovery queue can be recovered manually to continue the processing.
Below are the some of the reasons the instances to go to manual recovery.
  1. There are not enough threads or memory to process the message.
  2. The server shuts down or crash before it finishes processing the BPEL message
  3. The engine could not finish processing the message before reaching the time-out as dictated by the transaction-timeout configuration

Recovering the BPEL instances:

Oracle SOA Suite 11g:

  1. Login  to EM console
  2. Right click on soa-infra  ,Click on Service Engine - BPEL
  3. Click on Recovery tab
  4. Change the Type accordingly(Invoke,Activity,Callback) and the Message state to “Undelivered”  and click on search
  5. All the recoverable messages that match the criteria will be displayed.
  6. Select the required messages and click on Recovery button.
 

Oracle SOA Suite 12c:

  1. Login  to EM console
  2. Click on Target Navigation
  3. Click on soa-infra
  4. Click on SOA Infrastructure - Service Engines - BPEL
  5. Click on Recovery tab
  6. Change the Type accordingly(Invoke,Activity,Callback) and the Message state to “Undelivered”  and click on search
  7. All the recoverable messages that match the criteria will be displayed.
  8. Select the required messages and click on Recovery button.
em_console_target_navigation


em_console_service_engines


em_console_recovery_messages


Tuesday, May 8, 2012

Proxy Configuration in Oracle SOA Suite 11g


Proxy Configuration in Oracle SOA Suite 11g:

If we are invoking any web services and it needs to be passed through Proxy then the proxy server details should be configured on soa11g server. In SOA11g we have two ways of configuring the proxy. The first way is to configure the Server Level and the second level is Composite level.
Configuration can be done using Enterprise manager/JDeveloper

Server Level from EM console:

 Login to the em console
Navigate to SOA Infrastructure->SOA Administration->Common Properties -> More SOA Infra Advanced Configuration Properties...
Enter the HttpProxyHost, HttpProxyPort, HttpProxyUsername and HttpProxyPassword
Click on Apply and then restart Server


 

Composite service Level from EM console:

If we want to configure the configure proxy only to a particular composite the can be configured in composite Level.
Navigate to the Process in EM and in the dashboard click on the Service (Adapter used to invoke the web service to which the proxy is required) under the Services and References section.
Click on the properties tab and you can find the different properties as shown below where you can fill the Proxyhost, ProxyPort.