Package nexj.core.meta.integration.service

Examples of nexj.core.meta.integration.service.Service


   /**
    * Starts the service flow.
    */
   public Instance invoke(Metaclass metaclass, String sName, Object message, String sOutput, Pair args, ActionContext actx) throws IntegrationException
   {
      Service service = (Service)getFlow(sName);
      boolean bSecure = m_context.isSecure();

      if (bSecure && service.getPrivilege() != null &&
         !m_context.getPrivilegeSet().contains(service.getPrivilege()))
      {
         throw new SecurityViolationException("err.integration.service.unauthorized",
            new Object[]{service.getFullName()});
      }

      if (service.getInterface() != null)
      {
         MessageTable table = service.getInterface().getRequestTable();
        
         if (!(message instanceof TransferObject) ||
            table.getMessageCount() != 0 && table.findMessage(((TransferObject)message).getClassName()) == null)
         {
            throw new IntegrationException("err.integration.service.inputMessage", new Object[]{service.getFullName()});
         }
      }

      if (s_logger.isDebugEnabled())
      {
         s_logger.debug("Invoking " + service);
      }

      Instance instance = null;

      try
      {
         m_context.setSecure(false);
         instance = new Instance(metaclass, m_context);

         State state = new State(service, true);

         state.setReservedValue(0, instance);
         state.setReservedValue(1, state);
         state.setValue(Service.OUTPUT, sOutput);
         state.setToken(service, message);

         int i = 0;

         for (Pair pair = args; pair != null; pair = pair.getNext())
         {
            if (i >= service.getArgumentCount())
            {
               i = -1;
               break;
            }
           
            state.setValue(service.getArgument(i++), pair.getHead());
         }

         if (i != service.getArgumentCount())
         {
            throw new IntegrationException("err.integration.service.argCount",
               new Object[]{Primitive.createInteger(Pair.length(args)),
                  Primitive.createInteger(service.getArgumentCount())});
         }

         instance.setNew();
         instance.setValue("name", service.getName());
         instance.setValue("version", Primitive.createInteger(service.getVersion()));
         instance.setValue("oid", EMPTY_BINARY);
         instance.setValue("class", "");
         instance.setValue("local", GUIDUtil.generateGUID());
         instance.setValue("object", null);
         instance.setValue("state", state);
View Full Code Here


    * @see nexj.core.runtime.sys.SysWorkflow#complete(nexj.core.runtime.Instance, nexj.core.runtime.ActionContext)
    */
   public void complete(Instance instance, ActionContext actx)
   {
      State state = (State)instance.getValue("state");
      Service service = (Service)state.getFlow();
      String sChannel = (String)state.getValue(Service.OUTPUT);
      Channel channel = (StringUtil.isEmpty(sChannel)) ? null : m_context.getMetadata().getChannel(sChannel);
      Object value = state.getToken(null);

      if (s_logger.isDumpEnabled())
      {
         s_logger.dump("Output message:");
         s_logger.dump(value);
      }
     
      if (service.getInterface() != null)
      {
         MessageTable responseTable = service.getInterface().getResponseTable();
         Message message = null;

         if (responseTable.getMessageCount() != 0)
         {
            if (!(value instanceof TransferObject) ||
               (message = responseTable.findMessage(((TransferObject)value).getClassName())) == null)
            {
               throw new IntegrationException("err.integration.service.outputMessage", new Object[]{service.getFullName()});
            }

            if (message.getFormat() == null)
            {
               message = null;
            }
         }
         else if (responseTable.getFormat() != null)
         {
            channel = null;
         }

         if (channel != null && message != null)
         {
            if (channel.getSender() == null)
            {
               throw new RPCException("err.rpc.notSender", new Object[]{channel.getName()});
            }

            Sender sender = (Sender)channel.getSender().getInstance(m_context);
            ObjectOutput output = sender.createOutput();

            ((MessageFormatter)message.getFormat().getFormatter().getInstance(m_context)).format((TransferObject)value, message, output);
            TransferObject tobj = new TransferObject(1);
            tobj.setValue(Sender.BODY, output.getObject());
            value = tobj;
         }
      }

      if (channel != null)
      {
         if (!(value instanceof TransferObject))
         {
            throw new IntegrationException("err.integration.service.outputMessage", new Object[]{service.getFullName()});
         }

         m_context.getUnitOfWork().addMessage(channel, (TransferObject)value);
      }

View Full Code Here

         sServiceName = sServiceName.substring(0, i);
      }

      XMLMetadataHelper.validateName(sServiceName);

      final Service service = new Service(sServiceName);

      service.setResourceName(m_helper.getCurResourceName());
      service.setMetadata(m_metadata);
      service.setVersion(nVersion);
      service.setPrivileged(XMLUtil.getBooleanAttr(serviceElement, "privileged", service.isPrivileged()));
      service.setCaption(XMLUtil.getStringAttr(serviceElement, "caption"));

      String sInterface = XMLUtil.getStringAttr(serviceElement, "interface");

      if (sInterface != null)
      {
         service.setInterface(m_metadata.defineInterface(sInterface, service));
      }

      String sArgList = XMLUtil.getStringAttr(serviceElement, "args");

      if (sArgList != null)
      {
         for (StringTokenizer tokenizer = new StringTokenizer(sArgList); tokenizer.hasMoreTokens();)
         {
            String sArgName = tokenizer.nextToken();

            XMLMetadataHelper.validateName(sArgName);
            service.addArgument(new Variable(sArgName));
         }
      }

      String sVarList = XMLUtil.getStringAttr(serviceElement, "variables");

      if (sVarList != null)
      {
         for (StringTokenizer tokenizer = new StringTokenizer(sVarList); tokenizer.hasMoreTokens();)
         {
            String sVarName = tokenizer.nextToken();

            XMLMetadataHelper.validateName(sVarName);
            service.addVariable(new Variable(sVarName));
         }
      }

      service.setPrivilege(getPrivilege(serviceElement, "privilege"));
      m_flowFixupList = new ArrayList();
      loadSequence(serviceElement, service);
      m_metadata.addService(service);
      m_helper.fixup(m_flowFixupList.iterator());
      m_flowFixupList = null;

      m_persistenceMappingFixupList.add(new ContextFixup(m_helper)
      {
         public void fixup()
         {
            service.resolve(m_machine);
         }
      });
   }
View Full Code Here

    */
   public void addService(Service service)
   {
      verifyNotReadOnly();

      Service oldService = (Service)m_serviceMap.put(service.getName(), Primitive.createInteger(service.getVersion()), service);

      if (oldService != null)
      {
         m_serviceMap.put(service.getName(), Primitive.createInteger(service.getVersion()), oldService);
         throw new MetadataException("err.meta.serviceDup",
            new Object[]{service.getFullName(), getName()});
      }

      oldService = (Service)m_currentServiceMap.put(service.getName(), service);

      if (oldService != null && service.getVersion() < oldService.getVersion())
      {
         m_currentServiceMap.put(service.getName(), oldService);
      }
   }
View Full Code Here

   /**
    * @see Metadata#getService(String, int)
    */
   public Service getService(String sName, int nVersion)
   {
      Service service = (Service)m_serviceMap.get(sName, Primitive.createInteger(nVersion));

      if (service != null)
      {
         return service;
      }
View Full Code Here

   /**
    * @see Metadata#getService(String)
    */
   public Service getService(String sName)
   {
      Service service = (Service)m_currentServiceMap.get(sName);

      if (service != null)
      {
         return service;
      }
View Full Code Here

    */
   public void addBinding(Binding binding) throws MetadataException
   {
      verifyNotReadOnly();
     
      Service service = binding.getService();
      Interface iface = service.getInterface();
     
      for (int i = m_bindingList.size() - 1; i >= 0; --i)
      {
         Binding prevbnd = (Binding)m_bindingList.get(i);
         Service prevsvc = prevbnd.getService();
        
         if (prevsvc == service && m_nCombinationMode != COMBINE_ALL)
         {
            throw new MetadataException("err.meta.integration.bindingDup",
               new Object[]{service.getFullName(), getName()});
         }

         if (i == 0)
         {
            if (prevsvc.getInterface() != null)
            {
               if (iface != null)
               {
                  if (iface.getFormat() != prevsvc.getInterface().getFormat())
                  {
                     throw new MetadataException("err.meta.integration.binding.formatMismatch",
                        new Object[]{service.getFullName(), getName()});
                  }
               }
View Full Code Here

TOP

Related Classes of nexj.core.meta.integration.service.Service

Copyright © 2018 www.massapicom. 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.