From c4800a6c1b96b327f7f964ebf468348624363abf Mon Sep 17 00:00:00 2001 From: dougsleite Date: Thu, 29 Oct 2009 18:45:38 +0000 Subject: - Changing the implementation-guardian to work with the policy-guardianException module - Adding the policy-guardianException module: The guardian member is implemented as policies git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@831060 13f79535-47bb-0310-9956-ffa450edef68 --- .../implementation/guardian/GuardianMember.java | 2 - .../guardian/GuardianPrimitives.java | 2 +- .../implementation/guardian/common/Context.java | 1 - .../guardian/impl/GuardianGroupImpl.java | 6 +- .../guardian/impl/GuardianMemberImpl.java | 177 --------------------- .../guardian/provider/GuardianGroupInvoker.java | 6 +- 6 files changed, 8 insertions(+), 186 deletions(-) delete mode 100644 sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/impl/GuardianMemberImpl.java (limited to 'sandbox/dougsleite/implementation-guardian/src/main/java/org/apache') diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/GuardianMember.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/GuardianMember.java index b82bf082b1..ec562b082b 100644 --- a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/GuardianMember.java +++ b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/GuardianMember.java @@ -29,8 +29,6 @@ public interface GuardianMember extends GuardianPrimitives { public String getParticipantIdentifier(); - public void setUniqueParticipantID(int id); - public int getParticipantState(); public void setParticipantState(int state); diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/GuardianPrimitives.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/GuardianPrimitives.java index c50e855d30..3aa014ee12 100644 --- a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/GuardianPrimitives.java +++ b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/GuardianPrimitives.java @@ -29,7 +29,7 @@ public interface GuardianPrimitives { //Methods to manage contexts public void enableContext(Context context); - public void removeContext(); + public Context removeContext(); //Methods to control the signaling of exceptions public void gthrow(GlobalExceptionInterface ex, List participantList); diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/common/Context.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/common/Context.java index 95c6f3bed6..6eb777b587 100644 --- a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/common/Context.java +++ b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/common/Context.java @@ -26,7 +26,6 @@ public class Context { public static Context CURRENT_CONTEXT = new Context("CURRENT_CONTEXT"); public static Context INIT_CONTEXT = new Context("INIT_CONTEXT"); public static Context GUARDIAN_CONTEXT = new Context("GUARDIAN_CONTEXT"); - private String name; private List> exceptionList; diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/impl/GuardianGroupImpl.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/impl/GuardianGroupImpl.java index 5a243560e3..9094fc248d 100644 --- a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/impl/GuardianGroupImpl.java +++ b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/impl/GuardianGroupImpl.java @@ -102,18 +102,18 @@ public class GuardianGroupImpl implements GuardianGroup { public void addGuardianMember(GuardianMember guardianMember) { guardianList.add(guardianMember); - guardianMember.setUniqueParticipantID(guardianList.size() - 1); + //guardianMember.setUniqueParticipantID(guardianList.size() - 1); } public boolean removeGuardianMember(GuardianMember guardianMember) { - throw new UnsupportedOperationException("Not supported yet."); + return guardianList.remove(guardianMember); } public void enableContext(Context context) { throw new UnsupportedOperationException("Not supported yet."); } - public void removeContext() { + public Context removeContext() { throw new UnsupportedOperationException("Not supported yet."); } diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/impl/GuardianMemberImpl.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/impl/GuardianMemberImpl.java deleted file mode 100644 index 80b9321e79..0000000000 --- a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/impl/GuardianMemberImpl.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * 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. - */ -package org.apache.tuscany.sca.implementation.guardian.impl; - -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; -import java.util.Stack; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.apache.tuscany.sca.implementation.guardian.common.GlobalExceptionInterface; -import org.apache.tuscany.sca.implementation.guardian.GuardianGroup; -import org.apache.tuscany.sca.implementation.guardian.GuardianMember; -import org.apache.tuscany.sca.implementation.guardian.common.Context; -import org.apache.tuscany.sca.implementation.guardian.common.GlobalException; -import org.apache.tuscany.sca.implementation.guardian.common.JoinException; -import org.apache.tuscany.sca.implementation.guardian.common.SuspendException; -import org.osoa.sca.annotations.Destroy; -import org.osoa.sca.annotations.Init; -import org.osoa.sca.annotations.Reference; -import org.osoa.sca.annotations.Scope; -import org.osoa.sca.annotations.Service; - -@Service(GuardianMember.class) -@Scope("COMPOSITE") -public class GuardianMemberImpl implements GuardianMember { - - private int participantState; - private Stack contextList; - - private Queue exceptionQueue; - @Reference(name = "guardian_group", required = true) - public GuardianGroup guardianGroup; - private int id; - //FIXME: Review the usage of this variable - private boolean exceptionThrown; - - public GuardianMemberImpl() { - contextList = new Stack(); - contextList.add(Context.INIT_CONTEXT); - exceptionQueue = new LinkedList(); - participantState = GuardianGroup.NORMAL_PARTICIPANT_STATE; - exceptionThrown = false; - } - - @Init - public void init() { - guardianGroup.addGuardianMember(this); - } - - @Destroy - public void destroy() { - guardianGroup.removeGuardianMember(this); - } - - public void addException(GlobalException ex) { - exceptionQueue.add(ex); - } - - public Context getCurrentContext() { - return contextList.peek(); - } - - - public void enableContext(Context context) { - //Update the context list with the related set of exceptions - contextList.push(context); - - if (contextList.size() == 2) { - JoinException ex = new JoinException(); - ex.setSignalingContext(context); - ex.putSignalingParticipant(getParticipantIdentifier()); - gthrow(ex, null); - } - - } - - public void removeContext() { - if (!contextList.isEmpty()) { - contextList.pop(); - } - } - - //If participantList is null then signal to ALL participants - public void gthrow(GlobalExceptionInterface ex, List participantList) { - //1)Block the participant until raise an exception - - if (!(ex instanceof SuspendException)) { - //Set the exception's parameters - ex.setSignalingContext(getCurrentContext()); - ex.putSignalingParticipant(getParticipantIdentifier()); - - guardianGroup.gthrow(ex, participantList); - exceptionThrown = true; - } else { - setParticipantState(GuardianGroup.SUSPENDED_PARTICIPANT_STATE); - } - } - - public boolean propagate(GlobalExceptionInterface ex) { - //1)Compares the current context with the exception's target context - return !getCurrentContext().equals(ex.getTargetContext()); - } - - public void checkExceptionStatus() throws GlobalException { - - //Blocks until the state be diferent the SUSPENDED_STATE - while (participantState == GuardianGroup.SUSPENDED_PARTICIPANT_STATE && exceptionThrown) { - System.out.println(getParticipantIdentifier() + ": I am blocked!"); - try { - Thread.sleep(5000); - } catch (InterruptedException ex) { - Logger.getLogger(GuardianMemberImpl.class.getName()).log(Level.SEVERE, null, ex); - } - } - exceptionThrown = false; - System.out.println(getParticipantIdentifier() + ": I am not blocked!"); - - GlobalException exc; - - if ((exc = exceptionQueue.peek()) == null) { - System.out.println(getParticipantIdentifier() + "#No exception on exception queue"); - return; - } - - //Check if ex.targetContext() matches the participant id - //Eg. ex.targetContext(): Main and participant id: Init.Main.Backup -> should thrown the exception - //Test if the exception should be thrown in the target context - for (Context c : contextList) { - if (exc.getTargetContext().equals(c) && (c.equals(Context.INIT_CONTEXT) || c.getExceptionList().contains(exc.getClass()))) { - System.out.println(getParticipantIdentifier() + "#Returning an exception"); - exceptionQueue.poll(); - throw exc; - } - } - - return; - } - - public String getParticipantIdentifier() { - //1) Return the participant identifier -> context list dot separated - StringBuffer participantIdentifier = new StringBuffer(); - participantIdentifier.append(this.id); - for (int i = 0; i < contextList.size(); i++) { - participantIdentifier.append("." + contextList.get(i).getName()); - } - return participantIdentifier.toString(); - } - - public void setUniqueParticipantID(int id) { - this.id = id; - } - - public int getParticipantState() { - return participantState; - } - - public void setParticipantState(int state) { - this.participantState = state; - } -} diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupInvoker.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupInvoker.java index 8f393ebcb9..987e211a48 100644 --- a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupInvoker.java +++ b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupInvoker.java @@ -48,7 +48,8 @@ public class GuardianGroupInvoker implements Invoker { @Override public Message invoke(Message msg) { - GuardianMember guardianMember = (GuardianMember) ((Object[]) msg.getBody())[0]; + //GuardianMember guardianMember = (GuardianMember) ((Object[]) msg.getBody())[0]; + GuardianMember guardianMember = (GuardianMember) msg.getBody(); this.guardian.addGuardianMember(guardianMember); return msg; @@ -65,7 +66,8 @@ public class GuardianGroupInvoker implements Invoker { @Override public Message invoke(Message msg) { - GuardianMember guardianMember = (GuardianMember) ((Object[]) msg.getBody())[0]; + GuardianMember guardianMember = (GuardianMember) msg.getBody(); + boolean returnedValue = this.guardian.removeGuardianMember(guardianMember); msg.setBody(returnedValue); -- cgit v1.2.3