activemq 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ #include "activemq.hpp"
2
+
3
+ void register_TextMessage(Module rb_module) {
4
+ Data_Type< cms::TextMessage > rb_cTextMessage = define_class_under< cms::TextMessage,cms::Message >(rb_module, "TextMessage");
5
+ rb_cTextMessage.define_method("text", &cms::TextMessage::getText);
6
+
7
+ {
8
+ typedef void ( cms::TextMessage::*setText_func_type )( const std::string& msg );
9
+ rb_cTextMessage.define_method("text=", setText_func_type( &cms::TextMessage::setText ), (Arg("msg")));
10
+ }
11
+ }
@@ -0,0 +1,44 @@
1
+ #include "activemq.hpp"
2
+
3
+ void register_Connection(Module rb_module);
4
+ void register_ConnectionFactory(Module rb_module);
5
+ void register_Session(Module rb_module);
6
+ void register_Message(Module rb_module);
7
+ void register_Destinations(Module rb_module);
8
+ void register_MessageProducer(Module rb_module);
9
+ void register_DeliveryMode(Module rb_module);
10
+ void register_TextMessage(Module rb_module);
11
+
12
+ extern "C"
13
+ void Init_ActiveMQ() {
14
+ Module rb_mActivemq = define_module("ActiveMQ");
15
+
16
+ activemq::library::ActiveMQCPP::initializeLibrary();
17
+
18
+ register_Connection(rb_mActivemq);
19
+ register_ConnectionFactory(rb_mActivemq);
20
+ register_Session(rb_mActivemq);
21
+ register_Message(rb_mActivemq);
22
+ register_Destinations(rb_mActivemq);
23
+ register_MessageProducer(rb_mActivemq);
24
+ register_DeliveryMode(rb_mActivemq);
25
+ register_TextMessage(rb_mActivemq);
26
+ }
27
+
28
+ template<>
29
+ long long from_ruby<long long>(Object x)
30
+ {
31
+ return protect(detail::num2long, x);
32
+ }
33
+
34
+ template<>
35
+ Object to_ruby<long long>(long long const & x)
36
+ {
37
+ return protect(detail::long2num, x);
38
+ }
39
+
40
+ Object
41
+ instance(Object self, Object class_name)
42
+ {
43
+ return to_ruby<bool>(self.class_of().value() == class_name.value());
44
+ }
@@ -0,0 +1,40 @@
1
+ #ifndef __ACTIVEMQ_HPP__
2
+ #define __ACTIVEMQ_HPP__
3
+
4
+ #include <rice/Object.hpp>
5
+ #include <rice/Data_Type.hpp>
6
+ #include <rice/Data_Object.hpp>
7
+ #include <rice/String.hpp>
8
+ #include <rice/Class.hpp>
9
+ #include <rice/Module.hpp>
10
+ #include <rice/Exception.hpp>
11
+ #include <rice/Array.hpp>
12
+ #include <rice/Arg.hpp>
13
+ #include <rice/global_function.hpp>
14
+ #include <rice/Constructor.hpp>
15
+ #include <rice/Enum.hpp>
16
+
17
+ #include <activemq/core/ActiveMQConnectionFactory.h>
18
+ #include <activemq/library/ActiveMQCPP.h>
19
+ #include <cms/Connection.h>
20
+ #include <cms/ConnectionFactory.h>
21
+ #include <cms/Session.h>
22
+ #include <cms/Message.h>
23
+ #include <cms/Destination.h>
24
+ #include <cms/Topic.h>
25
+ #include <cms/MessageProducer.h>
26
+ #include <cms/DeliveryMode.h>
27
+ #include <cms/TextMessage.h>
28
+
29
+ using namespace Rice;
30
+
31
+ template<>
32
+ long long from_ruby<long long>(Rice::Object x);
33
+
34
+ template<>
35
+ Rice::Object to_ruby<long long>(long long const & x);
36
+
37
+ Object
38
+ instance(Object self, Object class_name);
39
+
40
+ #endif // __ACTIVEMQ_HPP__
@@ -0,0 +1,51 @@
1
+ # Loads mkmf which is used to make makefiles for Ruby extensions
2
+ require 'rubygems'
3
+ require 'mkmf-rice'
4
+
5
+ # Add the arguments to the linker flags.
6
+ def append_ld_flags(flags)
7
+ flags = [flags] unless flags.is_a?(Array)
8
+ with_ldflags("#{$LDFLAGS} #{flags.join(' ')}") { true }
9
+ end
10
+
11
+ def crash(str)
12
+ printf(" extconf failure: %s\n", str)
13
+ exit 1
14
+ end
15
+
16
+ if RUBY_PLATFORM =~ /darwin/
17
+ # In order to link the shared library into our bundle with GCC 4.x on OSX, we have to work around a bug:
18
+ # GCC redefines symbols - which the -fno-common prohibits. In order to keep the -fno-common, we
19
+ # remove the flat_namespace (we now have two namespaces, which fixes the GCC clash). Also, we now lookup
20
+ # symbols in both the namespaces (dynamic_lookup).
21
+
22
+ $LDSHARED_CXX.gsub!('suppress', 'dynamic_lookup')
23
+ $LDSHARED_CXX.gsub!('-flat_namespace', '')
24
+
25
+ append_ld_flags '-all_load'
26
+ end
27
+
28
+
29
+ # Give it a name
30
+ extension_name = 'ActiveMQ'
31
+
32
+ # The destination
33
+ dir_config(extension_name)
34
+
35
+ dir_config('activemq-cpp', '/opt/activemq-cpp-3.2.5/include/activemq-cpp-3.2.5', '/opt/activemq-cpp-3.2.5/lib')
36
+
37
+ unless have_library('activemq-cpp')
38
+ crash(<<EOL)
39
+ need activemq-cpp.
40
+
41
+ Install the activemq-cpp or try passing one of the following options
42
+ to extconf.rb:
43
+
44
+ --with-activemq-cpp-dir=/path/to/activemq-cpp
45
+ --with-activemq-cpp-lib=/path/to/activemq-cpp/lib
46
+ --with-activemq-cpp-include=/path/to/activemq-cpp/include
47
+ EOL
48
+ end
49
+
50
+ # Do the work
51
+ create_makefile(extension_name)
@@ -0,0 +1,5 @@
1
+ require 'ActiveMQ.so'
2
+
3
+ module ActiveMQ
4
+
5
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveMQ
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,111 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe ActiveMQ::ConnectionFactory do
5
+ describe "constants" do
6
+ it "should has a defined default_uri" do
7
+ ActiveMQ::ConnectionFactory.constants.should include("DEFAULT_URI")
8
+ end
9
+
10
+ it "should has a string as default_uri" do
11
+ ActiveMQ::ConnectionFactory::DEFAULT_URI.should be_instance_of(::String)
12
+ end
13
+ end
14
+
15
+ describe "new" do
16
+ it "should be possible create an instance whithout any parameters" do
17
+ amqcf = ActiveMQ::ConnectionFactory.new
18
+ amqcf.should_not be_nil
19
+ end
20
+
21
+ it "should be created an instance with default values" do
22
+ amqcf = ActiveMQ::ConnectionFactory.new
23
+ amqcf.broker_url.should == ActiveMQ::ConnectionFactory::DEFAULT_URI
24
+ amqcf.username.should be_empty
25
+ amqcf.password.should be_empty
26
+ amqcf.client_id.should be_empty
27
+ end
28
+
29
+ it "should be possible pass only broker_url argument to create an instance with other attributes with default values" do
30
+ amqcf = ActiveMQ::ConnectionFactory.new "url"
31
+ amqcf.broker_url.should == "url"
32
+ amqcf.username.should be_empty
33
+ amqcf.password.should be_empty
34
+ amqcf.client_id.should be_empty
35
+ end
36
+
37
+ it "should be possible pass broker_url and username arguments to create an instance with other attributes with default values" do
38
+ amqcf = ActiveMQ::ConnectionFactory.new "url", "username"
39
+ amqcf.broker_url.should == "url"
40
+ amqcf.username.should == "username"
41
+ amqcf.password.should be_empty
42
+ amqcf.client_id.should be_empty
43
+ end
44
+
45
+ it "should be possible pass broker_url, username and password arguments to create an instance" do
46
+ amqcf = ActiveMQ::ConnectionFactory.new "url", "username", "password"
47
+ amqcf.broker_url.should == "url"
48
+ amqcf.username.should == "username"
49
+ amqcf.password.should == "password"
50
+ amqcf.client_id.should be_empty
51
+ end
52
+ end
53
+
54
+ describe "change attributes" do
55
+ it "should be possible change broker_url attribute" do
56
+ amqcf = ActiveMQ::ConnectionFactory.new
57
+ amqcf.broker_url = "url"
58
+ amqcf.broker_url.should == "url"
59
+ end
60
+
61
+ it "should be possible change username attribute" do
62
+ amqcf = ActiveMQ::ConnectionFactory.new
63
+ amqcf.username = "username"
64
+ amqcf.username.should == "username"
65
+ end
66
+
67
+ it "should be possible change password attribute" do
68
+ amqcf = ActiveMQ::ConnectionFactory.new
69
+ amqcf.password = "password"
70
+ amqcf.password.should == "password"
71
+ end
72
+
73
+ it "should be possible change client_id attribute" do
74
+ amqcf = ActiveMQ::ConnectionFactory.new
75
+ amqcf.client_id = "client_id"
76
+ amqcf.client_id.should == "client_id"
77
+ end
78
+ end
79
+
80
+ describe "connection" do
81
+ it "should create connection using instance attributes" do
82
+ amqcf = ActiveMQ::ConnectionFactory.new BROKER_URL_TEST
83
+ conn = amqcf.create_connection
84
+ conn.client_id.should be_empty
85
+ conn.close
86
+ end
87
+
88
+ it "should create connection using given username and password" do
89
+ amqcf = ActiveMQ::ConnectionFactory.new BROKER_URL_TEST
90
+ conn = amqcf.create_connection_for("username", "password")
91
+ conn.client_id.should be_empty
92
+ conn.close
93
+ end
94
+
95
+ it "should create connection using given username and password and instance client_id" do
96
+ amqcf = ActiveMQ::ConnectionFactory.new BROKER_URL_TEST
97
+ amqcf.client_id = "TEST"
98
+ conn = amqcf.create_connection_for("username", "password")
99
+ conn.client_id.should == "TEST"
100
+ conn.close
101
+ end
102
+
103
+ it "should create connection using given username, password and client_id" do
104
+ amqcf = ActiveMQ::ConnectionFactory.new BROKER_URL_TEST
105
+ amqcf.client_id = "TEST"
106
+ conn = amqcf.create_connection_for_client("username", "password", "client_id")
107
+ conn.client_id.should == "client_id"
108
+ conn.close
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,52 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe ActiveMQ::Connection do
5
+
6
+ describe "change attributes" do
7
+ it "should be created with the same client_id from factory" do
8
+ amqcf = ActiveMQ::ConnectionFactory.new BROKER_URL_TEST
9
+ amqcf.client_id = "client_id_fac"
10
+
11
+ conn = amqcf.create_connection
12
+ conn.client_id.should == "client_id_fac"
13
+ conn.close
14
+ end
15
+
16
+ it "should be possible change client_id attribute" do
17
+ conn = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection
18
+ conn.client_id.should be_empty
19
+ conn.client_id = "client_id"
20
+ conn.client_id.should == "client_id"
21
+ conn.close
22
+ end
23
+ end
24
+
25
+ describe "close connection" do
26
+ it "should respond to close method" do
27
+ conn = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection
28
+ conn.should respond_to(:close)
29
+ conn.close
30
+ end
31
+
32
+ it "should respond to close method with no argumments" do
33
+ conn = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection
34
+ conn.close.should be_nil
35
+ conn.close
36
+ end
37
+ end
38
+
39
+ describe "session" do
40
+ it "should create session using default acknowledge_mode" do
41
+ conn = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection
42
+ conn.create_session.acknowledge_mode.should == ActiveMQ::Session::AcknowledgeMode::AUTO_ACKNOWLEDGE
43
+ conn.close
44
+ end
45
+
46
+ it "should create session using given acknowledge_mode" do
47
+ conn = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection
48
+ conn.create_session(ActiveMQ::Session::AcknowledgeMode::DUPS_OK_ACKNOWLEDGE).acknowledge_mode.should == ActiveMQ::Session::AcknowledgeMode::DUPS_OK_ACKNOWLEDGE
49
+ conn.close
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe ActiveMQ::DeliveryMode do
5
+ describe "constants" do
6
+ it "should has a defined PERSISTENT" do
7
+ ActiveMQ::DeliveryMode.constants.should include("PERSISTENT")
8
+ end
9
+
10
+ it "should PERSISTENT be equal to 0" do
11
+ ActiveMQ::DeliveryMode::PERSISTENT.should == 0
12
+ end
13
+
14
+ it "should has a defined NON_PERSISTENT" do
15
+ ActiveMQ::DeliveryMode.constants.should include("NON_PERSISTENT")
16
+ end
17
+
18
+ it "should NON_PERSISTENT be equal to 1" do
19
+ ActiveMQ::DeliveryMode::NON_PERSISTENT.should == 1
20
+ end
21
+ end
22
+
23
+ describe "new" do
24
+ it "should be possible create an instance whithout any parameters" do
25
+ delivery = ActiveMQ::DeliveryMode.new
26
+ delivery.should be_instance_of(ActiveMQ::DeliveryMode)
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,63 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe ActiveMQ::Destination do
5
+ describe "constants" do
6
+ it "should has a defined DestinationType" do
7
+ ActiveMQ::Destination.constants.should include("DestinationType")
8
+ end
9
+
10
+ it "should has a Class as DestinationType" do
11
+ ActiveMQ::Destination::DestinationType.should be_instance_of(::Class)
12
+ end
13
+
14
+ it "should has some constants in the class DestinationType" do
15
+ ActiveMQ::Destination::DestinationType.constants.should include_all(["TOPIC", "QUEUE", "TEMPORARY_TOPIC", "TEMPORARY_QUEUE"])
16
+ end
17
+ end
18
+
19
+ describe "destination_type" do
20
+ it "should create destination from type ActiveMQ::Destination::DestinationType::TOPIC" do
21
+ session = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
22
+ session.create_topic("TEST_SESSION").destination_type.should == ActiveMQ::Destination::DestinationType::TOPIC
23
+ end
24
+
25
+ it "should create destination from type ActiveMQ::Destination::DestinationType::QUEUE" do
26
+ session = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
27
+ session.create_queue("TEST_SESSION").destination_type.should == ActiveMQ::Destination::DestinationType::QUEUE
28
+ end
29
+
30
+ it "should create destination from type ActiveMQ::Destination::DestinationType::TEMPORARY_TOPIC" do
31
+ session = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
32
+ session.create_temporary_topic.destination_type.should == ActiveMQ::Destination::DestinationType::TEMPORARY_TOPIC
33
+ end
34
+
35
+ it "should create destination from type ActiveMQ::Destination::DestinationType::TEMPORARY_QUEUE" do
36
+ session = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
37
+ session.create_temporary_queue.destination_type.should == ActiveMQ::Destination::DestinationType::TEMPORARY_QUEUE
38
+ end
39
+ end
40
+
41
+ describe "name" do
42
+ it "should create topic destination with given name" do
43
+ session = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
44
+ session.create_topic("TEST_TOPIC").name.should == "TEST_TOPIC"
45
+ end
46
+
47
+ it "should create queue destination with given name" do
48
+ session = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
49
+ session.create_queue("TEST_QUEUE").name.should == "TEST_QUEUE"
50
+ end
51
+
52
+ it "should temporary topic respond to name" do
53
+ session = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
54
+ session.create_temporary_topic.should respond_to(:name)
55
+ end
56
+
57
+ it "should temporary queue respond to name" do
58
+ session = ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
59
+ session.create_temporary_queue.should respond_to(:name)
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,77 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe ActiveMQ::MessageProducer do
5
+
6
+ let :session do
7
+ ActiveMQ::ConnectionFactory.new(BROKER_URL_TEST).create_connection.create_session
8
+ end
9
+
10
+ let :producer do
11
+ session.create_producer(session.create_topic("TEST_MESSAGE_PRODUCER"))
12
+ end
13
+
14
+ describe "attributes" do
15
+ it "should respond to some attributes accessors methods" do
16
+ ActiveMQ::MessageProducer.instance_methods.should include_all(["time_to_live", "time_to_live=", "delivery_mode", "delivery_mode=", "priority", "priority=", "disable_message_time_stamp?", "disable_message_time_stamp=", "disable_message_id?", "disable_message_id="])
17
+ end
18
+
19
+ it "should have default time to live equal 0" do
20
+ producer.time_to_live.should == 0
21
+ end
22
+
23
+ it "should accept a interger as value for time to live attribute" do
24
+ producer.time_to_live = 5
25
+ producer.time_to_live.should == 5
26
+ end
27
+
28
+ it "should have default delivery mode equal ActiveMQ::DeliveryMode::PERSISTENT" do
29
+ producer.delivery_mode.should == ActiveMQ::DeliveryMode::PERSISTENT
30
+ end
31
+
32
+ it "should accept a interger as value for delivery mode attribute" do
33
+ producer.delivery_mode = ActiveMQ::DeliveryMode::NON_PERSISTENT
34
+ producer.delivery_mode.should == 1
35
+ end
36
+
37
+ it "should have default priority equal 4" do
38
+ producer.priority.should == 4
39
+ end
40
+
41
+ it "should accept a interger as value for priority attribute" do
42
+ producer.priority = 5
43
+ producer.priority.should == 5
44
+ end
45
+
46
+ it "should have default disable_message_time_stamp equal false" do
47
+ producer.disable_message_time_stamp?.should be_false
48
+ end
49
+
50
+ it "should accept a boolean as value for disable_message_time_stamp attribute" do
51
+ producer.disable_message_time_stamp = true
52
+ producer.disable_message_time_stamp?.should be_true
53
+ end
54
+
55
+ it "should have default disable_message_id equal false" do
56
+ producer.disable_message_id?.should be_false
57
+ end
58
+
59
+ it "should accept a boolean as value for disable_message_id attribute" do
60
+ producer.disable_message_id = true
61
+ producer.disable_message_id?.should be_true
62
+ end
63
+
64
+ end
65
+
66
+ describe "send message" do
67
+ it "should respond to some send message methods" do
68
+ ActiveMQ::MessageProducer.instance_methods.should include_all(["send_message"])
69
+ end
70
+
71
+ it "should be possible send a message" do
72
+ message = session.create_text_message "TEST_MESSAGE"
73
+ expect { producer.send_message(message) }.to_not raise_error
74
+ end
75
+
76
+ end
77
+ end