package org.infosec.ismp.eventd.processor; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.infosec.ismp.model.event.Event; import org.infosec.ismp.model.event.Header; import org.springframework.beans.factory.InitializingBean; import org.springframework.dao.DataAccessException; /** * EventWriter loads the information in each 'Event' into the database. * TODO:将事件数据写入数据库 * */ public final class JdbcEventWriter extends AbstractJdbcPersister implements EventProcessor, InitializingBean { /** * The method that inserts the event into the database * * @param eventHeader * the event header * @param event * the actual event to be inserted */ @Override public void process(Header eventHeader, Event event) throws SQLException, DataAccessException { if (!checkEventSanityAndDoWeProcess(event, "JdbcEventWriter")) { return; } if (log().isDebugEnabled()) { log().debug( "JdbcEventWriter: processing " + event.getUei() + " uuid: " + event.getUuid() + " ipaddr: " + event.getIpAddr()); } Connection connection = getDataSource().getConnection(); try { connection.setAutoCommit(false); try { insertEvent(eventHeader, event, connection); connection.commit(); } catch (SQLException e) { log().warn( "JdbcEventWriter: Error inserting event into the datastore: " + e, e); try { connection.rollback(); } catch (Exception e2) { log().warn( "JdbcEventWriter: Rollback of transaction failed: " + e2, e2); } throw e; } catch (DataAccessException e) { log().warn( "JdbcEventWriter: Error inserting event into the datastore: " + e, e); try { connection.rollback(); } catch (Exception e2) { log().warn( "JdbcEventWriter: Rollback of transaction failed: " + e2, e2); } throw e; } } finally { try { connection.close(); } catch (SQLException e) { log().warn( "JdbcEventWriter: SQLException while closing database connection: " + e, e); } } if (log().isDebugEnabled()) { log().debug( "JdbcEventWriter: EventWriter finished for : " + event.getUei()); } } /** * Insert values into the EVENTS table * * @exception java.sql.SQLException * Thrown if there is an error adding the event to the * database. * @exception java.lang.NullPointerException * Thrown if a required resource cannot be found in the * properties file. */ private void insertEvent(Header eventHeader, Event event, Connection connection) throws SQLException { // Execute the statement to get the next event id int eventID = getNextId(); if (log().isDebugEnabled()) { log().debug("EventWriter: DBID: " + eventID); } try { PreparedStatement insStmt = null; // TODO // connection // .prepareStatement(EventdConstants.SQL_DB_INS_EVENT); // execute insStmt.executeUpdate(); } finally { // TODO } if (log().isDebugEnabled()) { log().debug( "SUCCESSFULLY added " + event.getUei() + " related data into the EVENTS table"); } } }