Ubik Batch Server Developing a Mapper

From UbikWiki

Contents

What is a Mapper

A mapper enables mapping a row returned from a data source to a Java Bean.

The mapped JavaBean will be return in the List parameter of method executeOnBlock(List list)

How to

Different base interfaces exist depending on data source:

  • JMS : com.ubikingenierie.console.apiconsole.mapping.IMessageMapper
  • SQL : com.ubikingenierie.console.apiconsole.mapping.IRowMapper
  • ...

Implementation steps:

  • Extend a Base class and implement abstract method:
    • This class must have an empty constructor
  • Set mapper implementation class on BatchStart implementation

Examples

Implementing mappers

JMS Mapper:

package com.ubikingenierie.console.demo.jms.mapping;
 
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;
 
import com.ubikingenierie.console.apiconsole.mapping.MappingException;
/**
 */
public class PersonMapper extends com.ubikingenierie.console.apiconsole.jms.JmsBaseMapper {
 
	/**
	 * @see com.ubikingenierie.console.apiconsole.jms.JmsBaseMapper#mapMessage(javax.jms.Message)
	 */
	protected Object mapMessage(Message message) throws MappingException {
		TextMessage textMessage = (TextMessage) message;
		Person person = new Person();
		try {
			person.setAge(new Integer(textMessage.getIntProperty("age")));
			person.setCut(new Double(textMessage.getDoubleProperty("cut")));
			person.setFirstName(textMessage.getStringProperty("firstName"));
			person.setLastName(textMessage.getStringProperty("lastName"));
			return person;
		} catch (JMSException e) {
			throw new MappingException(e);
		}
	}
 
}

SQL Mapper:

/**
 * 
 */
package com.ubikingenierie.console.demo.mapper;
// com.ubikingenierie.console.demo.mapper.TranslationMapper
import java.sql.ResultSet;
import java.sql.SQLException;
 
import com.ubikingenierie.console.apiconsole.mapping.IRowMapper;
import com.ubikingenierie.console.apiconsole.mapping.MappingException;
import com.ubikingenierie.console.demo.data.DoTranslation;
 
/**
 */
public class TranslationMapper implements IRowMapper {
 
	/**
	 * 
	 */
	public TranslationMapper() {
		super();
	}
 
	/* (non-Javadoc)
	 * @see com.ubikingenierie.console.apiconsole.mapping.IRowMapper#mapRow(java.sql.ResultSet, int)
	 */
	public Object mapRow(ResultSet resultSet, int rowNumber) throws MappingException {
		try {
			DoTranslation doTranslation= new DoTranslation();
			doTranslation.setTrsContextCode(resultSet.getString("trs_context_code"));
			doTranslation.setTrsLabelCode(resultSet.getString("trs_label_code"));
			doTranslation.setTrsLanguage(resultSet.getString("trs_language"));
			doTranslation.setTrsLabel(resultSet.getString("trs_label"));
			doTranslation.setTrsUpdate(resultSet.getTimestamp("trs_update"));
			return doTranslation;
		} catch (SQLException e) {
			throw new MappingException(e.getMessage(),e);
		}
	}
 
	/**
	 * @see java.lang.Object#clone()
	 */
	public Object clone() throws CloneNotSupportedException {
		return super.clone();
	}
}

Configuring mappers

JMS Batch

Excerpt from <Subclass of BaseJmsBatch>#createConfiguration()

JmsBatchStart batchStart = new JmsBatchStart();
batchStart.setMapperClassName(PersonMapper.class.getName());
batchStart.setConnectionFactoryName("java:comp/env/jms/localConnectionFactory");
batchStart.setDestinationName("java:comp/env/jms/localDemoQueue");
batchStart.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
batchStart.setSessionTransacted(false);

SQL Batch

Excerpt from <Subclass of BaseSqlWithMappingBatch>#createConfiguration()

MappedSqlBatchStart starter = new MappedSqlBatchStart(
     "jdbc/batchweb",// Pool name
     "select translation.trs_context_code, translation.trs_label_code, translation.trs_language, translation.trs_label,trs_update from translation" +
          " where trs_language = ? order by trs_language ", // SQL Query
     50, // Number of lines in block
     false, //Direct SQL, not Stored Procedure
     "com.ubikingenierie.console.demo.mapper.TranslationMapper" // Mapper implementation
);		
SqlParameter parameter = new SqlParameter(1, "EN", String.class);
starter.setParameters(new SqlParameter[] { parameter });
Personal tools