Package nexj.core.meta.integration.channel.queueing

Source Code of nexj.core.meta.integration.channel.queueing.XMLObjectQueueMetadataLoader

package nexj.core.meta.integration.channel.queueing;

import org.w3c.dom.Element;

import nexj.core.meta.Component;
import nexj.core.meta.PrimitivePropertyInitializer;
import nexj.core.meta.integration.Channel;
import nexj.core.meta.integration.ChannelType;
import nexj.core.meta.integration.XMLIntegrationMetadataLoader;
import nexj.core.meta.xml.XMLMetadataHelper;
import nexj.core.meta.xml.XMLMetadataLoader;

/**
* The loader for ObjectQueueChannel and connections
*/
public class XMLObjectQueueMetadataLoader implements XMLIntegrationMetadataLoader
{

   /**
    * @see nexj.core.meta.integration.XMLIntegrationMetadataLoader#loadChannel(org.w3c.dom.Element, java.lang.String, nexj.core.meta.integration.ChannelType, nexj.core.meta.xml.XMLMetadataLoader)
    */
   public Channel loadChannel(Element element, String sName, ChannelType type, XMLMetadataLoader loader)
   {
      final ObjectQueue channel = new ObjectQueue(sName);

      channel.setType(type);
      loader.loadChannel(element, channel);

      return channel;
   }

   /**
    * @see nexj.core.meta.integration.XMLIntegrationMetadataLoader#loadConnection(org.w3c.dom.Element, nexj.core.meta.integration.Channel, nexj.core.meta.xml.XMLMetadataLoader)
    */
   public void loadConnection(Element element, Channel channel, final XMLMetadataLoader loader)
   {
      final ObjectQueue msg = (ObjectQueue)channel;

      if (msg.isSendable())
      {
         Component component = new Component("ObjectSender." + channel.getName(), channel.getType().getSender(), Component.CONTEXT);
         loader.getMetadata().addComponent(component);
         msg.setSender(component);
         component.addPrimitivePropertyInitializer("channel", channel);
      }

      if (msg.isReceivable())
      {
         Component component = new Component("ObjectReceiver." + channel.getName(), channel.getType().getReceiver(), Component.SINGLETON);

         loader.addSingletonFixup(component);
         msg.setReceiver(component);
         component.setMetadata(loader.getMetadata());
         component.addPrimitivePropertyInitializer("channel", channel);

         final PrimitivePropertyInitializer dispatcherInitializer = component.addPrimitivePropertyInitializer("dispatcherComponent", null);

         loader.addComponentFixup(new XMLMetadataHelper.ContextFixup(loader.getHelper())
         {
            public void fixup()
            {
               // Use findComponent, as "System.ObjectQueueDispatcher" does not exist if core repository is not used.
               // The component instance can't be recovered at this point, because the metadata may not be sufficiently loaded
               // for the initializer to succeed.
               dispatcherInitializer.setValue(loader.getMetadata().findComponent("System.ObjectQueueDispatcher"));
            }
         });
      }
   }

}
TOP

Related Classes of nexj.core.meta.integration.channel.queueing.XMLObjectQueueMetadataLoader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.