org.apache.activemq.artemis.core.server.ServerSession

Here are the examples of the java api class org.apache.activemq.artemis.core.server.ServerSession taken from open source projects.

1. ServerSessionImpl#addUniqueMetaData()

Project: activemq-artemis
File: ServerSessionImpl.java
@Override
public boolean addUniqueMetaData(String key, String data) {
    ServerSession sessionWithMetaData = server.lookupSession(key, data);
    if (sessionWithMetaData != null && sessionWithMetaData != this) {
        // There is a duplication of this property
        return false;
    } else {
        addMetaData(key, data);
        return true;
    }
}

2. ActiveMQServerImpl#lookupSession()

Project: activemq-artemis
File: ActiveMQServerImpl.java
@Override
public ServerSession lookupSession(String key, String value) {
    // getSessions is called here in a try to minimize locking the Server while this check is being done
    Set<ServerSession> allSessions = getSessions();
    for (ServerSession session : allSessions) {
        String metaValue = session.getMetaData(key);
        if (metaValue != null && metaValue.equals(value)) {
            return session;
        }
    }
    return null;
}

3. ActiveMQServerImpl#freezeConnections()

Project: activemq-artemis
File: ActiveMQServerImpl.java
/**
    * Freeze all connections.
    * <p>
    * If replicating, avoid freezing the replication connection. Helper method for
    * {@link #stop(boolean, boolean, boolean)}.
    */
private void freezeConnections() {
    activation.freezeConnections(remotingService);
    // after disconnecting all the clients close all the server sessions so any messages in delivery will be cancelled back to the queue
    for (ServerSession serverSession : sessions.values()) {
        try {
            serverSession.close(true);
        } catch (Exception e) {
            ActiveMQServerLogger.LOGGER.errorClosingSession(e);
        }
    }
}

4. MQTTConnectionManager#createServerSession()

Project: activemq-artemis
File: MQTTConnectionManager.java
/**
    * Creates an internal Server Session.
    *
    * @param username
    * @param password
    * @return
    * @throws Exception
    */
ServerSessionImpl createServerSession(String username, String password) throws Exception {
    String id = UUIDGenerator.getInstance().generateStringUUID();
    ActiveMQServer server = session.getServer();
    ServerSession serverSession = server.createSession(id, username, password, ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, session.getConnection(), MQTTUtil.SESSION_AUTO_COMMIT_SENDS, MQTTUtil.SESSION_AUTO_COMMIT_ACKS, MQTTUtil.SESSION_PREACKNOWLEDGE, MQTTUtil.SESSION_XA, null, session.getSessionCallback(), MQTTUtil.SESSION_AUTO_CREATE_QUEUE);
    return (ServerSessionImpl) serverSession;
}

5. TemporaryQueueTest#testBlockingWithTemporaryQueue()

Project: activemq-artemis
File: TemporaryQueueTest.java
@Test
public void testBlockingWithTemporaryQueue() throws Exception {
    AddressSettings setting = new AddressSettings().setAddressFullMessagePolicy(AddressFullMessagePolicy.BLOCK).setMaxSizeBytes(1024 * 1024);
    server.getAddressSettingsRepository().addMatch("TestAD", setting);
    ClientSessionFactory consumerCF = createSessionFactory(locator);
    ClientSession consumerSession = consumerCF.createSession(true, true);
    consumerSession.addMetaData("consumer", "consumer");
    consumerSession.createTemporaryQueue("TestAD", "Q1");
    consumerSession.createConsumer("Q1");
    consumerSession.start();
    final ClientProducerImpl prod = (ClientProducerImpl) session.createProducer("TestAD");
    final AtomicInteger errors = new AtomicInteger(0);
    final AtomicInteger msgs = new AtomicInteger(0);
    final int TOTAL_MSG = 1000;
    Thread t = new Thread() {

        @Override
        public void run() {
            try {
                for (int i = 0; i < TOTAL_MSG; i++) {
                    ClientMessage msg = session.createMessage(false);
                    msg.getBodyBuffer().writeBytes(new byte[1024]);
                    prod.send(msg);
                    msgs.incrementAndGet();
                }
            } catch (Throwable e) {
                e.printStackTrace();
                errors.incrementAndGet();
            }
            System.out.println("done");
        }
    };
    t.start();
    while (msgs.get() == 0) {
        Thread.sleep(100);
    }
    int blockedTime = 0;
    // https://issues.apache.org/jira/browse/ARTEMIS-368
    while (t.isAlive() && errors.get() == 0 && (!prod.getProducerCredits().isBlocked() || blockedTime < 60)) {
        if (prod.getProducerCredits().isBlocked()) {
            blockedTime++;
        } else {
            blockedTime = 0;
        }
        Thread.sleep(100);
    }
    assertEquals(0, errors.get());
    ClientSessionFactory newConsumerCF = createSessionFactory(locator);
    ClientSession newConsumerSession = newConsumerCF.createSession(true, true);
    newConsumerSession.createTemporaryQueue("TestAD", "Q2");
    ClientConsumer newConsumer = newConsumerSession.createConsumer("Q2");
    newConsumerSession.start();
    int toReceive = TOTAL_MSG - msgs.get();
    for (ServerSession sessionIterator : server.getSessions()) {
        if (sessionIterator.getMetaData("consumer") != null) {
            System.out.println("Failing session");
            ServerSessionImpl impl = (ServerSessionImpl) sessionIterator;
            impl.getRemotingConnection().fail(new ActiveMQDisconnectedException("failure e"));
        }
    }
    int secondReceive = 0;
    ClientMessage msg = null;
    while (secondReceive < toReceive && (msg = newConsumer.receive(5000)) != null) {
        msg.acknowledge();
        secondReceive++;
    }
    assertNull(newConsumer.receiveImmediate());
    assertEquals(toReceive, secondReceive);
    t.join();
}

6. InterruptedLargeMessageTest#testInterruptLargeMessageSend()

Project: activemq-artemis
File: InterruptedLargeMessageTest.java
@Test
public void testInterruptLargeMessageSend() throws Exception {
    ClientSession session = null;
    LargeMessageTestInterceptorIgnoreLastPacket.clearInterrupt();
    ActiveMQServer server = createServer(true, isNetty());
    server.getConfiguration().getIncomingInterceptorClassNames().add(LargeMessageTestInterceptorIgnoreLastPacket.class.getName());
    server.start();
    locator.setBlockOnNonDurableSend(false).setBlockOnDurableSend(false);
    ClientSessionFactory sf = createSessionFactory(locator);
    session = sf.createSession(false, true, true);
    session.createQueue(ADDRESS, ADDRESS, true);
    ClientProducer producer = session.createProducer(ADDRESS);
    Message clientFile = createLargeClientMessageStreaming(session, LARGE_MESSAGE_SIZE, true);
    clientFile.setExpiration(System.currentTimeMillis());
    producer.send(clientFile);
    Thread.sleep(500);
    for (ServerSession srvSession : server.getSessions()) {
        ((ServerSessionImpl) srvSession).clearLargeMessage();
    }
    server.stop(false);
    ActiveMQTestBase.forceGC();
    server.start();
    server.stop();
    validateNoFilesOnLargeDir();
}

7. ConcurrentDeliveryCancelTest#testConcurrentCancels()

Project: activemq-artemis
File: ConcurrentDeliveryCancelTest.java
@Test
@BMRules(rules = { @BMRule(name = "enterCancel-holdThere", targetClass = "org.apache.activemq.artemis.core.server.impl.ServerConsumerImpl", targetMethod = "close", targetLocation = "ENTRY", action = "org.apache.activemq.artemis.tests.extras.byteman.ConcurrentDeliveryCancelTest.enterCancel();") })
public void testConcurrentCancels() throws Exception {
    System.out.println(server.getConfiguration().getJournalLocation().toString());
    server.getAddressSettingsRepository().clear();
    AddressSettings settings = new AddressSettings();
    settings.setMaxDeliveryAttempts(-1);
    server.getAddressSettingsRepository().addMatch("#", settings);
    ActiveMQConnectionFactory cf = ActiveMQJMSClient.createConnectionFactory("tcp://localhost:61616", "test");
    cf.setReconnectAttempts(0);
    cf.setRetryInterval(10);
    System.out.println(".....");
    for (ServerSession srvSess : server.getSessions()) {
        System.out.println(srvSess);
    }
    String queueName = RandomUtil.randomString();
    Queue queue = createQueue(queueName);
    int numberOfMessages = 10000;
    {
        Connection connection = cf.createConnection();
        Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
        MessageProducer producer = session.createProducer(queue);
        for (int i = 0; i < numberOfMessages; i++) {
            TextMessage msg = session.createTextMessage("message " + i);
            msg.setIntProperty("i", i);
            producer.send(msg);
        }
        session.commit();
        connection.close();
    }
    for (int i = 0; i < 100; i++) {
        XAConnectionFactory xacf = ActiveMQJMSClient.createConnectionFactory("tcp://localhost:61616", "test");
        final XAConnection connection = xacf.createXAConnection();
        final XASession theSession = connection.createXASession();
        ((ActiveMQSession) theSession).getCoreSession().addMetaData("theSession", "true");
        connection.start();
        final MessageConsumer consumer = theSession.createConsumer(queue);
        XidImpl xid = newXID();
        theSession.getXAResource().start(xid, XAResource.TMNOFLAGS);
        // I'm setting a small timeout just because I'm lazy to call end myself
        theSession.getXAResource().setTransactionTimeout(1);
        for (int msg = 0; msg < 11; msg++) {
            Assert.assertNotNull(consumer.receiveNoWait());
        }
        System.out.println(".....");
        final List<ServerSession> serverSessions = new LinkedList<>();
        // We will force now the failure simultaneously from several places
        for (ServerSession srvSess : server.getSessions()) {
            if (srvSess.getMetaData("theSession") != null) {
                System.out.println(srvSess);
                serverSessions.add(srvSess);
            }
        }
        // from Transactional reaper
        resetLatches(2);
        List<Thread> threads = new LinkedList<>();
        threads.add(new Thread("ConsumerCloser") {

            @Override
            public void run() {
                try {
                    System.out.println(Thread.currentThread().getName() + " closing consumer");
                    consumer.close();
                    System.out.println(Thread.currentThread().getName() + " closed consumer");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        threads.add(new Thread("SessionCloser") {

            @Override
            public void run() {
                for (ServerSession sess : serverSessions) {
                    System.out.println("Thread " + Thread.currentThread().getName() + " starting");
                    try {
                        // A session.close could sneak in through failover or some other scenarios.
                        // a call to RemotingConnection.fail wasn't replicating the issue.
                        // I needed to call Session.close() directly to replicate what was happening in production
                        sess.close(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread " + Thread.currentThread().getName() + " done");
                }
            }
        });
        for (Thread t : threads) {
            t.start();
        }
        Assert.assertTrue(latchEnter.await(10, TimeUnit.MINUTES));
        latchFlag.countDown();
        for (Thread t : threads) {
            t.join(5000);
            Assert.assertFalse(t.isAlive());
        }
        connection.close();
    }
    Connection connection = cf.createConnection();
    try {
        connection.setClientID("myID");
        // I am too lazy to call end on all the transactions
        Thread.sleep(5000);
        connection.start();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageConsumer consumer = session.createConsumer(queue);
        HashMap<Integer, AtomicInteger> mapCount = new HashMap<>();
        while (true) {
            TextMessage message = (TextMessage) consumer.receiveNoWait();
            if (message == null) {
                break;
            }
            Integer value = message.getIntProperty("i");
            AtomicInteger count = mapCount.get(value);
            if (count == null) {
                count = new AtomicInteger(0);
                mapCount.put(message.getIntProperty("i"), count);
            }
            count.incrementAndGet();
        }
        boolean failed = false;
        for (int i = 0; i < numberOfMessages; i++) {
            AtomicInteger count = mapCount.get(i);
            if (count == null) {
                System.out.println("Message " + i + " not received");
                failed = true;
            } else if (count.get() > 1) {
                System.out.println("Message " + i + " received " + count.get() + " times");
                failed = true;
            }
        }
        Assert.assertFalse("test failed, look at the system.out of the test for more information", failed);
    } finally {
        connection.close();
    }
}

8. ActiveMQServerImpl#closeAllServerSessions()

Project: activemq-artemis
File: ActiveMQServerImpl.java
/**
    * We close all the exception in an attempt to let any pending IO to finish to avoid scenarios
    * where the send or ACK got to disk but the response didn't get to the client It may still be
    * possible to have this scenario on a real failure (without the use of XA) But at least we will
    * do our best to avoid it on regular shutdowns
    */
private void closeAllServerSessions(final boolean criticalIOError) {
    if (state != SERVER_STATE.STOPPING) {
        return;
    }
    for (ServerSession session : sessions.values()) {
        try {
            session.close(true);
        } catch (Exception e) {
            ActiveMQServerLogger.LOGGER.errorClosingSessionsWhileStoppingServer(e);
        }
    }
    if (!criticalIOError) {
        for (ServerSession session : sessions.values()) {
            try {
                session.waitContextCompletion();
            } catch (Exception e) {
                ActiveMQServerLogger.LOGGER.errorClosingSessionsWhileStoppingServer(e);
            }
        }
    }
}

9. ActiveMQServerControlImpl#listTargetAddresses()

Project: activemq-artemis
File: ActiveMQServerControlImpl.java
public String[] listTargetAddresses(final String sessionID) {
    ServerSession session = server.getSessionByID(sessionID);
    if (session != null) {
        return session.getTargetAddresses();
    }
    return new String[0];
}

10. ActiveMQServerControlImpl#listProducersInfoAsJSON()

Project: activemq-artemis
File: ActiveMQServerControlImpl.java
/* (non-Javadoc)
   * @see org.apache.activemq.artemis.api.core.management.ActiveMQServerControl#listProducersInfoAsJSON()
   */
@Override
public String listProducersInfoAsJSON() throws Exception {
    JSONArray producers = new JSONArray();
    for (ServerSession session : server.getSessions()) {
        session.describeProducersInfo(producers);
    }
    return producers.toString();
}

11. JMSServerControlImpl#getSessionCreationTime()

Project: activemq-artemis
File: JMSServerControlImpl.java
@Override
public String getSessionCreationTime(String sessionID) throws Exception {
    ServerSession session = server.getActiveMQServer().getSessionByID(sessionID);
    if (session != null) {
        return String.valueOf(session.getCreationTime());
    }
    return null;
}

12. JMSServerControlImpl#getLastSentMessageID()

Project: activemq-artemis
File: JMSServerControlImpl.java
@Override
public String getLastSentMessageID(String sessionID, String address) throws Exception {
    ServerSession session = server.getActiveMQServer().getSessionByID(sessionID);
    if (session != null) {
        return session.getLastSentMessageID(address);
    }
    return null;
}