You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Harmen Renkema (JIRA)" <ji...@apache.org> on 2017/07/11 09:05:00 UTC

[jira] [Created] (AMQ-6767) Support for Hana jdbc persistence adapter

Harmen Renkema created AMQ-6767:
-----------------------------------

             Summary: Support for Hana jdbc persistence adapter
                 Key: AMQ-6767
                 URL: https://issues.apache.org/jira/browse/AMQ-6767
             Project: ActiveMQ
          Issue Type: Improvement
    Affects Versions: 5.14.3
            Reporter: Harmen Renkema
            Priority: Minor


We're using jdbc for persistence with a SAP HANA database, which isn't supported out of the box. 

As per the documentation (http://activemq.apache.org/jdbc-support.html) we've created a HanaJdbcAdapter in the same way as the already existing AxionJdbcAdapter. 

We would like to share this adapter with the project, so others can benefit. Feel free to include it in the project.


{code:java}

import org.apache.activemq.store.jdbc.Statements;
import org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter;

public class HanaJdbcAdapter extends DefaultJDBCAdapter {

	@Override
	public void setStatements(Statements statements) {
		String[] createSchemaStatements = new String[] {
				"CREATE TABLE " + statements.getFullMessageTableName() + "(" + "ID " + statements.getSequenceDataType()
						+ " NOT NULL" + ", CONTAINER " + statements.getContainerNameDataType() + ", MSGID_PROD " + statements
						.getMsgIdDataType() + ", MSGID_SEQ " + statements.getSequenceDataType() + ", EXPIRATION " + statements
						.getLongDataType() + ", MSG " + (statements.isUseExternalMessageReferences() ?
						statements.getStringIdDataType() :
						statements.getBinaryDataType()) + ", PRIMARY KEY ( ID ) )",
				"CREATE INDEX " + statements.getFullMessageTableName() + "_MIDX ON " + statements.getFullMessageTableName()
						+ " (MSGID_PROD,MSGID_SEQ)",
				"CREATE INDEX " + statements.getFullMessageTableName() + "_CIDX ON " + statements.getFullMessageTableName()
						+ " (CONTAINER)",
				"CREATE INDEX " + statements.getFullMessageTableName() + "_EIDX ON " + statements.getFullMessageTableName()
						+ " (EXPIRATION)",
				"CREATE TABLE " + statements.getFullAckTableName() + "(" + "CONTAINER " + statements.getContainerNameDataType()
						+ " NOT NULL" + ", SUB_DEST " + statements.getStringIdDataType() + ", CLIENT_ID " + statements
						.getStringIdDataType() + " NOT NULL" + ", SUB_NAME " + statements.getStringIdDataType() + " NOT NULL"
						+ ", SELECTOR " + statements.getStringIdDataType() + ", LAST_ACKED_ID " + statements.getSequenceDataType()
						+ ", PRIMARY KEY ( CONTAINER, CLIENT_ID, SUB_NAME))",
				"ALTER TABLE " + statements.getFullMessageTableName() + " ADD (PRIORITY " + statements.getSequenceDataType() + ")",
				"CREATE INDEX " + statements.getFullMessageTableName() + "_PIDX ON " + statements.getFullMessageTableName()
						+ " (PRIORITY)",
				"ALTER TABLE " + statements.getFullMessageTableName() + " ADD (XID " + statements.getStringIdDataType() + ")",
				"ALTER TABLE " + statements.getFullAckTableName() + " ADD (PRIORITY " + statements.getSequenceDataType()
						+ " DEFAULT 5 NOT NULL)",
				"ALTER TABLE " + statements.getFullAckTableName() + " ADD (XID " + statements.getStringIdDataType() + ")",
				"ALTER TABLE " + statements.getFullAckTableName() + " " + statements.getDropAckPKAlterStatementEnd(),
				"ALTER TABLE " + statements.getFullAckTableName() + " ADD PRIMARY KEY (CONTAINER, CLIENT_ID, SUB_NAME, PRIORITY)",
				"CREATE INDEX " + statements.getFullMessageTableName() + "_XIDX ON " + statements.getFullMessageTableName()
						+ " (XID)",
				"CREATE INDEX " + statements.getFullAckTableName() + "_XIDX ON " + statements.getFullAckTableName() + " (XID)" };

		statements.setCreateSchemaStatements(createSchemaStatements);

		super.setStatements(statements);
	}

}

{code}




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)