incubator-cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kelv...@apache.org
Subject [28/50] [abbrv] git commit: refs/heads/master - Fix awsapi issues in Spring wiring
Date Fri, 01 Feb 2013 23:27:31 GMT
Fix awsapi issues in Spring wiring


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/526bb01b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/526bb01b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/526bb01b

Branch: refs/heads/master
Commit: 526bb01b04443b996085421c9e0373927752409d
Parents: 4dc63f5
Author: Kelven Yang <kelveny@gmail.com>
Authored: Wed Jan 30 16:43:40 2013 -0800
Committer: Kelven Yang <kelveny@gmail.com>
Committed: Wed Jan 30 16:43:40 2013 -0800

----------------------------------------------------------------------
 .../com/cloud/bridge/service/EC2MainServlet.java   |    7 +++-
 .../com/cloud/bridge/service/EC2RestServlet.java   |   28 ++----------
 .../com/cloud/bridge/service/S3RestServlet.java    |    3 +
 .../service/controller/s3/ServiceProvider.java     |   34 ++++++++------
 .../cloud/bridge/service/core/ec2/EC2Engine.java   |   24 +++++++++-
 .../com/cloud/bridge/service/core/s3/S3Engine.java |   24 ++++++++---
 6 files changed, 71 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/526bb01b/awsapi/src/com/cloud/bridge/service/EC2MainServlet.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/EC2MainServlet.java b/awsapi/src/com/cloud/bridge/service/EC2MainServlet.java
index e064009..8361f6e 100644
--- a/awsapi/src/com/cloud/bridge/service/EC2MainServlet.java
+++ b/awsapi/src/com/cloud/bridge/service/EC2MainServlet.java
@@ -35,6 +35,8 @@ import org.springframework.web.context.support.SpringBeanAutowiringSupport;
 
 import com.cloud.bridge.persist.dao.CloudStackConfigurationDao;
 import com.cloud.bridge.util.ConfigurationHelper;
+import com.cloud.utils.LogUtils;
+import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.db.DB;
 
 @Component("EC2MainServlet")
@@ -61,8 +63,11 @@ public class EC2MainServlet extends HttpServlet{
     @DB
     public void init( ServletConfig config ) throws ServletException {
         try{
+        	LogUtils.initLog4j("log4j-cloud.xml");
         	SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());
      	
-            ConfigurationHelper.preConfigureConfigPathFromServletContext(config.getServletContext());
+        	ConfigurationHelper.preConfigureConfigPathFromServletContext(config.getServletContext());
+        	ComponentContext.initComponentsLifeCycle();
+        	
             // check if API is enabled
             String value = csDao.getConfigValue(ENABLE_EC2_API);
             if(value != null){

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/526bb01b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java
index 1023e8d..67028f8 100644
--- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java
+++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java
@@ -59,6 +59,7 @@ import org.apache.axis2.databinding.utils.writer.MTOMAwareXMLSerializer;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.support.SpringBeanAutowiringSupport;
 
 import com.amazon.ec2.AllocateAddressResponse;
 import com.amazon.ec2.AssociateAddressResponse;
@@ -152,9 +153,6 @@ public class EC2RestServlet extends HttpServlet {
     @Inject UserCredentialsDaoImpl ucDao;
     @Inject OfferingDaoImpl ofDao;
 
-    static UserCredentialsDaoImpl s_ucDao;
-    static OfferingDaoImpl s_ofDao;
-    
     public static final Logger logger = Logger.getLogger(EC2RestServlet.class);
 
     private final OMFactory factory = OMAbstractFactory.getOMFactory();
@@ -170,33 +168,15 @@ public class EC2RestServlet extends HttpServlet {
     public EC2RestServlet() {
     }
 
-    @PostConstruct
-    void initComponent() {  
-        // Servlet injection does not always work for servlet container
-        // We use a hacking here to initialize static variables at Spring wiring time
-        if(ucDao != null) {
-            s_ucDao = ucDao;
-        } else {
-            ucDao = s_ucDao;
-        }
-        
-        if(ofDao != null) {
-            s_ofDao = ofDao;
-        } else {
-            ofDao = s_ofDao;
-        }
-        
-    }
-    
-    
     /**
      * We build the path to where the keystore holding the WS-Security X509 certificates
      * are stored.
      */
     @Override
     public void init( ServletConfig config ) throws ServletException {
-        initComponent();
-        File propertiesFile = ConfigurationHelper.findConfigurationFile("ec2-service.properties");
+    	SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());
      	
+
+    	File propertiesFile = ConfigurationHelper.findConfigurationFile("ec2-service.properties");
         Properties EC2Prop = null;
 
         if (null != propertiesFile) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/526bb01b/awsapi/src/com/cloud/bridge/service/S3RestServlet.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/S3RestServlet.java b/awsapi/src/com/cloud/bridge/service/S3RestServlet.java
index c824fca..7e69fd6 100644
--- a/awsapi/src/com/cloud/bridge/service/S3RestServlet.java
+++ b/awsapi/src/com/cloud/bridge/service/S3RestServlet.java
@@ -37,6 +37,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.apache.axis2.AxisFault;
 import org.apache.log4j.Logger;
+import org.springframework.web.context.support.SpringBeanAutowiringSupport;
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -113,6 +114,8 @@ public class S3RestServlet extends HttpServlet {
     @Override
     public void init( ServletConfig config ) throws ServletException {
         try{
+        	SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());
      	
+       	
             ConfigurationHelper.preConfigureConfigPathFromServletContext(config.getServletContext());
             // check if API is enabled
             String value = csDao.getConfigValue(ENABLE_S3_API);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/526bb01b/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java b/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java
index 4eb4c3b..593e849 100644
--- a/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java
+++ b/awsapi/src/com/cloud/bridge/service/controller/s3/ServiceProvider.java
@@ -31,11 +31,13 @@ import java.util.Properties;
 import java.util.Timer;
 import java.util.TimerTask;
 
+import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 import org.apache.axis2.AxisFault;
 import org.apache.log4j.Logger;
 import org.apache.log4j.xml.DOMConfigurator;
+import org.springframework.stereotype.Component;
 
 import com.amazon.ec2.AmazonEC2SkeletonInterface;
 import com.amazon.s3.AmazonS3SkeletonInterface;
@@ -56,10 +58,12 @@ import com.cloud.bridge.util.ConfigurationHelper;
 import com.cloud.bridge.util.DateHelper;
 import com.cloud.bridge.util.NetHelper;
 import com.cloud.bridge.util.OrderedPair;
+import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
 
-public class ServiceProvider {
+@Component
+public class ServiceProvider extends ManagerBase {
     protected final static Logger logger = Logger.getLogger(ServiceProvider.class);
     @Inject MHostDao mhostDao;
     @Inject SHostDao shostDao;
@@ -77,8 +81,8 @@ public class ServiceProvider {
     private String serviceEndpoint = null;
     private String multipartDir = null;          // illegal bucket name used as a folder
for storing multiparts
     private String masterDomain = ".s3.amazonaws.com";
-    private final S3Engine engine;
-    private EC2Engine EC2_engine = null;
+    @Inject private S3Engine engine;
+    @Inject private EC2Engine EC2_engine;
 
     // -> cache Bucket Policies here so we don't have to load from db on every access
     private final Map<String,S3BucketPolicy> policyMap = new HashMap<String,S3BucketPolicy>();
@@ -87,26 +91,26 @@ public class ServiceProvider {
         // register service implementation object
         Transaction txn = Transaction.open(Transaction.AWSAPI_DB);
         txn.close();
-        engine = new S3Engine();
-        EC2_engine = new EC2Engine();
         serviceMap.put(AmazonS3SkeletonInterface.class, new S3SerializableServiceImplementation(engine));
         serviceMap.put(AmazonEC2SkeletonInterface.class, new EC2SoapServiceImpl(EC2_engine));
     }
 
     public synchronized static ServiceProvider getInstance() {
-        if(instance == null) 
-        {
-            try {
-                instance = new ServiceProvider();
-                instance.initialize();
-            } catch(Throwable e) {
-                logger.error("Unexpected exception " + e.getMessage(), e);
-            } finally {
-            }
-        }
         return instance;
     }
 
+    @PostConstruct
+    void initComponent() {
+    	instance = this;
+    }
+    
+	public boolean configure(String name, Map<String, Object> params)
+			throws ConfigurationException {
+		
+		initialize();
+		return true;
+	}
+    
     public long getManagementHostId() {
         // we want to limit mhost within its own session, id of the value will be returned

         long mhostId = 0;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/526bb01b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
index 0f8eded..9c0dc67 100644
--- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
+++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
@@ -26,13 +26,16 @@ import java.sql.SQLException;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.UUID;
 
 import javax.inject.Inject;
+import javax.naming.ConfigurationException;
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
 import org.xml.sax.SAXException;
 
 import com.cloud.bridge.model.CloudStackServiceOfferingVO;
@@ -69,12 +72,14 @@ import com.cloud.stack.models.CloudStackUser;
 import com.cloud.stack.models.CloudStackUserVm;
 import com.cloud.stack.models.CloudStackVolume;
 import com.cloud.stack.models.CloudStackZone;
+import com.cloud.utils.component.ManagerBase;
 
 /**
  * EC2Engine processes the ec2 commands and calls their cloudstack analogs
  *
  */
-public class EC2Engine {
+@Component
+public class EC2Engine extends ManagerBase {
     protected final static Logger logger = Logger.getLogger(EC2Engine.class);
     String managementServer = null;
     String cloudAPIPort = null;
@@ -82,13 +87,27 @@ public class EC2Engine {
     @Inject CloudStackSvcOfferingDao scvoDao;
     @Inject OfferingDao ofDao;
     @Inject CloudStackAccountDao accDao;
+    
     private CloudStackApi _eng = null;
 
     private CloudStackAccount currentAccount = null;
 
     public EC2Engine() throws IOException {
-        loadConfigValues();
     }
+    
+	@Override
+	public boolean configure(String name, Map<String, Object> params)
+			throws ConfigurationException {
+		
+		try {
+			loadConfigValues();
+		} catch(IOException e) {
+			logger.error("EC2Engine Configuration failure", e);
+			throw new ConfigurationException("EC2Engine configuration failure");
+		}
+        return true;
+	}
+
 
     /**
      * Which management server to we talk to?  
@@ -2457,5 +2476,4 @@ public class EC2Engine {
         }
         return resourceTags;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/526bb01b/awsapi/src/com/cloud/bridge/service/core/s3/S3Engine.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/core/s3/S3Engine.java b/awsapi/src/com/cloud/bridge/service/core/s3/S3Engine.java
index 2ce9e33..e1ccd4c 100644
--- a/awsapi/src/com/cloud/bridge/service/core/s3/S3Engine.java
+++ b/awsapi/src/com/cloud/bridge/service/core/s3/S3Engine.java
@@ -33,11 +33,13 @@ import java.util.Set;
 import java.util.TimeZone;
 import java.util.UUID;
 
+import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.log4j.Logger;
 import org.json.simple.parser.ParseException;
+import org.springframework.stereotype.Component;
 
 import com.cloud.bridge.io.S3CAStorBucketAdapter;
 import com.cloud.bridge.io.S3FileSystemBucketAdapter;
@@ -88,19 +90,24 @@ import com.cloud.utils.db.Transaction;
 /**
  * The CRUD control actions to be invoked from S3BucketAction or S3ObjectAction.
  */
+@Component
 public class S3Engine {
     protected final static Logger logger = Logger.getLogger(S3Engine.class);
     @Inject SHostDao shostDao;
     @Inject MHostDao mhostDao;
-    @Inject static BucketPolicyDao bPolicy;
+    @Inject BucketPolicyDao bPolicy;
     @Inject BucketPolicyDao bPolicyDao;
     @Inject SBucketDao bucketDao;  
     @Inject SAclDao aclDao;
-    @Inject static SAclDao saclDao;
+    @Inject SAclDao saclDao;
     @Inject SObjectDao objectDao;
     @Inject SObjectItemDao itemDao;
     @Inject SMetaDao metaDao;
     @Inject MHostMountDao mountDao;
+
+    static SAclDao s_saclDao;
+    static BucketPolicyDao s_bPolicy;
+    
     private final int LOCK_ACQUIRING_TIMEOUT_SECONDS = 10;		// ten seconds
 
     private final Map<Integer, S3BucketAdapter> bucketAdapters = new HashMap<Integer,
S3BucketAdapter>();
@@ -110,6 +117,11 @@ public class S3Engine {
         bucketAdapters.put(SHost.STORAGE_HOST_TYPE_CASTOR, new S3CAStorBucketAdapter());
     }
 
+    @PostConstruct
+    void init() {
+    	s_saclDao = saclDao;
+    	s_bPolicy = bPolicy;
+    }
 
     /**
      * Return a S3CopyObjectResponse which represents an object being copied from source
@@ -1741,13 +1753,13 @@ public class S3Engine {
         if ( 0 == userId.length())
         {
             // Is an anonymous principal ACL set for this <target, targetId>?
-            if (hasPermission( saclDao.listGrants( target, targetId, "A" ), requestedPermission
)) return;
+            if (hasPermission( s_saclDao.listGrants( target, targetId, "A" ), requestedPermission
)) return;
         }
         else
         {    	
-            if (hasPermission( saclDao.listGrants( target, targetId, userId ), requestedPermission
)) return;
+            if (hasPermission( s_saclDao.listGrants( target, targetId, userId ), requestedPermission
)) return;
             // Or alternatively is there is any principal authenticated ACL set for this
<target, targetId>?
-            if (hasPermission( saclDao.listGrants( target, targetId, "*" ), requestedPermission
)) return;
+            if (hasPermission( s_saclDao.listGrants( target, targetId, "*" ), requestedPermission
)) return;
         }
         // No privileges implies that no access is allowed	in the case of an anonymous user
         throw new PermissionDeniedException( "Access Denied - ACLs do not give user the required
permission" );
@@ -1771,7 +1783,7 @@ public class S3Engine {
             // -> do we have to load it from the database (any other value means there
is no policy)?
             if (-1 == result.getSecond().intValue())
             {
-                BucketPolicyVO policyvo = bPolicy.getByName(context.getBucketName());
+                BucketPolicyVO policyvo = s_bPolicy.getByName(context.getBucketName());
                 String policyInJson = null;
                 if (null != policyvo)
                     policyInJson = policyvo.getPolicy();


Mime
View raw message