This closes #1764
This commit is contained in:
commit
9e68d84645
|
@ -195,7 +195,9 @@ public class ActiveMQConnectionFactory extends JNDIStorable implements Connectio
|
||||||
serverLocator = locatorParser.newObject(uri, null);
|
serverLocator = locatorParser.newObject(uri, null);
|
||||||
parser.populateObject(uri, this);
|
parser.populateObject(uri, this);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new InvalidObjectException(e.getMessage());
|
InvalidObjectException ex = new InvalidObjectException(e.getMessage());
|
||||||
|
ex.initCause(e);
|
||||||
|
throw ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -231,7 +231,11 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
|
||||||
*/
|
*/
|
||||||
private SimpleString simpleAddress;
|
private SimpleString simpleAddress;
|
||||||
|
|
||||||
private final TYPE type;
|
private final boolean temporary;
|
||||||
|
|
||||||
|
private final boolean queue;
|
||||||
|
|
||||||
|
private transient TYPE thetype;
|
||||||
|
|
||||||
private final transient ActiveMQSession session;
|
private final transient ActiveMQSession session;
|
||||||
|
|
||||||
|
@ -242,9 +246,13 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
|
||||||
final ActiveMQSession session) {
|
final ActiveMQSession session) {
|
||||||
this.simpleAddress = SimpleString.toSimpleString(address);
|
this.simpleAddress = SimpleString.toSimpleString(address);
|
||||||
|
|
||||||
this.type = type;
|
this.thetype = type;
|
||||||
|
|
||||||
this.session = session;
|
this.session = session;
|
||||||
|
|
||||||
|
this.temporary = TYPE.isTemporary(type);
|
||||||
|
|
||||||
|
this.queue = TYPE.isQueue(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ActiveMQDestination(final SimpleString address,
|
protected ActiveMQDestination(final SimpleString address,
|
||||||
|
@ -252,9 +260,13 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
|
||||||
final ActiveMQSession session) {
|
final ActiveMQSession session) {
|
||||||
this.simpleAddress = address;
|
this.simpleAddress = address;
|
||||||
|
|
||||||
this.type = type;
|
this.thetype = type;
|
||||||
|
|
||||||
this.session = session;
|
this.session = session;
|
||||||
|
|
||||||
|
this.temporary = TYPE.isTemporary(type);
|
||||||
|
|
||||||
|
this.queue = TYPE.isQueue(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAddress(String address) {
|
public void setAddress(String address) {
|
||||||
|
@ -283,7 +295,7 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isQueue() {
|
public boolean isQueue() {
|
||||||
return TYPE.isQueue(type);
|
return queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public --------------------------------------------------------
|
// Public --------------------------------------------------------
|
||||||
|
@ -301,11 +313,26 @@ public class ActiveMQDestination extends JNDIStorable implements Destination, Se
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isTemporary() {
|
public boolean isTemporary() {
|
||||||
return TYPE.isTemporary(type);
|
return temporary;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TYPE getType() {
|
public TYPE getType() {
|
||||||
return type;
|
if (thetype == null) {
|
||||||
|
if (temporary) {
|
||||||
|
if (isQueue()) {
|
||||||
|
thetype = TYPE.TEMP_QUEUE;
|
||||||
|
} else {
|
||||||
|
thetype = TYPE.TEMP_TOPIC;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isQueue()) {
|
||||||
|
thetype = TYPE.QUEUE;
|
||||||
|
} else {
|
||||||
|
thetype = TYPE.TOPIC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return thetype;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -138,7 +138,7 @@ public class ArtemisDependencyScanPlugin extends ArtemisAbstractPlugin {
|
||||||
private void setVariable(String classPathGenerated) {
|
private void setVariable(String classPathGenerated) {
|
||||||
if (variableName != null) {
|
if (variableName != null) {
|
||||||
project.getProperties().setProperty(variableName, classPathGenerated);
|
project.getProperties().setProperty(variableName, classPathGenerated);
|
||||||
getLog().info("dependency-scan setting: " + variableName + "=" + classPathGenerated);
|
getLog().info("dependency-scan setting: -D" + variableName + "=\"" + classPathGenerated + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -275,6 +275,11 @@
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
<version>1.7.5</version>
|
<version>1.7.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.marshalling</groupId>
|
||||||
|
<artifactId>jboss-marshalling-river</artifactId>
|
||||||
|
<version>2.0.2.Final</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -383,6 +388,7 @@
|
||||||
<arg>org.apache.activemq:artemis-amqp-protocol:1.5.5</arg>
|
<arg>org.apache.activemq:artemis-amqp-protocol:1.5.5</arg>
|
||||||
<arg>org.apache.activemq:artemis-hornetq-protocol:1.5.5</arg>
|
<arg>org.apache.activemq:artemis-hornetq-protocol:1.5.5</arg>
|
||||||
<arg>org.codehaus.groovy:groovy-all:${groovy.version}</arg>
|
<arg>org.codehaus.groovy:groovy-all:${groovy.version}</arg>
|
||||||
|
<arg>org.jboss.marshalling:jboss-marshalling-river:2.0.2.Final</arg>
|
||||||
</libListWithDeps>
|
</libListWithDeps>
|
||||||
<libList>
|
<libList>
|
||||||
<arg>org.apache.activemq.tests:compatibility-tests:${project.version}</arg>
|
<arg>org.apache.activemq.tests:compatibility-tests:${project.version}</arg>
|
||||||
|
|
|
@ -98,6 +98,13 @@ public class GroovyRun {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void assertFalse(boolean value) {
|
||||||
|
if (value) {
|
||||||
|
throw new RuntimeException("Expected false");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void assertEquals(Object value1, Object value2) {
|
public static void assertEquals(Object value1, Object value2) {
|
||||||
if (!value1.equals(value2)) {
|
if (!value1.equals(value2)) {
|
||||||
throw new RuntimeException(value1 + "!=" + value2);
|
throw new RuntimeException(value1 + "!=" + value2);
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
package clients
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Create a client connection factory
|
||||||
|
|
||||||
|
import org.apache.activemq.artemis.tests.compatibility.GroovyRun
|
||||||
|
import org.jboss.marshalling.Marshaller
|
||||||
|
import org.jboss.marshalling.MarshallerFactory
|
||||||
|
import org.jboss.marshalling.Marshalling
|
||||||
|
import org.jboss.marshalling.MarshallingConfiguration
|
||||||
|
import org.jboss.marshalling.Unmarshaller
|
||||||
|
|
||||||
|
import javax.jms.*;
|
||||||
|
import org.apache.activemq.artemis.jms.client.*
|
||||||
|
|
||||||
|
|
||||||
|
file = arg[0]
|
||||||
|
method = arg[1]
|
||||||
|
System.out.println("File::" + file);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Get the factory for the "river" marshalling protocol
|
||||||
|
final MarshallerFactory factory = Marshalling.getProvidedMarshallerFactory("river");
|
||||||
|
|
||||||
|
// Create a configuration
|
||||||
|
final MarshallingConfiguration configuration = new MarshallingConfiguration();
|
||||||
|
// Use version 3
|
||||||
|
configuration.setVersion(3);
|
||||||
|
|
||||||
|
if (method.equals("write")) {
|
||||||
|
cf = new ActiveMQConnectionFactory("tcp://localhost:61616?confirmationWindowSize=1048576&blockOnDurableSend=false");
|
||||||
|
queue = new ActiveMQQueue("queue");
|
||||||
|
topic = new ActiveMQTopic("topic")
|
||||||
|
temporary = ActiveMQDestination.createTemporaryQueue("whatever")
|
||||||
|
temporaryTopic = ActiveMQDestination.createTemporaryTopic("whatever")
|
||||||
|
|
||||||
|
Marshaller marshaller = factory.createMarshaller(configuration)
|
||||||
|
FileOutputStream fileOutputStream = new FileOutputStream(file)
|
||||||
|
marshaller.start(Marshalling.createByteOutput(fileOutputStream));
|
||||||
|
marshaller.writeObject(cf);
|
||||||
|
marshaller.writeObject(queue)
|
||||||
|
marshaller.writeObject(topic)
|
||||||
|
marshaller.writeObject(temporary)
|
||||||
|
marshaller.writeObject(temporaryTopic)
|
||||||
|
marshaller.finish()
|
||||||
|
fileOutputStream.close();
|
||||||
|
} else {
|
||||||
|
Unmarshaller unmarshaller = factory.createUnmarshaller(configuration)
|
||||||
|
FileInputStream inputfile = new FileInputStream(file)
|
||||||
|
unmarshaller.start(Marshalling.createByteInput(inputfile))
|
||||||
|
cf = unmarshaller.readObject();
|
||||||
|
queue = unmarshaller.readObject()
|
||||||
|
topic = unmarshaller.readObject()
|
||||||
|
temporary = unmarshaller.readObject()
|
||||||
|
temporaryTopic = unmarshaller.readObject()
|
||||||
|
}
|
||||||
|
|
||||||
|
GroovyRun.assertTrue(!cf.getServerLocator().isBlockOnDurableSend());
|
||||||
|
GroovyRun.assertEquals(1048576, cf.getServerLocator().getConfirmationWindowSize());
|
||||||
|
|
||||||
|
Connection connection = cf.createConnection();
|
||||||
|
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
|
||||||
|
ActiveMQDestination queueDest = (ActiveMQDestination)queue;
|
||||||
|
GroovyRun.assertTrue(queueDest.isQueue())
|
||||||
|
GroovyRun.assertFalse(queueDest.isTemporary())
|
||||||
|
|
||||||
|
ActiveMQDestination topicDest = (ActiveMQDestination)topic
|
||||||
|
GroovyRun.assertFalse(topicDest.isQueue())
|
||||||
|
GroovyRun.assertFalse(queueDest.isTemporary())
|
||||||
|
|
||||||
|
ActiveMQDestination temporaryDest = (ActiveMQDestination)temporary
|
||||||
|
GroovyRun.assertTrue(temporaryDest.isQueue())
|
||||||
|
GroovyRun.assertTrue(temporaryDest.isTemporary())
|
||||||
|
|
||||||
|
temporaryDest = (ActiveMQDestination)temporaryTopic
|
||||||
|
GroovyRun.assertFalse(temporaryDest.isQueue())
|
||||||
|
GroovyRun.assertTrue(temporaryDest.isTemporary())
|
||||||
|
|
||||||
|
MessageConsumer consumer = session.createConsumer(queue);
|
||||||
|
MessageProducer topicProducer = session.createProducer(topic)
|
||||||
|
connection.close();
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,9 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.activemq.artemis.utils.FileUtil;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.Parameterized;
|
import org.junit.runners.Parameterized;
|
||||||
|
@ -43,7 +46,7 @@ import static org.apache.activemq.artemis.tests.compatibility.GroovyRun.SNAPSHOT
|
||||||
* Run->Edit Configuration->Add ArtemisMeshTest and add your properties.
|
* Run->Edit Configuration->Add ArtemisMeshTest and add your properties.
|
||||||
*/
|
*/
|
||||||
@RunWith(Parameterized.class)
|
@RunWith(Parameterized.class)
|
||||||
public class SerializationTest extends ServerBaseTest {
|
public class SerializationTest extends VersionedBaseTest {
|
||||||
|
|
||||||
// this will ensure that all tests in this class are run twice,
|
// this will ensure that all tests in this class are run twice,
|
||||||
// once with "true" passed to the class' constructor and once with "false"
|
// once with "true" passed to the class' constructor and once with "false"
|
||||||
|
@ -60,7 +63,7 @@ public class SerializationTest extends ServerBaseTest {
|
||||||
// combinations.add(new Object[]{SNAPSHOT, ONE_FIVE, ONE_FIVE});
|
// combinations.add(new Object[]{SNAPSHOT, ONE_FIVE, ONE_FIVE});
|
||||||
// combinations.add(new Object[]{ONE_FIVE, ONE_FIVE, ONE_FIVE});
|
// combinations.add(new Object[]{ONE_FIVE, ONE_FIVE, ONE_FIVE});
|
||||||
|
|
||||||
combinations.addAll(combinatory(new Object[]{SNAPSHOT}, new Object[]{ONE_FIVE, SNAPSHOT}, new Object[]{ONE_FIVE, SNAPSHOT}));
|
combinations.addAll(combinatory(new Object[]{null}, new Object[]{ONE_FIVE, SNAPSHOT}, new Object[]{ONE_FIVE, SNAPSHOT}));
|
||||||
return combinations;
|
return combinations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,12 +71,35 @@ public class SerializationTest extends ServerBaseTest {
|
||||||
super(server, sender, receiver);
|
super(server, sender, receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void beforeTest() throws Throwable {
|
||||||
|
FileUtil.deleteDirectory(serverFolder.getRoot());
|
||||||
|
serverFolder.getRoot().mkdirs();
|
||||||
|
setVariable(senderClassloader, "persistent", false);
|
||||||
|
startServer(serverFolder.getRoot(), senderClassloader, "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void afterTest() {
|
||||||
|
try {
|
||||||
|
stopServer(senderClassloader);
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
ignored.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSerializeFactory() throws Throwable {
|
public void testSerializeFactory() throws Throwable {
|
||||||
File file = serverFolder.newFile("objects.ser");
|
File file = serverFolder.newFile("objects.ser");
|
||||||
file.mkdirs();
|
callScript(senderClassloader, "serial/serial.groovy", file.getAbsolutePath(), "write");
|
||||||
callScript(senderClassloader, "serial/serial.groovy", file.getAbsolutePath(), "write");
|
callScript(receiverClassloader, "serial/serial.groovy", file.getAbsolutePath(), "read");
|
||||||
callScript(receiverClassloader, "serial/serial.groovy", file.getAbsolutePath(), "read");
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJBMSerializeFactory() throws Throwable {
|
||||||
|
File file = serverFolder.newFile("objectsjbm.ser");
|
||||||
|
callScript(senderClassloader, "serial/jbmserial.groovy", file.getAbsolutePath(), "write");
|
||||||
|
callScript(receiverClassloader, "serial/jbmserial.groovy", file.getAbsolutePath(), "read");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue