Create Spring Bean On-Demand using Bean Lookup

Bean Configuration – create prototype method on demand using look-up method

@Configuration
@Lazy(value=true)
public class SalesforceAuthenticationConfigImpl implements SalesforceAuthenticationConfig {

    @Bean(name="loginToProductionSalesforce")
    @Scope(value="prototype")
	public PartnerConnection loginToProductionSalesforce() throws ConnectionException, InterruptedException {
		int retryCounter=1;
		productionPartnerConnection();
		Date now = new Date();		
		while (partnerConnection==null && retryCounter <= RETRYAMOUNT || TimeUnit.MILLISECONDS.toMinutes(now.getTime() - partnerConnection.getServerTimestamp().getTimestamp().getTimeInMillis()) > MINUTESTILLTIMEOUT){
			logger.info("loginToProductionSalesforce retry attempt: " + retryCounter);
			productionPartnerConnection();
        	retryCounter++;
        	Thread.sleep(30*1000);
		}
		return partnerConnection;
	}


    @Bean
	public SalesforceAuthenticationFactory salesforceAuthenicationFactory(){
		return new SalesforceAuthenticationFactory() {
			@Override
			public PartnerConnection createPartnerConnection() throws ConnectionException, InterruptedException {
				return loginToProductionSalesforce();
			}
		};
	}

}

Configuration factory

@Bean
	public SalesforceAuthenticationFactory salesforceAuthenicationFactory(){
		return new SalesforceAuthenticationFactory() {
			@Override
			public PartnerConnection createPartnerConnection() throws ConnectionException, InterruptedException {
				return loginToProductionSalesforce();
			}
		};
	}

Test Class

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={SalesforceAuthenticationConfigImpl.class})
public class SalesforceAuthenticationServiceTest {

	@Autowired SalesforceAuthenticationFactory salesforceAuthenicationFactory;

     @Test
	public void testSalesforceAuthenitcationFactory(){
		try {
			PartnerConnection pConnection = salesforceAuthenicationFactory.createPartnerConnection();
			assertNotNull(pConnection.getConfig().getSessionId());
		} catch (ConnectionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Each time you call createPartnerConnection()() you will receive the reference to newly created instance of PartnerConnection class.

Creating your first stateless session bean using RAD 7.5 running on WAS 7

Creating my first stateless session bean using Rational Application Developer 7.5 and deployed to Websphere Application Server V7.0.0.7 that shows the current system time.
Step 1: Create a new Enterprise Application Project.
Step 2: Create a new EJB Project by right clicking on the newly created Enterprise Application Project.
Make sure that to add the Enterprise Application Project as a EAR member.
Step 3: Right click on your newly created EJB project and select -> Session Bean
Enter the package name as: com.ibm.ejb.time
Enter the class name as: time
Make sure that business interface is set to Local
Step 4: Open the newly created Session Bean called time and add the following method.
Make sure that to add the Enterprise Application Project as a EAR member.
public String getTimeInfo(String timeinput) {
Calendar cal = Calendar.getInstance();
Date now = cal.getTime();
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
if timeinput != null && timeinput.length() > 0) {
timeinput = timeinput.toUpperCase();
}
return DateFormat.getTimeInstance().format(now) + ” on ” + df.format(now);
Make sure to add all the neccessary Imports using Quick Fix.
Step 5: Right click anywhere in the editor and Navigate to Java EE Tool -> Promote Method
Select ‘getTimeInfo’ method and click ‘OK’
Step 6: Go back to your Enterprise Exlorer and right click on the Enterprise Application Project created in Step 1.
Select New -> Dynamic Web Project
Make sure that to add the Enterprise Application Project as a EAR member.
Step 7: Right click on your newly created Dynamic Web Project and select ‘Properties’
Step 8: Select ‘Java EE Module Dependencies’
Select ‘Allow Both’ under reference to EJB JARs with EJB client JARs.
Select both JARs and click ‘OK’
Step 9: Create a new Servlet by right clicking on the Dynamic Web Project and selecting New->Servlet.
Enter the package name as: com.ibm.ejb.time
Enter the class name as: timeServlet
Accept the superclass javax.servlet.http.HTTPServlet
Click Finish.
Step 10: Open the new timeServlet.java file.
Add the following two commands under TimeServlet class:
@EJB
TimeLocal time;
Using quick fix import the neccessary packages.
Add the following commands under doGet class:
PrintWriter out = response.getWriter();
String time = clock.getClockInfo(“medium”);
out.println(“<html><body>”);
out.println(“<h3>The current time is:</h3>”);
out.println(“<p>” + time + “</p>”);
out.println(“</body></html>”);
Using quick fix import the neccessary packages.
Add the following commands under doPost class:
String format = request.getParameter(“timeinput”);
request.setAttribute(“time”, clock.getTimeInfo(timeinput));
RequestDispatcher rd = getServletContext().
getRequestDispatcher(“/index.jsp”);
rd.forward(request, response);
return;
Step 11: Import the index.jsp file into your Dynamic Web Project.
Step 12: Start an instance of Websphere Application Server inside RAD 7.5
After the instance has started right click on the Server and click on ‘Add and Remove Projects’
Step 13: Run the Dynamic Web Project by right clicking on it and selecting ‘Run As’->’Run on Server’Creating my first stateless session bean using Rational Application Developer 7.5 and deployed to Websphere Application Server V7.0.0.7 that shows the current system time.