- Future Annotation(@Future) is used to separate methods that are to be executed asynchronously.
- If Future Annotation is not used in a web service callout, the thread will wait until the response comes and other processes will not be executed.
- Mixed DML Exception can be avoided with the use of @future annotation.
- @future annotation – Must be static and return void – Specify (callout=true) to allow callouts.
- Parameters passed to this can only be primitive.
- Tracking future is difficult as you don’t have any jobId to track it.
- Future can be used to resolve mixed DML exception.
Batch Apex:
- Batch Apex is used to separate tasks that are going to handle more records(complex long running jobs) in background process.
- To avoid hitting governor limits we use Batch Apex for handling bulk records.
- It can process up to 50 million records. It can also be scheduled to run at a particular time.
- Only 5 concurrent batch can execute simultaneously. It is difficult to track the progress of the execution.
- We cannot use @future annotation. As asynchronous call is not allowed from batch apex.
Example: Delete all the account having Rating ‘Cold’
global class deleteAccounts implements Database.Batchable{
global Database.QueryLocator start(Database.BatchableContext BC){
string query = ‘select id,name,Rating,Owner from Account’;
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC,List scope){
List <Account> lstAccount = new list<Account>();
for(Sobject s : scope){
Account a = new Account();
if(s.Rating==’Cold’){
lstAccount.add(a);
}
}
Delete lstAccount;
}
global void finish(Database.BatchableContext BC){
//Send an email to the User after your batch completes
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[] {‘dummyemail@gmail.com’};
mail.setToAddresses(toAddresses);
mail.setSubject(‘Apex Batch Job is completed’);
mail.setPlainTextBody(‘The batch Apex job processed ‘);
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
}