http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java 
b/server/src/com/cloud/network/NetworkServiceImpl.java
index 4c61aec..8792037 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -113,6 +113,7 @@ import com.cloud.utils.AnnotationHelper;
 import com.cloud.utils.Journal;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
+import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.component.Manager;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.*;
@@ -2978,10 +2979,12 @@ public class NetworkServiceImpl extends ManagerBase 
implements  NetworkService {
 
         PhysicalNetworkServiceProvider nsp = 
addProviderToPhysicalNetwork(physicalNetworkId, 
Network.Provider.VirtualRouter.getName(), null, null);
         // add instance of the provider
-        VirtualRouterElement element = (VirtualRouterElement) 
_networkModel.getElementImplementingProvider(Network.Provider.VirtualRouter.getName());
-        if (element == null) {
+        NetworkElement networkElement = 
_networkModel.getElementImplementingProvider(Network.Provider.VirtualRouter.getName());
+        if (networkElement == null) {
             throw new CloudRuntimeException("Unable to find the Network 
Element implementing the VirtualRouter Provider");
         }
+        
+        VirtualRouterElement element = 
ComponentContext.getTargetObject(networkElement);
         element.addElement(nsp.getId(), 
VirtualRouterProviderType.VirtualRouter);
 
         return nsp;
@@ -3003,11 +3006,13 @@ public class NetworkServiceImpl extends ManagerBase 
implements  NetworkService {
 
         PhysicalNetworkServiceProvider nsp = 
addProviderToPhysicalNetwork(physicalNetworkId, 
                 Network.Provider.VPCVirtualRouter.getName(), null, null);
-        // add instance of the provider
-        VpcVirtualRouterElement element = (VpcVirtualRouterElement) 
_networkModel.getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName());
-        if (element == null) {
+ 
+        NetworkElement networkElement =  
_networkModel.getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName());
+        if (networkElement == null) {
             throw new CloudRuntimeException("Unable to find the Network 
Element implementing the VPCVirtualRouter Provider");
         }
+        
+        VpcVirtualRouterElement element = 
ComponentContext.getTargetObject(networkElement);
         element.addElement(nsp.getId(), 
VirtualRouterProviderType.VPCVirtualRouter);
 
         return nsp;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java 
b/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
index 57a5f85..45a8068 100644
--- a/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
+++ b/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
@@ -30,6 +30,7 @@ import com.cloud.network.rules.FirewallRule.State;
 import com.cloud.network.rules.FirewallRule.TrafficType;
 import com.cloud.network.rules.FirewallRuleVO;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GenericDaoBase;
@@ -53,8 +54,8 @@ public class FirewallRulesDaoImpl extends 
GenericDaoBase<FirewallRuleVO, Long> i
     protected final SearchBuilder<FirewallRuleVO> SystemRuleSearch;
     protected final GenericSearchBuilder<FirewallRuleVO, Long> RulesByIpCount;
 
-    @Inject protected FirewallRulesCidrsDaoImpl _firewallRulesCidrsDao;
-    @Inject ResourceTagsDaoImpl _tagsDao;
+    @Inject protected FirewallRulesCidrsDao _firewallRulesCidrsDao;
+    @Inject ResourceTagDao _tagsDao;
     @Inject IPAddressDao _ipDao;
 
     protected FirewallRulesDaoImpl() {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/IPAddressDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/IPAddressDaoImpl.java 
b/server/src/com/cloud/network/dao/IPAddressDaoImpl.java
index 691e460..b0eef4f 100755
--- a/server/src/com/cloud/network/dao/IPAddressDaoImpl.java
+++ b/server/src/com/cloud/network/dao/IPAddressDaoImpl.java
@@ -30,9 +30,11 @@ import org.springframework.stereotype.Component;
 
 import com.cloud.dc.Vlan.VlanType;
 import com.cloud.dc.VlanVO;
+import com.cloud.dc.dao.VlanDao;
 import com.cloud.dc.dao.VlanDaoImpl;
 import com.cloud.network.IpAddress.State;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GenericDaoBase;
@@ -57,9 +59,9 @@ public class IPAddressDaoImpl extends 
GenericDaoBase<IPAddressVO, Long> implemen
     protected GenericSearchBuilder<IPAddressVO, Integer> AllocatedIpCount;
     protected GenericSearchBuilder<IPAddressVO, Integer> 
AllIpCountForDashboard;    
     protected GenericSearchBuilder<IPAddressVO, Long> 
AllocatedIpCountForAccount;    
-    @Inject protected VlanDaoImpl _vlanDao;
+    @Inject protected VlanDao _vlanDao;
     protected GenericSearchBuilder<IPAddressVO, Long> CountFreePublicIps;
-    @Inject ResourceTagsDaoImpl _tagsDao;
+    @Inject ResourceTagDao _tagsDao;
 
     // make it public for JUnit test
     public IPAddressDaoImpl() {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java 
b/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java
index 547dc60..f211a7f 100644
--- a/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java
+++ b/server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java
@@ -51,7 +51,7 @@ public class LoadBalancerDaoImpl extends 
GenericDaoBase<LoadBalancerVO, Long> im
     private final SearchBuilder<LoadBalancerVO> AccountAndNameSearch;
     protected final SearchBuilder<LoadBalancerVO> TransitionStateSearch;
 
-    @Inject protected FirewallRulesCidrsDaoImpl _portForwardingRulesCidrsDao;
+    @Inject protected FirewallRulesCidrsDao _portForwardingRulesCidrsDao;
 
     protected LoadBalancerDaoImpl() {
         ListByIp = createSearchBuilder();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/NetworkAccountDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/NetworkAccountDao.java 
b/server/src/com/cloud/network/dao/NetworkAccountDao.java
new file mode 100644
index 0000000..c4435c8
--- /dev/null
+++ b/server/src/com/cloud/network/dao/NetworkAccountDao.java
@@ -0,0 +1,22 @@
+// 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 com.cloud.network.dao;
+
+import com.cloud.utils.db.GenericDao;
+
+public interface NetworkAccountDao extends GenericDao<NetworkAccountVO, Long> {
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/NetworkAccountDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/NetworkAccountDaoImpl.java 
b/server/src/com/cloud/network/dao/NetworkAccountDaoImpl.java
index f0b7156..0947905 100644
--- a/server/src/com/cloud/network/dao/NetworkAccountDaoImpl.java
+++ b/server/src/com/cloud/network/dao/NetworkAccountDaoImpl.java
@@ -22,7 +22,7 @@ import com.cloud.utils.db.GenericDao;
 import com.cloud.utils.db.GenericDaoBase;
 
 @Component
-public class NetworkAccountDaoImpl extends GenericDaoBase<NetworkAccountVO, 
Long> implements GenericDao<NetworkAccountVO, Long> {
+public class NetworkAccountDaoImpl extends GenericDaoBase<NetworkAccountVO, 
Long> implements NetworkAccountDao {
     public NetworkAccountDaoImpl() {
         super();
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/NetworkDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java 
b/server/src/com/cloud/network/dao/NetworkDaoImpl.java
index 43c581f..1bc8973 100644
--- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java
+++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java
@@ -39,13 +39,11 @@ import com.cloud.network.Networks.Mode;
 import com.cloud.network.Networks.TrafficType;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.offerings.NetworkOfferingVO;
+import com.cloud.offerings.dao.NetworkOfferingDao;
 import com.cloud.offerings.dao.NetworkOfferingDaoImpl;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.GenericSearchBuilder;
-import com.cloud.utils.db.JoinBuilder;
 import com.cloud.utils.db.*;
 import com.cloud.utils.db.JoinBuilder.JoinType;
 import com.cloud.utils.db.SearchCriteria.Func;
@@ -76,13 +74,13 @@ public class NetworkDaoImpl extends 
GenericDaoBase<NetworkVO, Long> implements N
     
     
     
-    @Inject ResourceTagsDaoImpl _tagsDao;
-    @Inject NetworkAccountDaoImpl _accountsDao;
-    @Inject NetworkDomainDaoImpl _domainsDao;
-    @Inject NetworkOpDaoImpl _opDao;
-    @Inject NetworkServiceMapDaoImpl _ntwkSvcMap;
-    @Inject NetworkOfferingDaoImpl _ntwkOffDao;
-    @Inject NetworkOpDaoImpl _ntwkOpDao;
+    @Inject ResourceTagDao _tagsDao;
+    @Inject NetworkAccountDao _accountsDao;
+    @Inject NetworkDomainDao _domainsDao;
+    @Inject NetworkOpDao _opDao;
+    @Inject NetworkServiceMapDao _ntwkSvcMap;
+    @Inject NetworkOfferingDao _ntwkOffDao;
+    @Inject NetworkOpDao _ntwkOpDao;
 
     TableGenerator _tgMacAddress;
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/NetworkOpDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/NetworkOpDao.java 
b/server/src/com/cloud/network/dao/NetworkOpDao.java
new file mode 100644
index 0000000..f492dbd
--- /dev/null
+++ b/server/src/com/cloud/network/dao/NetworkOpDao.java
@@ -0,0 +1,26 @@
+// 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 com.cloud.network.dao;
+
+import com.cloud.utils.db.GenericDao;
+
+public interface NetworkOpDao extends GenericDao<NetworkOpVO, Long> {
+    public int getActiveNics(long networkId);
+    public void changeActiveNicsBy(long networkId, int count);
+    public void setCheckForGc(long networkId);
+    public void clearCheckForGc(long networkId);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/NetworkOpDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/NetworkOpDaoImpl.java 
b/server/src/com/cloud/network/dao/NetworkOpDaoImpl.java
index bdc9f50..a3f54b7 100644
--- a/server/src/com/cloud/network/dao/NetworkOpDaoImpl.java
+++ b/server/src/com/cloud/network/dao/NetworkOpDaoImpl.java
@@ -30,7 +30,7 @@ import com.cloud.utils.db.SearchCriteria.Op;
 import com.cloud.utils.db.UpdateBuilder;
 
 @Component
-public class NetworkOpDaoImpl extends GenericDaoBase<NetworkOpVO, Long> 
implements GenericDao<NetworkOpVO, Long> {
+public class NetworkOpDaoImpl extends GenericDaoBase<NetworkOpVO, Long> 
implements NetworkOpDao {
     protected final SearchBuilder<NetworkOpVO> AllFieldsSearch;
     protected final GenericSearchBuilder<NetworkOpVO, Integer> 
ActiveNicsSearch;
     protected final Attribute _activeNicsAttribute;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java 
b/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java
index 8e67d8b..1e26a51 100644
--- a/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java
+++ b/server/src/com/cloud/network/dao/PhysicalNetworkDaoImpl.java
@@ -36,7 +36,7 @@ import com.cloud.utils.db.SearchCriteria.Op;
 public class PhysicalNetworkDaoImpl extends GenericDaoBase<PhysicalNetworkVO, 
Long> implements PhysicalNetworkDao {
     final SearchBuilder<PhysicalNetworkVO> ZoneSearch;
 
-    @Inject protected PhysicalNetworkTrafficTypeDaoImpl _trafficTypeDao;
+    @Inject protected PhysicalNetworkTrafficTypeDao _trafficTypeDao;
 
     protected PhysicalNetworkDaoImpl() {
         super();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/RouterNetworkDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/RouterNetworkDao.java 
b/server/src/com/cloud/network/dao/RouterNetworkDao.java
new file mode 100644
index 0000000..bd275bd
--- /dev/null
+++ b/server/src/com/cloud/network/dao/RouterNetworkDao.java
@@ -0,0 +1,26 @@
+// 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 com.cloud.network.dao;
+
+import java.util.List;
+
+import com.cloud.utils.db.GenericDao;
+
+public interface RouterNetworkDao extends GenericDao<RouterNetworkVO, Long> {
+    public List<Long> getRouterNetworks(long routerId); 
+    public RouterNetworkVO findByRouterAndNetwork (long routerId, long 
networkId);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/RouterNetworkDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/RouterNetworkDaoImpl.java 
b/server/src/com/cloud/network/dao/RouterNetworkDaoImpl.java
index e560713..b0b633c 100644
--- a/server/src/com/cloud/network/dao/RouterNetworkDaoImpl.java
+++ b/server/src/com/cloud/network/dao/RouterNetworkDaoImpl.java
@@ -28,7 +28,7 @@ import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.SearchCriteria.Op;
 
 @Component
-public class RouterNetworkDaoImpl extends GenericDaoBase<RouterNetworkVO, 
Long> implements GenericDao<RouterNetworkVO, Long>{
+public class RouterNetworkDaoImpl extends GenericDaoBase<RouterNetworkVO, 
Long> implements RouterNetworkDao {
     protected final GenericSearchBuilder<RouterNetworkVO, Long> 
RouterNetworksSearch;
     protected final SearchBuilder<RouterNetworkVO> AllFieldsSearch;
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java 
b/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java
index 2830abe..4745f9a 100644
--- a/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java
+++ b/server/src/com/cloud/network/dao/Site2SiteVpnConnectionDaoImpl.java
@@ -35,8 +35,8 @@ import com.cloud.utils.db.SearchCriteria;
 public class Site2SiteVpnConnectionDaoImpl extends 
GenericDaoBase<Site2SiteVpnConnectionVO, Long> implements 
Site2SiteVpnConnectionDao {
     private static final Logger s_logger = 
Logger.getLogger(Site2SiteVpnConnectionDaoImpl.class);
 
-    @Inject protected IPAddressDaoImpl _addrDao;
-    @Inject protected Site2SiteVpnGatewayDaoImpl _vpnGatewayDao;
+    @Inject protected IPAddressDao _addrDao;
+    @Inject protected Site2SiteVpnGatewayDao _vpnGatewayDao;
 
     private SearchBuilder<Site2SiteVpnConnectionVO> AllFieldsSearch;
     private SearchBuilder<Site2SiteVpnConnectionVO> VpcSearch;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java 
b/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
index 8305978..fa4a9fa 100644
--- a/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
+++ b/server/src/com/cloud/network/dao/Site2SiteVpnGatewayDaoImpl.java
@@ -29,7 +29,7 @@ import com.cloud.utils.db.SearchCriteria;
 @Component
 @Local(value={Site2SiteVpnGatewayDao.class})
 public class Site2SiteVpnGatewayDaoImpl extends 
GenericDaoBase<Site2SiteVpnGatewayVO, Long> implements Site2SiteVpnGatewayDao {
-    @Inject protected IPAddressDaoImpl _addrDao;
+    @Inject protected IPAddressDao _addrDao;
 
     private static final Logger s_logger = 
Logger.getLogger(Site2SiteVpnGatewayDaoImpl.class);
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java 
b/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java
index 1d2e991..5d0b01c 100644
--- a/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java
+++ b/server/src/com/cloud/network/rules/dao/PortForwardingRulesDaoImpl.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 
 import org.springframework.stereotype.Component;
 
+import com.cloud.network.dao.FirewallRulesCidrsDao;
 import com.cloud.network.dao.FirewallRulesCidrsDaoImpl;
 import com.cloud.network.rules.FirewallRule.Purpose;
 import com.cloud.network.rules.FirewallRule.State;
@@ -44,7 +45,7 @@ public class PortForwardingRulesDaoImpl extends 
GenericDaoBase<PortForwardingRul
     protected final SearchBuilder<PortForwardingRuleVO> AllRulesSearchByVM;
     protected final SearchBuilder<PortForwardingRuleVO> 
ActiveRulesSearchByAccount;
 
-    @Inject protected FirewallRulesCidrsDaoImpl _portForwardingRulesCidrsDao;
+    @Inject protected FirewallRulesCidrsDao _portForwardingRulesCidrsDao;
     
     protected PortForwardingRulesDaoImpl() {
         super();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java 
b/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java
index 68112c0..dfa6a2e 100644
--- a/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java
+++ b/server/src/com/cloud/network/security/dao/SecurityGroupDaoImpl.java
@@ -25,6 +25,7 @@ import org.springframework.stereotype.Component;
 
 import com.cloud.network.security.SecurityGroupVO;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 
 import com.cloud.utils.db.DB;
@@ -39,7 +40,7 @@ public class SecurityGroupDaoImpl extends 
GenericDaoBase<SecurityGroupVO, Long>
     private SearchBuilder<SecurityGroupVO> AccountIdSearch;
     private SearchBuilder<SecurityGroupVO> AccountIdNameSearch;
     private SearchBuilder<SecurityGroupVO> AccountIdNamesSearch;
-    @Inject ResourceTagsDaoImpl _tagsDao;
+    @Inject ResourceTagDao _tagsDao;
 
 
     protected SecurityGroupDaoImpl() {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java 
b/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java
index 0ebccab..fac35a9 100644
--- a/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java
+++ b/server/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java
@@ -26,6 +26,7 @@ import org.springframework.stereotype.Component;
 import com.cloud.network.vpc.StaticRoute;
 import com.cloud.network.vpc.StaticRouteVO;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 
 import com.cloud.utils.db.DB;
@@ -44,7 +45,7 @@ public class StaticRouteDaoImpl extends 
GenericDaoBase<StaticRouteVO, Long> impl
     protected final SearchBuilder<StaticRouteVO> AllFieldsSearch;
     protected final SearchBuilder<StaticRouteVO> NotRevokedSearch;
     protected final GenericSearchBuilder<StaticRouteVO, Long> 
RoutesByGatewayCount;
-    @Inject ResourceTagsDaoImpl _tagsDao;
+    @Inject ResourceTagDao _tagsDao;
     
     protected StaticRouteDaoImpl() {
         super();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java 
b/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
index 5fdf279..6560b90 100644
--- a/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
+++ b/server/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
@@ -29,7 +29,7 @@ import org.springframework.stereotype.Component;
 import com.cloud.network.vpc.Vpc;
 import com.cloud.network.vpc.VpcVO;
 import com.cloud.server.ResourceTag.TaggedResourceType;
-import com.cloud.tags.dao.ResourceTagsDaoImpl;
+import com.cloud.tags.dao.ResourceTagDao;
 
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GenericDaoBase;
@@ -47,8 +47,9 @@ public class VpcDaoImpl extends GenericDaoBase<VpcVO, Long> 
implements VpcDao{
     final GenericSearchBuilder<VpcVO, Integer> CountByOfferingId;
     final SearchBuilder<VpcVO> AllFieldsSearch;
     final GenericSearchBuilder<VpcVO, Long> CountByAccountId;
-    @Inject ResourceTagsDaoImpl _tagsDao;
-    @Inject VpcServiceMapDaoImpl _vpcSvcMap;
+
+    @Inject ResourceTagDao _tagsDao;
+    @Inject VpcServiceMapDao _vpcSvcMap;
 
     protected VpcDaoImpl() {
         super();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/projects/dao/ProjectDaoImpl.java 
b/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
index e07aecc..ecf40da 100644
--- a/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
+++ b/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
@@ -27,6 +27,7 @@ import org.springframework.stereotype.Component;
 import com.cloud.projects.Project;
 import com.cloud.projects.ProjectVO;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 
 import com.cloud.utils.db.DB;
@@ -45,7 +46,7 @@ public class ProjectDaoImpl extends GenericDaoBase<ProjectVO, 
Long> implements P
     protected GenericSearchBuilder<ProjectVO, Long> CountByDomain;
     protected GenericSearchBuilder<ProjectVO, Long> ProjectAccountSearch;
     // ResourceTagsDaoImpl _tagsDao = 
ComponentLocator.inject(ResourceTagsDaoImpl.class);
-    @Inject ResourceTagsDaoImpl _tagsDao;
+    @Inject ResourceTagDao _tagsDao;
 
     protected ProjectDaoImpl() {
         AllFieldsSearch = createSearchBuilder();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/servlet/CloudStartupServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/servlet/CloudStartupServlet.java 
b/server/src/com/cloud/servlet/CloudStartupServlet.java
index 46be093..2cabe15 100755
--- a/server/src/com/cloud/servlet/CloudStartupServlet.java
+++ b/server/src/com/cloud/servlet/CloudStartupServlet.java
@@ -16,6 +16,9 @@
 // under the License.
 package com.cloud.servlet;
 
+import java.util.Timer;
+import java.util.TimerTask;
+
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -31,10 +34,22 @@ public class CloudStartupServlet extends HttpServlet {
     public static final Logger s_logger = 
Logger.getLogger(CloudStartupServlet.class.getName());
     static final long serialVersionUID = SerialVersionUID.CloudStartupServlet;
     
+    Timer _timer = new Timer();
+    
     @Override
     public void init(ServletConfig config) throws ServletException {
        LogUtils.initLog4j("log4j-cloud.xml");
        SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, 
config.getServletContext());            
-       ComponentContext.initComponentsLifeCycle();
+       
+       // wait when condition is ready for initialization
+       _timer.scheduleAtFixedRate(new TimerTask() {
+                       @Override
+                       public void run() {
+                               if(ComponentContext.getApplicationContext() != 
null) {
+                                       _timer.cancel();
+                                       
ComponentContext.initComponentsLifeCycle();
+                               }
+                       }
+       }, 0, 1000);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java 
b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
index 5b3f273..825b6d5 100644
--- a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
@@ -35,16 +35,14 @@ import com.cloud.storage.Snapshot.Type;
 import com.cloud.storage.SnapshotVO;
 import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeVO;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.Filter;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.GenericSearchBuilder;
 import com.cloud.utils.db.*;
 import com.cloud.utils.db.JoinBuilder.JoinType;
 import com.cloud.utils.db.SearchCriteria.Func;
 import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.dao.VMInstanceDao;
 import com.cloud.vm.dao.VMInstanceDaoImpl;
 
 @Component
@@ -66,10 +64,10 @@ public class SnapshotDaoImpl extends 
GenericDaoBase<SnapshotVO, Long> implements
     private SearchBuilder<SnapshotVO> InstanceIdSearch;
     private SearchBuilder<SnapshotVO> StatusSearch;
     private GenericSearchBuilder<SnapshotVO, Long> CountSnapshotsByAccount;
-    @Inject ResourceTagsDaoImpl _tagsDao;
+    @Inject ResourceTagDao _tagsDao;
     
-    @Inject protected VMInstanceDaoImpl _instanceDao;
-    @Inject protected VolumeDaoImpl _volumeDao;
+    @Inject protected VMInstanceDao _instanceDao;
+    @Inject protected VolumeDao _volumeDao;
 
     @Override
     public SnapshotVO findNextSnapshot(long snapshotId) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VolumeDaoImpl.java 
b/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
index ca3b82a..40ed875 100755
--- a/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
@@ -37,6 +37,7 @@ import com.cloud.storage.Volume.Event;
 import com.cloud.storage.Volume.State;
 import com.cloud.storage.Volume.Type;
 import com.cloud.storage.VolumeVO;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 import com.cloud.utils.Pair;
 import com.cloud.utils.db.DB;
@@ -61,8 +62,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, 
Long> implements Vol
     protected final SearchBuilder<VolumeVO> InstanceStatesSearch;
     protected final SearchBuilder<VolumeVO> AllFieldsSearch;
     protected GenericSearchBuilder<VolumeVO, Long> CountByAccount;
-    // ResourceTagsDaoImpl _tagsDao = 
ComponentLocator.inject(ResourceTagsDaoImpl.class);
-    @Inject ResourceTagsDaoImpl _tagsDao;
+    @Inject ResourceTagDao _tagsDao;
     
     protected static final String SELECT_VM_SQL = "SELECT DISTINCT instance_id 
from volumes v where v.host_id = ? and v.mirror_state = ?";
     protected static final String SELECT_HYPERTYPE_FROM_VOLUME = "SELECT 
c.hypervisor_type from volumes v, storage_pool s, cluster c where v.pool_id = 
s.id and s.cluster_id = c.id and v.id = ?";

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java 
b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
index 5207588..391fa58 100755
--- a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
+++ b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
@@ -25,15 +25,19 @@ import javax.inject.Inject;
 import org.springframework.stereotype.Component;
 
 import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
 import com.cloud.host.dao.HostDaoImpl;
 import com.cloud.network.Network;
+import com.cloud.network.dao.RouterNetworkDao;
 import com.cloud.network.dao.RouterNetworkDaoImpl;
 import com.cloud.network.dao.RouterNetworkVO;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
 import com.cloud.offering.NetworkOffering;
+import com.cloud.offerings.dao.NetworkOfferingDao;
 import com.cloud.offerings.dao.NetworkOfferingDaoImpl;
 import com.cloud.user.UserStatisticsVO;
+import com.cloud.user.dao.UserStatisticsDao;
 import com.cloud.user.dao.UserStatisticsDaoImpl;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GenericDaoBase;
@@ -57,10 +61,10 @@ public class DomainRouterDaoImpl extends 
GenericDaoBase<DomainRouterVO, Long> im
     protected SearchBuilder<DomainRouterVO> HostUpSearch;
     protected SearchBuilder<DomainRouterVO> StateNetworkTypeSearch;
     protected SearchBuilder<DomainRouterVO> OutsidePodSearch;
-    @Inject HostDaoImpl _hostsDao;
-    @Inject RouterNetworkDaoImpl _routerNetworkDao;
-    @Inject UserStatisticsDaoImpl _userStatsDao;
-    @Inject NetworkOfferingDaoImpl _offDao;
+    @Inject HostDao _hostsDao;
+    @Inject RouterNetworkDao _routerNetworkDao;
+    @Inject UserStatisticsDao _userStatsDao;
+    @Inject NetworkOfferingDao _offDao;
     protected SearchBuilder<DomainRouterVO> VpcSearch;
     
     public DomainRouterDaoImpl() {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java 
b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
index 02604fe..4922828 100755
--- a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
+++ b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
@@ -35,6 +35,7 @@ import org.springframework.stereotype.Component;
 
 import com.cloud.configuration.Resource;
 import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 import com.cloud.user.Account;
 
@@ -79,7 +80,7 @@ public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, 
Long> implements Use
     protected SearchBuilder<UserVmVO> UserVmByIsoSearch;
     protected Attribute _updateTimeAttr;
     // ResourceTagsDaoImpl _tagsDao = 
ComponentLocator.inject(ResourceTagsDaoImpl.class);
-    @Inject ResourceTagsDaoImpl _tagsDao;
+    @Inject ResourceTagDao _tagsDao;
    
     private static final String LIST_PODS_HAVING_VMS_FOR_ACCOUNT = "SELECT 
pod_id FROM cloud.vm_instance WHERE data_center_id = ? AND account_id = ? AND 
pod_id IS NOT NULL AND (state = 'Running' OR state = 'Stopped') " +
                "GROUP BY pod_id HAVING count(id) > 0 ORDER BY count(id) DESC";

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/server/test/com/cloud/agent/MockAgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/agent/MockAgentManagerImpl.java 
b/server/test/com/cloud/agent/MockAgentManagerImpl.java
index bdacf68..7e3462d 100755
--- a/server/test/com/cloud/agent/MockAgentManagerImpl.java
+++ b/server/test/com/cloud/agent/MockAgentManagerImpl.java
@@ -188,4 +188,10 @@ public class MockAgentManagerImpl extends ManagerBase 
implements AgentManager {
         return null;
     }
 
+       @Override
+       public void disconnectWithInvestigation(long hostId, Event event) {
+               // TODO Auto-generated method stub
+               
+       }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/utils/src/com/cloud/utils/component/ComponentContext.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentContext.java 
b/utils/src/com/cloud/utils/component/ComponentContext.java
index a6affc2..e598b85 100644
--- a/utils/src/com/cloud/utils/component/ComponentContext.java
+++ b/utils/src/com/cloud/utils/component/ComponentContext.java
@@ -55,8 +55,18 @@ public class ComponentContext implements 
ApplicationContextAware {
 
     private static ApplicationContext s_appContext;  
 
+    private static Advisor s_advisor;
+    private static ProxyFactory s_pf;
+    static {
+        s_advisor = new DefaultPointcutAdvisor(new MatchAnyMethodPointcut(),
+                new TransactionContextBuilder());
+        s_pf = new ProxyFactory();
+        s_pf.addAdvisor(s_advisor);
+    }
+    
     @Override
-    public void setApplicationContext(ApplicationContext applicationContext) { 
 
+    public void setApplicationContext(ApplicationContext applicationContext) {
+       s_logger.info("Setup Spring Application context");
         s_appContext = applicationContext;  
     }  
 
@@ -157,27 +167,24 @@ public class ComponentContext implements 
ApplicationContextAware {
 
     public static <T> T getComponent(Class<T> beanType) {
         assert(s_appContext != null);
-        try {
-            return s_appContext.getBean(beanType);
-        } catch(NoSuchBeanDefinitionException e) {
-            Map<String, T> matchedTypes = getComponentsOfType(beanType);
-            if(matchedTypes.size() > 0) {
-                for(Map.Entry<String, T> entry : matchedTypes.entrySet()) {
-                    Primary primary = 
getTargetClass(entry.getValue()).getAnnotation(Primary.class);
-                    if(primary != null)
-                        return entry.getValue();
-                }
+        Map<String, T> matchedTypes = getComponentsOfType(beanType);
+        if(matchedTypes.size() > 0) {
+            for(Map.Entry<String, T> entry : matchedTypes.entrySet()) {
+                Primary primary = 
getTargetClass(entry.getValue()).getAnnotation(Primary.class);
+                if(primary != null)
+                    return entry.getValue();
+            }
 
-                if(matchedTypes.size() > 1) {
-                    s_logger.warn("Unable to uniquely locate bean type " + 
beanType.getName());
-                    for(Map.Entry<String, T> entry : matchedTypes.entrySet()) {
-                        s_logger.warn("Candidate " + 
getTargetClass(entry.getValue()).getName());
-                    }
+            if(matchedTypes.size() > 1) {
+                s_logger.warn("Unable to uniquely locate bean type " + 
beanType.getName());
+                for(Map.Entry<String, T> entry : matchedTypes.entrySet()) {
+                    s_logger.warn("Candidate " + 
getTargetClass(entry.getValue()).getName());
                 }
-
-                return (T)matchedTypes.values().toArray()[0];
             }
+
+            return (T)matchedTypes.values().toArray()[0];
         }
+        
         throw new NoSuchBeanDefinitionException(beanType.getName());
     }
 
@@ -208,24 +215,19 @@ public class ComponentContext implements 
ApplicationContextAware {
         return (T)instance;
     }
 
-    @SuppressWarnings("unchecked")
-       public static <T> T inject(Class<T> clz) {
-        Object instance = 
s_appContext.getAutowireCapableBeanFactory().createBean(clz);
-        return (T)inject(instance);
+    public static <T> T inject(Class<T> clz) {
+        T instance = 
s_appContext.getAutowireCapableBeanFactory().createBean(clz);
+        return instance;
     }
 
     public static <T> T inject(Object instance) {
         // autowire dynamically loaded object
         AutowireCapableBeanFactory  beanFactory = 
s_appContext.getAutowireCapableBeanFactory();
         beanFactory.autowireBean(instance);
-
-        Advisor advisor = new DefaultPointcutAdvisor(new 
MatchAnyMethodPointcut(),
-                new TransactionContextBuilder());
-
-        ProxyFactory pf = new ProxyFactory();
-        pf.setTarget(instance);
-        pf.addAdvisor(advisor);
-
-        return (T)pf.getProxy();        
+        return (T)instance;
+/*
+        s_pf.setTarget(instance);
+        return (T)s_pf.getProxy();        
+*/  
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/utils/src/com/cloud/utils/db/GenericDao.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/GenericDao.java 
b/utils/src/com/cloud/utils/db/GenericDao.java
index c0a9029..3efc1c5 100755
--- a/utils/src/com/cloud/utils/db/GenericDao.java
+++ b/utils/src/com/cloud/utils/db/GenericDao.java
@@ -277,4 +277,6 @@ public interface GenericDao<T, ID extends Serializable> {
      * @return
      */
     Pair<List<T>, Integer> searchAndCount(SearchCriteria<T> sc, Filter filter);
+
+    Map<String, Attribute> getAllAttributes();
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/utils/src/com/cloud/utils/db/GenericDaoBase.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java 
b/utils/src/com/cloud/utils/db/GenericDaoBase.java
index cf30474..afb1247 100755
--- a/utils/src/com/cloud/utils/db/GenericDaoBase.java
+++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java
@@ -68,6 +68,7 @@ import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
+import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.component.ComponentLifecycle;
 import com.cloud.utils.component.ComponentLifecycleBase;
 import com.cloud.utils.crypt.DBEncryptionUtil;
@@ -118,7 +119,7 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
 
     protected final static TimeZone s_gmtTimeZone = 
TimeZone.getTimeZone("GMT");
 
-    protected final static Map<Class<?>, GenericDaoBase<?, ? extends 
Serializable>> s_daoMaps = new ConcurrentHashMap<Class<?>, GenericDaoBase<?, ? 
extends Serializable>>(71);
+    protected final static Map<Class<?>, GenericDao<?, ? extends 
Serializable>> s_daoMaps = new ConcurrentHashMap<Class<?>, GenericDao<?, ? 
extends Serializable>>(71);
 
     protected Class<T> _entityBeanType;
     protected String _table;
@@ -128,8 +129,8 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
     protected Field[] _embeddedFields;
 
     // This is private on purpose.  Everyone should use 
createPartialSelectSql()
-    private final Pair<StringBuilder, Attribute[]> _partialSelectSql;
-    private final Pair<StringBuilder, Attribute[]> _partialQueryCacheSelectSql;
+    private Pair<StringBuilder, Attribute[]> _partialSelectSql;
+    private Pair<StringBuilder, Attribute[]> _partialQueryCacheSelectSql;
     protected StringBuilder _discriminatorClause;
     protected Map<String, Object> _discriminatorValues;
     protected String _selectByIdSql;
@@ -141,11 +142,11 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
     protected Pair<String, Attribute> _removed;
     protected Pair<String, Attribute[]> _removeSql;
     protected List<Pair<String, Attribute[]>> _deleteSqls;
-    protected final Map<String, Attribute[]> _idAttributes;
-    protected final Map<String, TableGenerator> _tgs;
-    protected final Map<String, Attribute> _allAttributes;
-    protected final List<Attribute> _ecAttributes;
-    protected final Map<Pair<String, String>, Attribute> _allColumns;
+    protected Map<String, Attribute[]> _idAttributes;
+    protected Map<String, TableGenerator> _tgs;
+    protected Map<String, Attribute> _allAttributes;
+    protected List<Attribute> _ecAttributes;
+    protected Map<Pair<String, String>, Attribute> _allColumns;
     protected Enhancer _enhancer;
     protected Factory _factory;
     protected Enhancer _searchEnhancer;
@@ -159,9 +160,9 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
 
     protected static final SequenceFetcher s_seqFetcher = 
SequenceFetcher.getInstance();
 
-    public static <J> GenericDaoBase<? extends J, ? extends Serializable> 
getDao(Class<J> entityType) {
+    public static <J> GenericDao<? extends J, ? extends Serializable> 
getDao(Class<J> entityType) {
         @SuppressWarnings("unchecked")
-        GenericDaoBase<? extends J, ? extends Serializable> dao = 
(GenericDaoBase<? extends J, ? extends Serializable>)s_daoMaps.get(entityType);
+        GenericDao<? extends J, ? extends Serializable> dao = (GenericDao<? 
extends J, ? extends Serializable>)s_daoMaps.get(entityType);
         assert dao != null : "Unable to find DAO for " + entityType + ".  Are 
you sure you waited for the DAO to be initialized before asking for it?";
         return dao;
     }
@@ -192,13 +193,15 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
                     ( 
(Class<?>)((Class<?>)t).getGenericSuperclass()).getGenericSuperclass()).getActualTypeArguments()[0];
         }
 
-        s_daoMaps.put(_entityBeanType, this);
+/*        
+        s_daoMaps.put(_entityBeanType, 
ComponentContext.getComponent(this.getClass()));
         Class<?>[] interphaces = _entityBeanType.getInterfaces();
         if (interphaces != null) {
             for (Class<?> interphace : interphaces) {
-                s_daoMaps.put(interphace, this);
+                s_daoMaps.put(interphace, 
ComponentContext.getComponent(this.getClass()));
             }
         }
+*/  
         _table = DbUtil.getTableName(_entityBeanType);
 
         final SqlGenerator generator = new SqlGenerator(_entityBeanType);
@@ -1747,6 +1750,25 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
     public boolean configure(final String name, final Map<String, Object> 
params) throws ConfigurationException {
         _name = name;
 
+        Class<?> daoInterface = null;
+        for(Class<?> intf : this.getClass().getInterfaces()) {
+               if(GenericDao.class.isAssignableFrom(intf)) {
+                       daoInterface = intf;
+                       break;
+               }
+        }
+ 
+        if(daoInterface != null) {
+               s_logger.info("Register dao interface in GenericDaoBase 
entity-DAO map. " + daoInterface.getName());
+               s_daoMaps.put(_entityBeanType, (GenericDao<?, ? extends 
Serializable>) ComponentContext.getComponent(daoInterface));
+               Class<?>[] interphaces = _entityBeanType.getInterfaces();
+               if (interphaces != null) {
+                   for (Class<?> interphace : interphaces) {
+                       s_daoMaps.put(interphace,  (GenericDao<?, ? extends 
Serializable>) ComponentContext.getComponent(daoInterface));
+                   }
+               }
+           }
+       
         final String value = (String)params.get("lock.timeout");
         _timeoutSeconds = NumbersUtil.parseInt(value, 300);
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/utils/src/com/cloud/utils/db/QueryBuilder.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/QueryBuilder.java 
b/utils/src/com/cloud/utils/db/QueryBuilder.java
index 2eb3658..3303fbd 100644
--- a/utils/src/com/cloud/utils/db/QueryBuilder.java
+++ b/utils/src/com/cloud/utils/db/QueryBuilder.java
@@ -56,21 +56,21 @@ public class QueryBuilder<S, T> implements 
MethodInterceptor, SimpleQueryBuilder
         }
     }
     
-    protected HashMap<Class<?>, Pair<GenericDaoBase<?,?>, Object>> _entities;
+    protected HashMap<Class<?>, Pair<GenericDao<?,?>, Object>> _entities;
     protected ArrayList<Attribute> _specifiedAttrs = new 
ArrayList<Attribute>();
     protected T _resultSetClass;
     protected ArrayList<Select<S, T>> _selects;
     
     public QueryBuilder(Class<T> resultSetClass, Class<?>... clazzes) {
-        _entities = new HashMap<Class<?>, Pair<GenericDaoBase<?,?>, 
Object>>(clazzes.length);
+        _entities = new HashMap<Class<?>, Pair<GenericDao<?,?>, 
Object>>(clazzes.length);
         for (Class<?> clazz : clazzes) {
-            GenericDaoBase<?,?> dao = GenericDaoBase.getDao(clazz);
+            GenericDao<?,?> dao = GenericDaoBase.getDao(clazz);
             Enhancer searchEnhancer = new Enhancer();
             searchEnhancer.setSuperclass(clazz);
             searchEnhancer.setCallback(this);
             Object entity = searchEnhancer.create();
             
-            _entities.put(clazz, new Pair<GenericDaoBase<?, ?>, Object>(dao, 
entity));
+            _entities.put(clazz, new Pair<GenericDao<?, ?>, Object>(dao, 
entity));
         }
     }
     
@@ -86,14 +86,14 @@ public class QueryBuilder<S, T> implements 
MethodInterceptor, SimpleQueryBuilder
      * @param resultSetClass result class to put the result set in.
      */
     public QueryBuilder(Class<S> entityClass, Class<T> resultSetClass) {
-        _entities = new HashMap<Class<?>, Pair<GenericDaoBase<?,?>, 
Object>>(1);
-        GenericDaoBase<?,?> dao = GenericDaoBase.getDao(entityClass);
+        _entities = new HashMap<Class<?>, Pair<GenericDao<?,?>, Object>>(1);
+        GenericDao<?,?> dao = GenericDaoBase.getDao(entityClass);
         Enhancer searchEnhancer = new Enhancer();
         searchEnhancer.setSuperclass(entityClass);
         searchEnhancer.setCallback(this);
         Object entity = searchEnhancer.create();
         
-        _entities.put(entityClass, new Pair<GenericDaoBase<?, ?>, Object>(dao, 
entity));
+        _entities.put(entityClass, new Pair<GenericDao<?, ?>, Object>(dao, 
entity));
     }
     
     @Override
@@ -114,7 +114,7 @@ public class QueryBuilder<S, T> implements 
MethodInterceptor, SimpleQueryBuilder
         return this;
     }
     
-    protected void set(GenericDaoBase<?, ?> dao , String name) {
+    protected void set(GenericDao<?, ?> dao , String name) {
         Attribute attr = dao.getAllAttributes().get(name);
         assert (attr != null) : "Searching for a field that's not there: " + 
name;
         _specifiedAttrs.add(attr);
@@ -125,9 +125,9 @@ public class QueryBuilder<S, T> implements 
MethodInterceptor, SimpleQueryBuilder
     public Object intercept(Object entity, Method method, Object[] args, 
MethodProxy proxy) throws Throwable {
         Class<?> entityClass = entity.getClass().getSuperclass();
         
-        Pair<GenericDaoBase<?,?>, Object> daoInfo = _entities.get(entityClass);
+        Pair<GenericDao<?,?>, Object> daoInfo = _entities.get(entityClass);
         assert (daoInfo != null) : "You need to specify " + entityClass + " as 
one of the entities in the Query";
-        GenericDaoBase<?,?> dao = daoInfo.first();
+        GenericDao<?,?> dao = daoInfo.first();
         
         String name = method.getName();
         if (name.startsWith("get")) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/333dd810/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/TransactionContextBuilder.java 
b/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
index 9b474d5..2cbaa30 100644
--- a/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
+++ b/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
@@ -33,16 +33,8 @@ public class TransactionContextBuilder implements 
MethodInterceptor {
        public Object AroundAnyMethod(ProceedingJoinPoint call) throws 
Throwable {
                MethodSignature methodSignature = 
(MethodSignature)call.getSignature();
         Method targetMethod = methodSignature.getMethod();     
-        if(needToIntercept(targetMethod)) {
-               Transaction txn = null;
-               try {
-                       Signature s = call.getSignature();
-                       String name = s.getName();
-                       txn = Transaction.open(name);
-               } catch (Throwable e) {
-                       s_logger.debug("Failed to open transaction: " + 
e.toString());
-                       throw e;
-               }
+        if(true) { // TODO ??? needToIntercept(targetMethod)) {
+                       Transaction txn = 
Transaction.open(call.getSignature().getName());
                        Object ret = null;
                        try {
                                 ret = call.proceed();

Reply via email to