From c870878402b9aa999dde7c580e445845db1ffde6 Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Wed, 25 Feb 2015 15:29:36 -0500 Subject: [PATCH 1/4] doc changes on architecture including picture changes I have changed the OpenOffice files. Exported the pictures As I exported the pictures I selected the group on the slide, File->Export, JPG file, and selected selection only. The size was the default size and that worked alright. --- docs/user-manual/en/architecture.md | 15 +++++++++--- .../en/diagrams/architecture-diagrams.odg | Bin 10587 -> 12181 bytes docs/user-manual/en/images/architecture1.jpg | Bin 19948 -> 38156 bytes docs/user-manual/en/images/architecture2.jpg | Bin 18718 -> 15337 bytes docs/user-manual/en/images/architecture3.jpg | Bin 12274 -> 9614 bytes docs/user-manual/en/messaging-concepts.md | 2 +- docs/user-manual/en/persistence.md | 23 ++++++------------ 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/user-manual/en/architecture.md b/docs/user-manual/en/architecture.md index 91a1a9c404..83904905b9 100644 --- a/docs/user-manual/en/architecture.md +++ b/docs/user-manual/en/architecture.md @@ -28,14 +28,21 @@ ActiveMQ clients, potentially on different physical machines interact with the ActiveMQ server. ActiveMQ currently provides two APIs for messaging at the client side: -1. Core client API. This is a simple intuitive Java API that allows the +1. Core client API. This is a simple intuitive Java API that allows the full set of messaging functionality without some of the complexities of JMS. -2. JMS client API. The standard JMS API is available at the client +2. JMS client API. The standard JMS API is available at the client side. -JMS semantics are implemented by a thin JMS facade layer on the client +ActiveMQ also provides different protocol implementations on the server so you can use respective clients for these protocols: + +1. Stomp +2. OpenWire +3. AMQP + + +JMS semantics are implemented by a JMS facade layer on the client side. The ActiveMQ server does not speak JMS and in fact does not know @@ -66,7 +73,7 @@ application that requires messaging functionality internally but you don't want to expose that as a ActiveMQ server you can directly instantiate and embed ActiveMQ servers in your own application. -For more information on embedding ActiveMQ, see [Embedding HornetQ](embedding-hornetq.md). +For more information on embedding ActiveMQ, see [Embedding ActiveMQ](embedding-activemq.md). ## ActiveMQ integrated with a JEE application server diff --git a/docs/user-manual/en/diagrams/architecture-diagrams.odg b/docs/user-manual/en/diagrams/architecture-diagrams.odg index 33d99cf6bba481bc02d7e63c679b44af3014152c..e73560be77743919cc5f3a418c141757c86beb6b 100644 GIT binary patch literal 12181 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 literal 10587 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 diff --git a/docs/user-manual/en/images/architecture1.jpg b/docs/user-manual/en/images/architecture1.jpg index cb1161f645aac7505a527cd6eceff91ab51bf94e..3320b0304e93273363d443938ac45c758747553d 100644 GIT binary patch literal 38156 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 m=7pdaY8M0YAS0;s87>EF3HhJRBSx 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 diff --git a/docs/user-manual/en/images/architecture2.jpg b/docs/user-manual/en/images/architecture2.jpg index 274f578a5e0a450bf32745ac1e3a520cfd9f2297..9645f34befa68a39b985c904780c0268382156ef 100644 GIT binary patch literal 15337 zcmd6O2UrwMx8}@{lMD)KGDuJ)2T?#oas~mB3=$_uk#T`#f7UbXPcas_H%GRGsQ>eoX%O2!g6AswjfMU=RolM9_~J zkQ@jb6B7#)0~-qq3kL@q7oUUx9}f?ok{CuvLQ6$YM@vOR183%CgEMk7(a^A8<={r} z2?`3*vx!Iu^NaHe2=b$tfN^ke@bT~|2nZz|F^@BRuB<3_zlC~r!*xw{J#^c zzwPyIGFiKdx$Lcf+}ftQv>04Be=@D&);@XBJ9fjjr=MD8JwI*h z89cdF;xFtn{+Q6YXy{&Yxkr|ql$?|rn+Y4;2IUPpU(bD)S*|7t6$KRq9lzbjrbua! z!YzYlEg}=r3K9@yjl$Nvj{b6fZhqc)n0t(5m}ae}gc1K6o`(aa=~K}!Mr;VKn2*@F zJ~kHvVV6fv;zGDAY9Rrjo`Xe=louK)f>Xg7nR#MXpRE?hg1Ht4o=ZLxd*qXFaFi)2 z*7UM(<8hB^rUqYEF^I92%bXp%y!$DSJP>WH6>GFjiqgAQ-pRZ@q3CIzGw(iTkJ(5nMS(5?y_&QxL4h)a;g1^ z|8n_lQgBnwk7!U%pzt+RE|c=Ps8){K({XU=~Wf8VAwW4EhY-+{v2%y4v|* zt-XeJPcqCe%r6-wgh~E4;>Vloi(fj%%`%*s)^3QsGRt2#2^mFWEN(sal(HCAt$~_g z<&G=Xkzm@E!!nj51k#v9a^Vf`J>xx{Ky#kR4~7iL$H)G$3sYaSnD&cSw?G%O01@f4 zsh88$9c*Dq11d=gAU=a>*imV+{z-zKrE}`NSJ%hmeYdH@rUaXq_~Q>sQG)H~(g%SU z)&>g6i*8F)2cnc26By~0mZa1DCVE}ilHbIq-NRd_bL|rxe!&YHE2GChKv~D$kFng} z07d|?Uky}LQXa8#4AlC%GJ?05b)Oey8z?h~zDOi8t%@JhunyAqdHU;r!}mQh6a2n^ zv*`7mtd{rA_vuA$863Y-8#JHMAlmz&Aa(b}f8JLZcqqda>@1T@Ls?KA7$!^4*rTzEx45ugen+^sJjkU-c#K3Vb@w`jGte?e>SbnJXxr z!0%mp{?@(z?%G=rev@RwCYsSNuD~6fYMONPY(mplBpdvAWg;`%@sG;?{W1MV<9|2r z-?fxUJvY)e-Bw1@Ks1Yk^deUpLLAZm(}+bS{yp7Sk)ah4xyd$vYG&sJU9#`cW0srDPm$JHXQ%7E*$5efftUI=kqdBiM{mgY%omY?E ztup=!3k#kndR6wQX*9;$)aPB0^PmsoRc7D11^9!qV%}v!6*k5=Lr%Pk_^Eu(>RTeg z+%3uGeF*Cm{(efWoLMs=cK3;koDKd9Or2B$#^4DCudr&jh=TDq*?Y4}
PR5KM% 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 - ` +`java -cp activemq-tools-jar-with-dependencies.jar export-journal ` To import the file as binary data on the journal (Notice you also require netty.jar): -`java -cp activemq-core.jar:netty.jar org.apache.activemq.core.journal.impl.ImportJournal - - ` +`java -cp activemq-tools-jar-with-dependencies.jar import-journal ` -- JournalDirectory: Use the configured folder for your selected - folder. Example: ./activemq/data/journal +- JournalDirectory: Use the configured folder for your selected folder. Example: ./activemq/data/journal -- JournalPrefix: Use the prefix for your selected journal, as - discussed above +- JournalPrefix: Use the prefix for your selected journal, as discussed above -- FileExtension: Use the extension for your selected journal, as - discussed above +- FileExtension: Use the extension for your selected journal, as discussed above - FileSize: Use the size for your selected journal, as discussed above -- FileOutput: text file that will contain the exported data - +- FileOutput or FileInput: text file that will contain the exported data +See [Tools](tools.md) for more information. From ed7c429624930abfa04b1283de5b4ac2e45e6799 Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Wed, 25 Feb 2015 22:02:09 -0500 Subject: [PATCH 2/4] renaming hornetq_doap.rdf --- hornetq_doap.rdf => activemq_doap.rdf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename hornetq_doap.rdf => activemq_doap.rdf (97%) diff --git a/hornetq_doap.rdf b/activemq_doap.rdf similarity index 97% rename from hornetq_doap.rdf rename to activemq_doap.rdf index a8798a4c57..16d9787574 100644 --- a/hornetq_doap.rdf +++ b/activemq_doap.rdf @@ -65,8 +65,8 @@ under the License. - 2.4.0 - 2.4.0.final + 6.0.0 + 6.0.0.final 2013-16-12 From 210222e24fa4cc7e8b184ca1c3d4a9bc52d560bc Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Wed, 25 Feb 2015 22:45:21 -0500 Subject: [PATCH 3/4] moving export-journal / import-journal to the proper tools place This is simply moving the export/import journal to its proper place. The previous commit should have added docs about this --- .../apache/activemq/tools}/ExportJournal.java | 94 ++++++++------ .../apache/activemq/tools}/ImportJournal.java | 121 ++++++++++-------- .../java/org/apache/activemq/tools/Main.java | 16 ++- .../journal/NIOJournalCompactTest.java | 2 +- .../persistence/ExportFormatTest.java | 6 +- tests/unit-tests/pom.xml | 5 + .../journal/impl/JournalImplTestBase.java | 4 +- 7 files changed, 152 insertions(+), 96 deletions(-) rename {activemq-journal/src/main/java/org/apache/activemq/core/journal/impl => activemq-tools/src/main/java/org/apache/activemq/tools}/ExportJournal.java (71%) rename {activemq-journal/src/main/java/org/apache/activemq/core/journal/impl => activemq-tools/src/main/java/org/apache/activemq/tools}/ImportJournal.java (74%) diff --git a/activemq-journal/src/main/java/org/apache/activemq/core/journal/impl/ExportJournal.java b/activemq-tools/src/main/java/org/apache/activemq/tools/ExportJournal.java similarity index 71% rename from activemq-journal/src/main/java/org/apache/activemq/core/journal/impl/ExportJournal.java rename to activemq-tools/src/main/java/org/apache/activemq/tools/ExportJournal.java index e00204a29c..9e175b7f1e 100644 --- a/activemq-journal/src/main/java/org/apache/activemq/core/journal/impl/ExportJournal.java +++ b/activemq-tools/src/main/java/org/apache/activemq/tools/ExportJournal.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.activemq.core.journal.impl; +package org.apache.activemq.tools; import java.io.BufferedOutputStream; import java.io.File; @@ -24,18 +24,20 @@ import java.util.List; import org.apache.activemq.core.journal.RecordInfo; import org.apache.activemq.core.journal.SequentialFileFactory; +import org.apache.activemq.core.journal.impl.JournalFile; +import org.apache.activemq.core.journal.impl.JournalImpl; +import org.apache.activemq.core.journal.impl.JournalReaderCallback; +import org.apache.activemq.core.journal.impl.NIOSequentialFileFactory; import org.apache.activemq.utils.Base64; /** - * Use this class to export the journal data. You can use it as a main class or through its native method {@link ExportJournal#exportJournal(String, String, String, int, int, String)} - * + * Use this class to export the journal data. You can use it as a main class or through its static method {@link #exportJournal(String, String, String, int, int, String)} + *

* If you use the main method, use it as - * - * Example: java -cp activemq-core.jar org.apache.activemq.core.journal.impl.ExportJournal /journalDir activemq-data amq 2 10485760 /tmp/export.dat + *

+ * Example: java -cp activemq-tools*-jar-with-dependencies.jar export-journal /journalDir activemq-data amq 2 10485760 /tmp/export.dat * * @author Clebert Suconic - * - * */ public class ExportJournal { @@ -50,17 +52,21 @@ public class ExportJournal // Public -------------------------------------------------------- - public static void main(final String[] arg) + public void process(final String[] arg) { - if (arg.length != 5) + if (arg.length != 6) { - System.err.println("Use: java -cp activemq-core.jar org.apache.activemq.core.journal.impl.ExportJournal "); - return; + for (int i = 0; i < arg.length; i++) + { + System.out.println("arg[" + i + "] = " + arg[i]); + } + printUsage(); + System.exit(-1); } try { - ExportJournal.exportJournal(arg[0], arg[1], arg[2], 2, Integer.parseInt(arg[3]), arg[4]); + exportJournal(arg[1], arg[2], arg[3], 2, Integer.parseInt(arg[4]), arg[5]); } catch (Exception e) { @@ -83,7 +89,7 @@ public class ExportJournal PrintStream out = new PrintStream(buffOut); - ExportJournal.exportJournal(directory, journalPrefix, journalSuffix, minFiles, fileSize, out); + exportJournal(directory, journalPrefix, journalSuffix, minFiles, fileSize, out); out.close(); } @@ -105,7 +111,7 @@ public class ExportJournal { out.println("#File," + file); - ExportJournal.exportJournalFile(out, nio, file); + exportJournalFile(out, nio, file); } } @@ -124,12 +130,12 @@ public class ExportJournal public void onReadUpdateRecordTX(final long transactionID, final RecordInfo recordInfo) throws Exception { - out.println("operation@UpdateTX,txID@" + transactionID + "," + ExportJournal.describeRecord(recordInfo)); + out.println("operation@UpdateTX,txID@" + transactionID + "," + describeRecord(recordInfo)); } public void onReadUpdateRecord(final RecordInfo recordInfo) throws Exception { - out.println("operation@Update," + ExportJournal.describeRecord(recordInfo)); + out.println("operation@Update," + describeRecord(recordInfo)); } public void onReadRollbackRecord(final long transactionID) throws Exception @@ -140,17 +146,17 @@ public class ExportJournal public void onReadPrepareRecord(final long transactionID, final byte[] extraData, final int numberOfRecords) throws Exception { out.println("operation@Prepare,txID@" + transactionID + - ",numberOfRecords@" + - numberOfRecords + - ",extraData@" + - ExportJournal.encode(extraData)); + ",numberOfRecords@" + + numberOfRecords + + ",extraData@" + + encode(extraData)); } public void onReadDeleteRecordTX(final long transactionID, final RecordInfo recordInfo) throws Exception { out.println("operation@DeleteRecordTX,txID@" + transactionID + - "," + - ExportJournal.describeRecord(recordInfo)); + "," + + describeRecord(recordInfo)); } public void onReadDeleteRecord(final long recordID) throws Exception @@ -165,12 +171,12 @@ public class ExportJournal public void onReadAddRecordTX(final long transactionID, final RecordInfo recordInfo) throws Exception { - out.println("operation@AddRecordTX,txID@" + transactionID + "," + ExportJournal.describeRecord(recordInfo)); + out.println("operation@AddRecordTX,txID@" + transactionID + "," + describeRecord(recordInfo)); } public void onReadAddRecord(final RecordInfo recordInfo) throws Exception { - out.println("operation@AddRecord," + ExportJournal.describeRecord(recordInfo)); + out.println("operation@AddRecord," + describeRecord(recordInfo)); } public void markAsDataFile(final JournalFile file) @@ -182,16 +188,16 @@ public class ExportJournal private static String describeRecord(final RecordInfo recordInfo) { return "id@" + recordInfo.id + - ",userRecordType@" + - recordInfo.userRecordType + - ",length@" + - recordInfo.data.length + - ",isUpdate@" + - recordInfo.isUpdate + - ",compactCount@" + - recordInfo.compactCount + - ",data@" + - ExportJournal.encode(recordInfo.data); + ",userRecordType@" + + recordInfo.userRecordType + + ",length@" + + recordInfo.data.length + + ",isUpdate@" + + recordInfo.isUpdate + + ",compactCount@" + + recordInfo.compactCount + + ",data@" + + encode(recordInfo.data); } private static String encode(final byte[] data) @@ -199,12 +205,22 @@ public class ExportJournal return Base64.encodeBytes(data, 0, data.length, Base64.DONT_BREAK_LINES | Base64.URL_SAFE); } - // Package protected --------------------------------------------- - // Protected ----------------------------------------------------- + public void printUsage() + { + for (int i = 0; i < 10; i++) + { + System.err.println(); + } + System.err.println("This method will export the journal at low level record."); + System.err.println(); + System.err.println(Main.USAGE + " export-journal "); + System.err.println(); + for (int i = 0; i < 10; i++) + { + System.err.println(); + } + } - // Private ------------------------------------------------------- - - // Inner classes ------------------------------------------------- } diff --git a/activemq-journal/src/main/java/org/apache/activemq/core/journal/impl/ImportJournal.java b/activemq-tools/src/main/java/org/apache/activemq/tools/ImportJournal.java similarity index 74% rename from activemq-journal/src/main/java/org/apache/activemq/core/journal/impl/ImportJournal.java rename to activemq-tools/src/main/java/org/apache/activemq/tools/ImportJournal.java index 155aeae068..77a04fda53 100644 --- a/activemq-journal/src/main/java/org/apache/activemq/core/journal/impl/ImportJournal.java +++ b/activemq-tools/src/main/java/org/apache/activemq/tools/ImportJournal.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.activemq.core.journal.impl; +package org.apache.activemq.tools; import java.io.BufferedReader; import java.io.File; @@ -28,12 +28,15 @@ import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; import org.apache.activemq.core.journal.RecordInfo; +import org.apache.activemq.core.journal.impl.JournalImpl; +import org.apache.activemq.core.journal.impl.JournalRecord; +import org.apache.activemq.core.journal.impl.NIOSequentialFileFactory; import org.apache.activemq.utils.Base64; /** * Use this class to import the journal data from a listed file. You can use it as a main class or * through its native method - * {@link ImportJournal#importJournal(String, String, String, int, int, String)} + * {@link #importJournal(String, String, String, int, int, String)} *

* If you use the main method, use its arguments as: * @@ -61,17 +64,26 @@ public class ImportJournal // Public -------------------------------------------------------- - public static void main(final String[] arg) + + public void process(final String[] arg) { - if (arg.length != 5) + for (int i = 0; i < arg.length; i++) { - System.err.println("Use: java -cp activemq-core.jar:netty.jar org.apache.activemq.core.journal.impl.ImportJournal "); - return; + System.out.println("arg[" + i + "] = " + arg[i]); + } + if (arg.length != 6) + { + for (int i = 0; i < arg.length; i++) + { + System.out.println("arg[" + i + "] = " + arg[i]); + } + printUsage(); + System.exit(-1); } try { - ImportJournal.importJournal(arg[0], arg[1], arg[2], 2, Integer.parseInt(arg[3]), arg[4]); + importJournal(arg[1], arg[2], arg[3], 2, Integer.parseInt(arg[4]), arg[5]); } catch (Exception e) { @@ -88,7 +100,7 @@ public class ImportJournal final String fileInput) throws Exception { FileInputStream fileInputStream = new FileInputStream(new File(fileInput)); - ImportJournal.importJournal(directory, journalPrefix, journalSuffix, minFiles, fileSize, fileInputStream); + importJournal(directory, journalPrefix, journalSuffix, minFiles, fileSize, fileInputStream); } @@ -100,7 +112,7 @@ public class ImportJournal final InputStream stream) throws Exception { Reader reader = new InputStreamReader(stream); - ImportJournal.importJournal(directory, journalPrefix, journalSuffix, minFiles, fileSize, reader); + importJournal(directory, journalPrefix, journalSuffix, minFiles, fileSize, reader); } public static void importJournal(final String directory, @@ -153,7 +165,7 @@ public class ImportJournal continue; } - Properties lineProperties = ImportJournal.parseLine(splitLine); + Properties lineProperties = parseLine(splitLine); String operation = null; try @@ -162,41 +174,41 @@ public class ImportJournal if (operation.equals("AddRecord")) { - RecordInfo info = ImportJournal.parseRecord(lineProperties); + RecordInfo info = parseRecord(lineProperties); journal.appendAddRecord(info.id, info.userRecordType, info.data, false); } else if (operation.equals("AddRecordTX")) { - long txID = ImportJournal.parseLong("txID", lineProperties); - AtomicInteger counter = ImportJournal.getCounter(txID, txCounters); + long txID = parseLong("txID", lineProperties); + AtomicInteger counter = getCounter(txID, txCounters); counter.incrementAndGet(); - RecordInfo info = ImportJournal.parseRecord(lineProperties); + RecordInfo info = parseRecord(lineProperties); journal.appendAddRecordTransactional(txID, info.id, info.userRecordType, info.data); } else if (operation.equals("AddRecordTX")) { - long txID = ImportJournal.parseLong("txID", lineProperties); - AtomicInteger counter = ImportJournal.getCounter(txID, txCounters); + long txID = parseLong("txID", lineProperties); + AtomicInteger counter = getCounter(txID, txCounters); counter.incrementAndGet(); - RecordInfo info = ImportJournal.parseRecord(lineProperties); + RecordInfo info = parseRecord(lineProperties); journal.appendAddRecordTransactional(txID, info.id, info.userRecordType, info.data); } else if (operation.equals("UpdateTX")) { - long txID = ImportJournal.parseLong("txID", lineProperties); - AtomicInteger counter = ImportJournal.getCounter(txID, txCounters); + long txID = parseLong("txID", lineProperties); + AtomicInteger counter = getCounter(txID, txCounters); counter.incrementAndGet(); - RecordInfo info = ImportJournal.parseRecord(lineProperties); + RecordInfo info = parseRecord(lineProperties); journal.appendUpdateRecordTransactional(txID, info.id, info.userRecordType, info.data); } else if (operation.equals("Update")) { - RecordInfo info = ImportJournal.parseRecord(lineProperties); + RecordInfo info = parseRecord(lineProperties); journal.appendUpdateRecord(info.id, info.userRecordType, info.data, false); } else if (operation.equals("DeleteRecord")) { - long id = ImportJournal.parseLong("id", lineProperties); + long id = parseLong("id", lineProperties); // If not found it means the append/update records were reclaimed already if (journalRecords.get(id) != null) @@ -206,9 +218,9 @@ public class ImportJournal } else if (operation.equals("DeleteRecordTX")) { - long txID = ImportJournal.parseLong("txID", lineProperties); - long id = ImportJournal.parseLong("id", lineProperties); - AtomicInteger counter = ImportJournal.getCounter(txID, txCounters); + long txID = parseLong("txID", lineProperties); + long id = parseLong("id", lineProperties); + AtomicInteger counter = getCounter(txID, txCounters); counter.incrementAndGet(); // If not found it means the append/update records were reclaimed already @@ -219,10 +231,10 @@ public class ImportJournal } else if (operation.equals("Prepare")) { - long txID = ImportJournal.parseLong("txID", lineProperties); - int numberOfRecords = ImportJournal.parseInt("numberOfRecords", lineProperties); - AtomicInteger counter = ImportJournal.getCounter(txID, txCounters); - byte[] data = ImportJournal.parseEncoding("extraData", lineProperties); + long txID = parseLong("txID", lineProperties); + int numberOfRecords = parseInt("numberOfRecords", lineProperties); + AtomicInteger counter = getCounter(txID, txCounters); + byte[] data = parseEncoding("extraData", lineProperties); if (counter.get() == numberOfRecords) { @@ -241,9 +253,9 @@ public class ImportJournal } else if (operation.equals("Commit")) { - long txID = ImportJournal.parseLong("txID", lineProperties); - int numberOfRecords = ImportJournal.parseInt("numberOfRecords", lineProperties); - AtomicInteger counter = ImportJournal.getCounter(txID, txCounters); + long txID = parseLong("txID", lineProperties); + int numberOfRecords = parseInt("numberOfRecords", lineProperties); + AtomicInteger counter = getCounter(txID, txCounters); if (counter.get() == numberOfRecords) { journal.appendCommitRecord(txID, false); @@ -261,12 +273,12 @@ public class ImportJournal } else if (operation.equals("Rollback")) { - long txID = ImportJournal.parseLong("txID", lineProperties); + long txID = parseLong("txID", lineProperties); journal.appendRollbackRecord(txID, false); } else { - System.err.println("Invalid opeartion " + operation + " at line " + lineNumber); + System.err.println("Invalid operation " + operation + " at line " + lineNumber); } } catch (Exception ex) @@ -293,18 +305,18 @@ public class ImportJournal protected static RecordInfo parseRecord(final Properties properties) throws Exception { - long id = ImportJournal.parseLong("id", properties); - byte userRecordType = ImportJournal.parseByte("userRecordType", properties); - boolean isUpdate = ImportJournal.parseBoolean("isUpdate", properties); - byte[] data = ImportJournal.parseEncoding("data", properties); + long id = parseLong("id", properties); + byte userRecordType = parseByte("userRecordType", properties); + boolean isUpdate = parseBoolean("isUpdate", properties); + byte[] data = parseEncoding("data", properties); return new RecordInfo(id, userRecordType, data, isUpdate, (short)0); } private static byte[] parseEncoding(final String name, final Properties properties) throws Exception { - String value = ImportJournal.parseString(name, properties); + String value = parseString(name, properties); - return ImportJournal.decode(value); + return decode(value); } /** @@ -313,28 +325,28 @@ public class ImportJournal */ private static int parseInt(final String name, final Properties properties) throws Exception { - String value = ImportJournal.parseString(name, properties); + String value = parseString(name, properties); return Integer.parseInt(value); } private static long parseLong(final String name, final Properties properties) throws Exception { - String value = ImportJournal.parseString(name, properties); + String value = parseString(name, properties); return Long.parseLong(value); } private static boolean parseBoolean(final String name, final Properties properties) throws Exception { - String value = ImportJournal.parseString(name, properties); + String value = parseString(name, properties); return Boolean.parseBoolean(value); } private static byte parseByte(final String name, final Properties properties) throws Exception { - String value = ImportJournal.parseString(name, properties); + String value = parseString(name, properties); return Byte.parseByte(value); } @@ -381,12 +393,21 @@ public class ImportJournal return Base64.decode(data, Base64.DONT_BREAK_LINES | Base64.URL_SAFE); } - // Package protected --------------------------------------------- - // Protected ----------------------------------------------------- - - // Private ------------------------------------------------------- - - // Inner classes ------------------------------------------------- + public void printUsage() + { + for (int i = 0; i < 10; i++) + { + System.err.println(); + } + System.err.println("This method will export the journal at low level record."); + System.err.println(); + System.err.println(Main.USAGE + " import-journal "); + System.err.println(); + for (int i = 0; i < 10; i++) + { + System.err.println(); + } + } } diff --git a/activemq-tools/src/main/java/org/apache/activemq/tools/Main.java b/activemq-tools/src/main/java/org/apache/activemq/tools/Main.java index afbf4f461d..9eee57fab9 100644 --- a/activemq-tools/src/main/java/org/apache/activemq/tools/Main.java +++ b/activemq-tools/src/main/java/org/apache/activemq/tools/Main.java @@ -25,7 +25,9 @@ public class Main private static final String PRINT_PAGES = "print-pages"; private static final String DATA_TOOL = "data-tool"; private static final String TRANSFER = "transfer-queue"; - private static final String OPTIONS = " [" + IMPORT + "|" + EXPORT + "|" + PRINT_DATA + "|" + PRINT_PAGES + "|" + DATA_TOOL + "|" + TRANSFER + "]"; + private static final String EXPORT_JOURNAL = "export-journal"; + private static final String IMPORT_JOURNAL = "import-journal"; + private static final String OPTIONS = " [" + IMPORT + "|" + EXPORT + "|" + PRINT_DATA + "|" + PRINT_PAGES + "|" + DATA_TOOL + "|" + TRANSFER + "|" + EXPORT_JOURNAL + "|" + IMPORT_JOURNAL + "]"; public static void main(String[] arg) throws Exception { @@ -36,7 +38,17 @@ public class Main } - if (TRANSFER.equals(arg[0])) + if (IMPORT_JOURNAL.equals(arg[0])) + { + ImportJournal tool = new ImportJournal(); + tool.process(arg); + } + else if (EXPORT_JOURNAL.equals(arg[0])) + { + ExportJournal tool = new ExportJournal(); + tool.process(arg); + } + else if (TRANSFER.equals(arg[0])) { TransferQueue tool = new TransferQueue(); tool.process(arg); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/journal/NIOJournalCompactTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/journal/NIOJournalCompactTest.java index 992437c730..e24905facb 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/journal/NIOJournalCompactTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/journal/NIOJournalCompactTest.java @@ -38,7 +38,6 @@ import org.apache.activemq.core.journal.RecordInfo; import org.apache.activemq.core.journal.SequentialFile; import org.apache.activemq.core.journal.SequentialFileFactory; import org.apache.activemq.core.journal.impl.AbstractJournalUpdateTask; -import org.apache.activemq.core.journal.impl.ExportJournal; import org.apache.activemq.core.journal.impl.JournalCompactor; import org.apache.activemq.core.journal.impl.JournalFile; import org.apache.activemq.core.journal.impl.JournalFileImpl; @@ -50,6 +49,7 @@ import org.apache.activemq.core.server.impl.ServerMessageImpl; import org.apache.activemq.tests.unit.core.journal.impl.JournalImplTestBase; import org.apache.activemq.tests.unit.core.journal.impl.fakes.SimpleEncoding; import org.apache.activemq.tests.util.UnitTestCase; +import org.apache.activemq.tools.ExportJournal; import org.apache.activemq.utils.IDGenerator; import org.apache.activemq.utils.OrderedExecutorFactory; import org.apache.activemq.utils.SimpleIDGenerator; diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/persistence/ExportFormatTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/persistence/ExportFormatTest.java index fbd9e746c6..f61b900e44 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/persistence/ExportFormatTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/persistence/ExportFormatTest.java @@ -16,6 +16,8 @@ */ package org.apache.activemq.tests.integration.persistence; +import org.apache.activemq.tools.ExportJournal; +import org.apache.activemq.tools.ImportJournal; import org.junit.Ignore; import org.junit.Test; @@ -27,8 +29,6 @@ import org.apache.activemq.api.core.client.ClientProducer; import org.apache.activemq.api.core.client.ClientSession; import org.apache.activemq.api.core.client.ClientSessionFactory; import org.apache.activemq.api.core.client.ServerLocator; -import org.apache.activemq.core.journal.impl.ExportJournal; -import org.apache.activemq.core.journal.impl.ImportJournal; import org.apache.activemq.core.server.ActiveMQServer; import org.apache.activemq.tests.util.ServiceTestBase; @@ -117,10 +117,12 @@ public class ExportFormatTest extends ServiceTestBase locator.close(); server.stop(); + System.out.println(); System.out.println("copy & paste the following as bindingsFile:"); ExportJournal.exportJournal(getBindingsDir(), "activemq-bindings", "bindings", 2, 1048576, System.out); + System.out.println(); System.out.println("copy & paste the following as dataFile:"); ExportJournal.exportJournal(getJournalDir(), "activemq-data", "amq", 2, 102400, System.out); diff --git a/tests/unit-tests/pom.xml b/tests/unit-tests/pom.xml index cc08555cb7..5c22bb0bbc 100644 --- a/tests/unit-tests/pom.xml +++ b/tests/unit-tests/pom.xml @@ -66,6 +66,11 @@ activemq-bootstrap ${project.version} + + org.apache.activemq + activemq-tools + ${project.version} + org.apache.geronimo.specs geronimo-j2ee-connector_1.5_spec diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/tests/unit/core/journal/impl/JournalImplTestBase.java b/tests/unit-tests/src/test/java/org/apache/activemq/tests/unit/core/journal/impl/JournalImplTestBase.java index 5ed11a1848..01a42e2ad3 100644 --- a/tests/unit-tests/src/test/java/org/apache/activemq/tests/unit/core/journal/impl/JournalImplTestBase.java +++ b/tests/unit-tests/src/test/java/org/apache/activemq/tests/unit/core/journal/impl/JournalImplTestBase.java @@ -15,6 +15,8 @@ * limitations under the License. */ package org.apache.activemq.tests.unit.core.journal.impl; +import org.apache.activemq.tools.ExportJournal; +import org.apache.activemq.tools.ImportJournal; import org.junit.Before; import org.junit.After; @@ -35,8 +37,6 @@ import org.apache.activemq.core.journal.PreparedTransactionInfo; import org.apache.activemq.core.journal.RecordInfo; import org.apache.activemq.core.journal.SequentialFileFactory; import org.apache.activemq.core.journal.TestableJournal; -import org.apache.activemq.core.journal.impl.ExportJournal; -import org.apache.activemq.core.journal.impl.ImportJournal; import org.apache.activemq.core.journal.impl.JournalImpl; import org.apache.activemq.tests.util.UnitTestCase; import org.apache.activemq.utils.ReusableLatch; From 060a4d17b781c3004582fd6205e0adccf8a7b58b Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Thu, 26 Feb 2015 00:21:03 -0500 Subject: [PATCH 4/4] Adding test to the release profileA This is so we would catch compilation failures on the testsuite. Devs are now using the release profile. Not having the tests on the release profile would give devs and contributors the impression that everything compiled ok --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 9611d295aa..fa955b40ae 100644 --- a/pom.xml +++ b/pom.xml @@ -468,6 +468,7 @@ integration/activemq-aerogear-integration integration/activemq-vertx-integration distribution + tests