Как я могу сделать поток реестра JNDI безопасным? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть класс, который динамически создает верблюжьи маршруты.Ранее он создавал маршруты через простой цикл, но теперь я хочу убедиться, что все маршруты запускаются одновременно.Для этого я использовал FutureTask.Теперь я получил исключение:

java.lang.UnsupportedOperationException: JBAS011859: Naming context is read-only

В классе CreateCamelRoute используется JNDI реестр.всякий раз, когда пытается привязать объект к этому, он выдает исключение.Как сделать JNDI поток реестра безопасным?

public StartRoutes(){
           List<DestinationTransport> transport = findAll();

            FutureTask[] randomNumberTasks = new FutureTask[transport.size()];

            for (int i = 0; i < transport.size(); i++) {
                Callable callable = new CallableExampleDT(transport.get(i));

                randomNumberTasks[i] = new FutureTask(callable);

                Thread t = new Thread(randomNumberTasks[i]);
                t.start();
            }

            for (int i = 0; i < transport.size(); i++) {
                System.out.println(randomNumberTasks[i].get());
                messages.add((String) randomNumberTasks[i].get());
            }
        }
}

CallableExampleDT

public class CallableExampleDT implements Callable<Object> {
    private final Object transport;

    public CallableExampleDT(Object transport) {
       this.transport = transport;
    }

public synchronized Object call() throws Exception {

    String status = "";
    DestinationTransport t= (DestinationTransport) transport;
    try {
            route.createRoute(t);
    } catch (Exception e) {
        e.printStackTrace();
    }

    Thread.sleep(5000);


    if (route.checkRoute(t.id()))
        status= LoggingMessage.STARTED;
    else
        status= LoggingMessage.IS_STOPPED;

    return status;
}

AsyncCamelDynamicFTPRoute

public class AsyncCamelDynamicFTPRoute{

    DefaultCamelContext defaultCamelContext = null;

    private CamelContext context = null;

    JndiRegistry jndi = new JndiRegistry();

    public synchronized void createRoute(Object object) throws ApplicationException {
        DestinationTransport dt= (DestinationTransport) object;
        String destinationTransport= dt.id();


        if(Objects.isNull(jndi.lookupByName("DYNAMIC_QUEUES_"+dt.getDestinationTransport()))){
            defaultCamelContext = new DefaultCamelContext();
            defaultCamelContext.setName("DYNAMIC_QUEUES_"+dt.getDestinationTransport());

            //getting exception here, while trying to bind
            jndi.bind("DYNAMIC_QUEUES_"+dt.getDestinationTransport(), defaultCamelContext);

        }
        else {

                defaultCamelContext = (DefaultCamelContext) jndi.lookup("DYNAMIC_QUEUES_"+dt.getDestinationTransport());

        }
        context= defaultCamelContext;

        context.getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");

            context.addRoutes(new RouteBuilder() {
                    /**Code for creating route**/
           }

      context.start();

 }

Журнал

ERROR [stderr] (Thread-89) java.lang.UnsupportedOperationException: JBAS011859: Naming context is read-only
01:26:57,536 ERROR [stderr] (Thread-89)     at org.jboss.as.naming.WritableServiceBasedNamingStore.requireOwner(WritableServiceBasedNamingStore.java:161)
01:26:57,536 ERROR [stderr] (Thread-89)     at org.jboss.as.naming.WritableServiceBasedNamingStore.bind(WritableServiceBasedNamingStore.java:66)
01:26:57,536 ERROR [stderr] (Thread-89)     at org.jboss.as.naming.NamingContext.bind(NamingContext.java:253)
01:26:57,537 ERROR [stderr] (Thread-89)     at org.jboss.as.naming.InitialContext$DefaultInitialContext.bind(InitialContext.java:260)
01:26:57,537 ERROR [stderr] (Thread-89)     at org.jboss.as.naming.NamingContext.bind(NamingContext.java:262)
01:26:57,537 ERROR [stderr] (Thread-89)     at javax.naming.InitialContext.bind(InitialContext.java:425)
01:26:57,537 ERROR [stderr] (Thread-89)     at javax.naming.InitialContext.bind(InitialContext.java:425)
01:26:57,537 ERROR [stderr] (Thread-89)     at org.apache.camel.impl.JndiRegistry.bind(JndiRegistry.java:124)
01:26:57,537 ERROR [stderr] (Thread-89)     at com.sial.integration.routing.AsyncCamelDynamicFTPRoute.createRoute(AsyncCamelDynamicFTPRoute.java:91)
01:26:57,537 ERROR [stderr] (Thread-89)     at com.sial.integration.routing.AsyncCamelDynamicFTPRoute$Proxy$_$$_WeldClientProxy.createRoute(Unknown Source)
01:26:57,537 ERROR [stderr] (Thread-89)     at com.sial.integration.api.CallableExampleDT.call(CallableExampleDT.java:27)
01:26:57,537 ERROR [stderr] (Thread-89)     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
01:26:57,537 ERROR [stderr] (Thread-89)     at java.lang.Thread.run(Thread.java:745)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...