This is an automated email from the ASF dual-hosted git repository.

alien11689 pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/aries.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 24831e6a6 ARIES-2171: Use blueprint-maven-plugin in samples 
(idverifier untouched)
24831e6a6 is described below

commit 24831e6a6d47d63e5933475a05338c9f88ad4e59
Author: Dominik Przybysz <[email protected]>
AuthorDate: Sun Mar 16 11:35:05 2025 +0100

    ARIES-2171: Use blueprint-maven-plugin in samples (idverifier untouched)
---
 .../ariestrader/modules/ariestrader-core/pom.xml   |  13 ++
 .../ariestrader/core/TradeDBManagerImpl.java       |   4 +
 .../ariestrader/core/TradeServicesManagerImpl.java | 136 +++++------
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  41 ----
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  17 +-
 .../modules/ariestrader-persist-jdbc/pom.xml       |  13 ++
 .../ariestrader/persist/jdbc/TradeJdbc.java        |  30 ++-
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  35 ---
 .../modules/ariestrader-persist-jpa-am/pom.xml     |  20 ++
 .../ariestrader/persist/jpa/am/TradeJpaAm.java     |  21 +-
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  36 ---
 .../modules/ariestrader-persist-jpa-cm/pom.xml     |  28 +++
 .../ariestrader/persist/jpa/cm/TradeJpaCm.java     | 248 ++++++++++-----------
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  38 ----
 samples/blog/blog-biz/pom.xml                      |  19 ++
 .../samples/blog/biz/BlogAuthorManagerImpl.java    |  36 +--
 .../samples/blog/biz/BlogCommentManagerImpl.java   |  10 +-
 .../samples/blog/biz/BlogEntryManagerImpl.java     |   5 +-
 .../samples/blog/biz/BloggingServiceImpl.java      |  23 +-
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  47 ----
 samples/blog/blog-persistence-jdbc/pom.xml         |  24 +-
 .../jdbc/BlogPersistenceServiceImpl.java           | 104 +++++----
 .../blog/persistence/jdbc/DatasourceProducer.java} |  31 +--
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  34 ---
 samples/blog/blog-persistence-jpa/pom.xml          |  29 ++-
 .../jpa/BlogPersistenceServiceImpl.java            |  78 ++++---
 .../resources/OSGI-INF/blueprint/blueprint.xml     |  34 ---
 .../helloworld/api/HelloWorldService.java          |  10 +-
 .../blueprint/helloworld/helloworld-client/pom.xml |  15 ++
 .../helloworld/client/HelloWorldClient.java        |  37 +--
 .../main/resources/OSGI-INF/blueprint/config.xml   |  27 ---
 .../blueprint/helloworld/helloworld-server/pom.xml |  15 ++
 .../helloworld/server/HelloWorldServiceImpl.java   |  25 ++-
 .../main/resources/OSGI-INF/blueprint/config.xml   |  27 ---
 .../blueprint-sample-idverifier-client.xml         |  68 ------
 samples/pom.xml                                    |  58 +++++
 36 files changed, 662 insertions(+), 774 deletions(-)

diff --git a/samples/ariestrader/modules/ariestrader-core/pom.xml 
b/samples/ariestrader/modules/ariestrader-core/pom.xml
index 78a4071f8..27097a2a0 100644
--- a/samples/ariestrader/modules/ariestrader-core/pom.xml
+++ b/samples/ariestrader/modules/ariestrader-core/pom.xml
@@ -41,6 +41,15 @@
             <artifactId>org.apache.aries.samples.ariestrader.api</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
@@ -56,6 +65,10 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git 
a/samples/ariestrader/modules/ariestrader-core/src/main/java/org/apache/aries/samples/ariestrader/core/TradeDBManagerImpl.java
 
b/samples/ariestrader/modules/ariestrader-core/src/main/java/org/apache/aries/samples/ariestrader/core/TradeDBManagerImpl.java
index 6c9a16323..83ee8d08e 100644
--- 
a/samples/ariestrader/modules/ariestrader-core/src/main/java/org/apache/aries/samples/ariestrader/core/TradeDBManagerImpl.java
+++ 
b/samples/ariestrader/modules/ariestrader-core/src/main/java/org/apache/aries/samples/ariestrader/core/TradeDBManagerImpl.java
@@ -18,6 +18,8 @@ package org.apache.aries.samples.ariestrader.core;
 
 import javax.sql.DataSource;
 
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.aries.blueprint.annotation.service.Service;
 import org.apache.aries.samples.ariestrader.api.persistence.RunStatsDataBean;
 import org.apache.aries.samples.ariestrader.util.Log;
 import org.apache.aries.samples.ariestrader.util.MDBStats;
@@ -42,6 +44,8 @@ import java.sql.Statement;
  *      org.apache.aries.samples.ariestrader.api.TradeDBManager
  */
 
+@Service
+@Bean(initMethod = "init", destroyMethod = "destroy")
 public class TradeDBManagerImpl implements TradeDBManager {
 
     private DataSource dataSource = null;
diff --git 
a/samples/ariestrader/modules/ariestrader-core/src/main/java/org/apache/aries/samples/ariestrader/core/TradeServicesManagerImpl.java
 
b/samples/ariestrader/modules/ariestrader-core/src/main/java/org/apache/aries/samples/ariestrader/core/TradeServicesManagerImpl.java
index 44e0d05e2..169c3bf79 100644
--- 
a/samples/ariestrader/modules/ariestrader-core/src/main/java/org/apache/aries/samples/ariestrader/core/TradeServicesManagerImpl.java
+++ 
b/samples/ariestrader/modules/ariestrader-core/src/main/java/org/apache/aries/samples/ariestrader/core/TradeServicesManagerImpl.java
@@ -1,26 +1,27 @@
 /**
- *  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.
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.aries.samples.ariestrader.core;
 
 import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import 
org.apache.aries.blueprint.annotation.referencelistener.ReferenceListener;
+import org.apache.aries.blueprint.annotation.service.Service;
 import 
org.apache.aries.samples.ariestrader.api.persistence.MarketSummaryDataBean;
 import org.apache.aries.samples.ariestrader.util.Log;
 import org.apache.aries.samples.ariestrader.util.TradeConfig;
@@ -32,32 +33,33 @@ import 
org.apache.aries.samples.ariestrader.api.TradeServices;
  * TradeServicesManagerImpl coordinates access to the currently
  * selected TradeServices implementation and manages the list of
  * currently available TradeServices implementations.
- * 
- * @see
- *      org.apache.geronimo.samples.daytrader.api.TradeServicesManager
- * 
+ *
+ * @see org.apache.aries.samples.ariestrader.api.TradeServicesManager
+ *
  */
-
+@Service
+@ReferenceListener(referenceInterface = TradeServices.class, bindMethod = 
"bindService", unbindMethod = "unbindService")
+@Bean(initMethod = "init")
 public class TradeServicesManagerImpl implements TradeServicesManager {
 
-    private static TradeServices[] tradeServicesList = new 
TradeServices[TradeConfig.runTimeModeNames.length] ;
+    private static TradeServices[] tradeServicesList = new 
TradeServices[TradeConfig.runTimeModeNames.length];
 
     // This lock is used to serialize market summary operations.
     private static final Integer marketSummaryLock = new Integer(0);
     private static long nextMarketSummary = System.currentTimeMillis();
-    private static MarketSummaryDataBean cachedMSDB = null; 
-    
+    private static MarketSummaryDataBean cachedMSDB = null;
+
     /**
-      * TradeServicesManagerImpl null constructor
-      */
+     * TradeServicesManagerImpl null constructor
+     */
     public TradeServicesManagerImpl() {
         if (Log.doTrace())
             Log.trace("TradeServicesManagerImpl()");
     }
 
     /**
-      * init
-      */
+     * init
+     */
     public void init() {
         if (Log.doTrace())
             Log.trace("TradeServicesManagerImpl:init()");
@@ -65,13 +67,13 @@ public class TradeServicesManagerImpl implements 
TradeServicesManager {
 
 
     /**
-      * Get CurrentModes that are registered
-      */
+     * Get CurrentModes that are registered
+     */
     public ArrayList<Integer> getCurrentModes() {
         if (Log.doTrace())
             Log.trace("TradeServicesManagerImpl:getCurrentModes()");
         ArrayList<Integer> modes = new ArrayList<Integer>();
-        for (int i=0; i<tradeServicesList.length; i++) {
+        for (int i = 0; i < tradeServicesList.length; i++) {
             TradeServices tradeServicesRef = tradeServicesList[i];
             if (tradeServicesRef != null) {
                 modes.add(i);
@@ -81,17 +83,17 @@ public class TradeServicesManagerImpl implements 
TradeServicesManager {
     }
 
     /**
-      * Get TradeServices reference
-      */
+     * Get TradeServices reference
+     */
     public TradeServices getTradeServices() {
-        if (Log.doTrace()) 
+        if (Log.doTrace())
             Log.trace("TradeServicesManagerImpl:getTradeServices()");
         return tradeServicesList[TradeConfig.getRunTimeMode().ordinal()];
     }
 
     /**
-      * Bind a new TradeServices implementation
-      */
+     * Bind a new TradeServices implementation
+     */
     public void bindService(TradeServices tradeServices, Map props) {
         if (Log.doTrace())
             Log.trace("TradeServicesManagerImpl:bindService()", tradeServices, 
props);
@@ -102,8 +104,8 @@ public class TradeServicesManagerImpl implements 
TradeServicesManager {
     }
 
     /**
-      * Unbind a TradeServices implementation
-      */
+     * Unbind a TradeServices implementation
+     */
     public void unbindService(TradeServices tradeServices, Map props) {
         if (Log.doTrace())
             Log.trace("TradeServicesManagerImpl:unbindService()", 
tradeServices, props);
@@ -123,47 +125,47 @@ public class TradeServicesManagerImpl implements 
TradeServicesManager {
      * @return An instance of the market summary
      */
     public MarketSummaryDataBean getMarketSummary() throws Exception {
-    
+
         if (Log.doActionTrace()) {
             Log.trace("TradeAction:getMarketSummary()");
         }
-    
+
         if (Log.doTrace())
             Log.trace("TradeServicesManagerImpl:getMarketSummary()");
 
         if (TradeConfig.getMarketSummaryInterval() == 0) return 
getMarketSummaryInternal();
         if (TradeConfig.getMarketSummaryInterval() < 0) return cachedMSDB;
-    
+
         /**
          * This is a little funky.  If its time to fetch a new Market summary 
then we'll synchronize
          * access to make sure only one requester does it.  Others will merely 
return the old copy until
          * the new MarketSummary has been executed.
          */
-         long currentTime = System.currentTimeMillis();
-         
-         if (currentTime > nextMarketSummary) {
-             long oldNextMarketSummary = nextMarketSummary;
-             boolean fetch = false;
-
-             synchronized (marketSummaryLock) {
-                 /**
-                  * Is it still ahead or did we miss lose the race?  If we 
lost then let's get out
-                  * of here as the work has already been done.
-                  */
-                 if (oldNextMarketSummary == nextMarketSummary) {
-                     fetch = true;
-                     nextMarketSummary += 
TradeConfig.getMarketSummaryInterval()*1000;
-                     
-                     /** 
-                      * If the server has been idle for a while then its 
possible that nextMarketSummary
-                      * could be way off.  Rather than try and play catch up 
we'll simply get in sync with the 
-                      * current time + the interval.
-                      */ 
-                     if (nextMarketSummary < currentTime) {
-                         nextMarketSummary = currentTime + 
TradeConfig.getMarketSummaryInterval()*1000;
-                     }
-                 }
-             }
+        long currentTime = System.currentTimeMillis();
+
+        if (currentTime > nextMarketSummary) {
+            long oldNextMarketSummary = nextMarketSummary;
+            boolean fetch = false;
+
+            synchronized (marketSummaryLock) {
+                /**
+                 * Is it still ahead or did we miss lose the race?  If we lost 
then let's get out
+                 * of here as the work has already been done.
+                 */
+                if (oldNextMarketSummary == nextMarketSummary) {
+                    fetch = true;
+                    nextMarketSummary += 
TradeConfig.getMarketSummaryInterval() * 1000;
+
+                    /**
+                     * If the server has been idle for a while then its 
possible that nextMarketSummary
+                     * could be way off.  Rather than try and play catch up 
we'll simply get in sync with the
+                     * current time + the interval.
+                     */
+                    if (nextMarketSummary < currentTime) {
+                        nextMarketSummary = currentTime + 
TradeConfig.getMarketSummaryInterval() * 1000;
+                    }
+                }
+            }
 
             /**
              * If we're the lucky one then let's update the MarketSummary
@@ -172,7 +174,7 @@ public class TradeServicesManagerImpl implements 
TradeServicesManager {
                 cachedMSDB = getMarketSummaryInternal();
             }
         }
-         
+
         return cachedMSDB;
     }
 
diff --git 
a/samples/ariestrader/modules/ariestrader-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/samples/ariestrader/modules/ariestrader-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index 317ddef98..000000000
--- 
a/samples/ariestrader/modules/ariestrader-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint  default-activation="lazy"  
-            xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-
-  <bean id="tradeServicesManagerBean" 
class="org.apache.aries.samples.ariestrader.core.TradeServicesManagerImpl" 
init-method="init">
-  </bean>
-
-  <service id="TradeServicesManager" ref="tradeServicesManagerBean" 
interface="org.apache.aries.samples.ariestrader.api.TradeServicesManager"/>
-
-  <bean id="tradeDBManagerBean" 
class="org.apache.aries.samples.ariestrader.core.TradeDBManagerImpl" 
init-method="init">
-  </bean>
-
-  <service id="TradeDBManager" ref="tradeDBManagerBean" 
interface="org.apache.aries.samples.ariestrader.api.TradeDBManager">
-  </service>
-
-  <reference-list id="tradeServicesList" availability="optional" 
activation="eager" 
interface="org.apache.aries.samples.ariestrader.api.TradeServices">
-      <reference-listener ref="tradeServicesManagerBean" 
bind-method="bindService" unbind-method="unbindService" />
-  </reference-list>
-
-
-</blueprint>
-
diff --git 
a/samples/ariestrader/modules/ariestrader-derby-ds/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/samples/ariestrader/modules/ariestrader-derby-ds/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 517f4b095..97a98acfb 100644
--- 
a/samples/ariestrader/modules/ariestrader-derby-ds/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ 
b/samples/ariestrader/modules/ariestrader-derby-ds/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -16,33 +16,32 @@
     limitations under the License.
 -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-                default-activation="eager">
-  
+           default-activation="eager">
+
     <bean id="derbyXADataSource" 
class="org.apache.derby.jdbc.EmbeddedXADataSource">
         <property name="databaseName" value="tradedb"/>
         <!-- This creates the database on the fly. See the persistence.xml  
under ariestrader-entities for property
           configuration. The DB is created from persistence entities, this is 
not recommended for production use.  -->
-       <property name="createDatabase" value="create" />
+        <property name="createDatabase" value="create"/>
     </bean>
-  
+
     <service id="TradeDataSource" ref="derbyXADataSource" 
interface="javax.sql.XADataSource">
         <service-properties>
             <entry key="osgi.jndi.service.name" value="jdbc/TradeDataSource"/>
         </service-properties>
     </service>
 
-  
+
     <bean id="derbyDataSource" 
class="org.apache.derby.jdbc.EmbeddedDataSource">
         <property name="databaseName" value="tradedb"/>
         <!-- This creates the database on the fly. -->
-       <property name="createDatabase" value="create" />
+        <property name="createDatabase" value="create"/>
     </bean>
-  
+
     <service id="NoTxTradeDataSource" ref="derbyDataSource" 
interface="javax.sql.DataSource">
         <service-properties>
             <entry key="osgi.jndi.service.name" 
value="jdbc/NoTxTradeDataSource"/>
         </service-properties>
     </service>
-  
+
 </blueprint>
diff --git a/samples/ariestrader/modules/ariestrader-persist-jdbc/pom.xml 
b/samples/ariestrader/modules/ariestrader-persist-jdbc/pom.xml
index 80e1ae094..58d8155e5 100644
--- a/samples/ariestrader/modules/ariestrader-persist-jdbc/pom.xml
+++ b/samples/ariestrader/modules/ariestrader-persist-jdbc/pom.xml
@@ -46,6 +46,15 @@
             <artifactId>org.apache.aries.samples.ariestrader.beans</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
@@ -64,6 +73,10 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git 
a/samples/ariestrader/modules/ariestrader-persist-jdbc/src/main/java/org/apache/aries/samples/ariestrader/persist/jdbc/TradeJdbc.java
 
b/samples/ariestrader/modules/ariestrader-persist-jdbc/src/main/java/org/apache/aries/samples/ariestrader/persist/jdbc/TradeJdbc.java
index 2cdc7ac60..9efae30a7 100644
--- 
a/samples/ariestrader/modules/ariestrader-persist-jdbc/src/main/java/org/apache/aries/samples/ariestrader/persist/jdbc/TradeJdbc.java
+++ 
b/samples/ariestrader/modules/ariestrader-persist-jdbc/src/main/java/org/apache/aries/samples/ariestrader/persist/jdbc/TradeJdbc.java
@@ -19,8 +19,12 @@ package org.apache.aries.samples.ariestrader.persist.jdbc;
 import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.ArrayList;
+import javax.inject.Inject;
 import javax.sql.DataSource;
 
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.aries.blueprint.annotation.service.Service;
+import org.apache.aries.blueprint.annotation.service.ServiceProperty;
 import org.apache.aries.samples.ariestrader.api.TradeServices;
 import org.apache.aries.samples.ariestrader.beans.AccountDataBeanImpl;
 import org.apache.aries.samples.ariestrader.beans.AccountProfileDataBeanImpl;
@@ -50,17 +54,20 @@ import java.sql.Timestamp;
  * Trade online broker application. These business methods represent the
  * features and operations that can be performed by customers of the brokerage
  * such as login, logout, get a stock quote, buy or sell a stock, etc. and are
- * specified in the {@link org.apache.aries.samples.ariestrader.TradeServices}
+ * specified in the {@link 
org.apache.aries.samples.ariestrader.api.TradeServices}
  * interface
- * 
+ *
  * Note: In order for this class to be thread-safe, a new TradeJDBC must be
  * created for each call to a method from the TradeInterface interface.
  * Otherwise, pooled connections may not be released.
- * 
- * @see org.apache.aries.samples.ariestrader.TradeServices
- * 
+ *
+ * @see org.apache.aries.samples.ariestrader.api.TradeServices
+ *
  */
-
+@Service(properties = {
+        @ServiceProperty(name = "mode", values = "JDBC")
+})
+@Bean(initMethod = "init")
 public class TradeJdbc implements TradeServices {
 
     private DataSource dataSource= null;
@@ -80,6 +87,7 @@ public class TradeJdbc implements TradeServices {
     /**
      * Zero arg constructor for TradeJdbc
      */
+    @Inject
     public TradeJdbc() {
     }
 
@@ -1004,7 +1012,7 @@ public class TradeJdbc implements TradeServices {
     /**
      * @see TradeServices#updateAccountProfile(AccountProfileDataBean)
      */
-    public AccountProfileDataBean updateAccountProfile(String userID, String 
password, String fullName, String address, String email, String creditcard) 
throws Exception {                              
+    public AccountProfileDataBean updateAccountProfile(String userID, String 
password, String fullName, String address, String email, String creditcard) 
throws Exception {
 
         AccountProfileDataBean accountProfileData = null;
         Connection conn = null;
@@ -1094,7 +1102,7 @@ public class TradeJdbc implements TradeServices {
 
     /**
      * Update a quote's price and volume
-     * 
+     *
      * @param symbol
      *            The PK of the quote
      * @param changeFactor
@@ -1581,7 +1589,7 @@ public class TradeJdbc implements TradeServices {
 
     /**
      * Gets the inGlobalTxn
-     * 
+     *
      * @return Returns a boolean
      */
     private boolean getInGlobalTxn() {
@@ -1590,7 +1598,7 @@ public class TradeJdbc implements TradeServices {
 
     /**
      * Sets the inGlobalTxn
-     * 
+     *
      * @param inGlobalTxn
      *            The inGlobalTxn to set
      */
@@ -1600,7 +1608,7 @@ public class TradeJdbc implements TradeServices {
 
     /**
      * Get mode - returns the persistence mode (TradeConfig.JDBC)
-     * 
+     *
      * @return TradeConfig.ModeType
      */
     public TradeConfig.ModeType getMode() {
diff --git 
a/samples/ariestrader/modules/ariestrader-persist-jdbc/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/samples/ariestrader/modules/ariestrader-persist-jdbc/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index b5a5fcc4e..000000000
--- 
a/samples/ariestrader/modules/ariestrader-persist-jdbc/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint  default-activation="lazy"  
-            xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-
-  <bean id="tradeServicesBeanJDBC" 
class="org.apache.aries.samples.ariestrader.persist.jdbc.TradeJdbc" 
init-method="init">
-      <!--<property name="inSession" value="true"/>-->
-  </bean>
-
-  <service id="tradeServicesJDBC" ref="tradeServicesBeanJDBC" 
interface="org.apache.aries.samples.ariestrader.api.TradeServices">
-      <service-properties>
-          <entry key="mode" value="JDBC"/>
-      </service-properties>
-  </service>
-
-</blueprint>
-
diff --git a/samples/ariestrader/modules/ariestrader-persist-jpa-am/pom.xml 
b/samples/ariestrader/modules/ariestrader-persist-jpa-am/pom.xml
index cc39e2777..1144c0a2b 100644
--- a/samples/ariestrader/modules/ariestrader-persist-jpa-am/pom.xml
+++ b/samples/ariestrader/modules/ariestrader-persist-jpa-am/pom.xml
@@ -55,6 +55,14 @@
             <groupId>org.apache.openjpa</groupId>
             <artifactId>openjpa</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
@@ -74,6 +82,18 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+                <configuration>
+                    <namespaces>
+                        
<namespace>http://aries.apache.org/xmlns/jpa/v1.1.0</namespace>
+                    </namespaces>
+                    <customParameters>
+                        
<transaction.enableAnnotation>false</transaction.enableAnnotation>
+                    </customParameters>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git 
a/samples/ariestrader/modules/ariestrader-persist-jpa-am/src/main/java/org/apache/aries/samples/ariestrader/persist/jpa/am/TradeJpaAm.java
 
b/samples/ariestrader/modules/ariestrader-persist-jpa-am/src/main/java/org/apache/aries/samples/ariestrader/persist/jpa/am/TradeJpaAm.java
index edd6b8b97..55302194e 100644
--- 
a/samples/ariestrader/modules/ariestrader-persist-jpa-am/src/main/java/org/apache/aries/samples/ariestrader/persist/jpa/am/TradeJpaAm.java
+++ 
b/samples/ariestrader/modules/ariestrader-persist-jpa-am/src/main/java/org/apache/aries/samples/ariestrader/persist/jpa/am/TradeJpaAm.java
@@ -24,8 +24,12 @@ import java.util.Iterator;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
 import javax.persistence.Query;
 
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.aries.blueprint.annotation.service.Service;
+import org.apache.aries.blueprint.annotation.service.ServiceProperty;
 import org.apache.aries.samples.ariestrader.api.TradeServices;
 import org.apache.aries.samples.ariestrader.entities.AccountDataBeanImpl;
 import 
org.apache.aries.samples.ariestrader.entities.AccountProfileDataBeanImpl;
@@ -50,17 +54,20 @@ import 
org.apache.aries.samples.ariestrader.util.TradeConfig;
  * by customers of the brokerage such as login, logout, get a
  * stock quote, buy or sell a stock, etc. and are specified in
  * the {@link
- * org.apache.aries.samples.ariestrader.TradeServices}
+ * org.apache.aries.samples.ariestrader.api.TradeServices}
  * interface
  * 
- * @see org.apache.aries.samples.ariestrader.TradeServices
+ * @see org.apache.aries.samples.ariestrader.api.TradeServices
  * 
  */
-
+@Service(properties = {
+        @ServiceProperty(name = "mode", values = "JPA_AM")
+})
+@Bean(initMethod = "init", destroyMethod = "destroy")
 public class TradeJpaAm implements TradeServices {
 
-//    @PersistenceUnit(unitName="ariestrader-am")
-    private static EntityManagerFactory emf;
+    @PersistenceUnit(unitName="ariestrader-am")
+    private EntityManagerFactory emf;
 
     private static boolean initialized = false;
 
@@ -70,10 +77,6 @@ public class TradeJpaAm implements TradeServices {
     public TradeJpaAm() {
     }
 
-    public void setEmf (EntityManagerFactory emf) { 
-        this.emf = emf;
-    }
-
     public void init() {
         if (initialized)
             return;
diff --git 
a/samples/ariestrader/modules/ariestrader-persist-jpa-am/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/samples/ariestrader/modules/ariestrader-persist-jpa-am/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index e121f1f44..000000000
--- 
a/samples/ariestrader/modules/ariestrader-persist-jpa-am/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint  default-activation="lazy" 
-            xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-            xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0";>
-
-  <bean id="tradeServicesBeanJPA-AM" 
class="org.apache.aries.samples.ariestrader.persist.jpa.am.TradeJpaAm" 
init-method="init"> 
-      <jpa:unit property="emf" unitname="ariestrader-am" />
-  </bean>
-  
-  <service id="tradeServicesJPA-AM" ref="tradeServicesBeanJPA-AM" 
interface="org.apache.aries.samples.ariestrader.api.TradeServices">
-      <service-properties>
-          <entry key="mode" value="JPA_AM"/>
-      </service-properties>
-  </service>
-
-</blueprint>
-
diff --git a/samples/ariestrader/modules/ariestrader-persist-jpa-cm/pom.xml 
b/samples/ariestrader/modules/ariestrader-persist-jpa-cm/pom.xml
index af9547410..69bd737f5 100644
--- a/samples/ariestrader/modules/ariestrader-persist-jpa-cm/pom.xml
+++ b/samples/ariestrader/modules/ariestrader-persist-jpa-cm/pom.xml
@@ -55,6 +55,21 @@
             <groupId>org.apache.openjpa</groupId>
             <artifactId>openjpa</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.transaction</groupId>
+            <artifactId>javax.transaction-api</artifactId>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
     <build>
@@ -74,6 +89,19 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+                <configuration>
+                    <namespaces>
+                        
<namespace>http://aries.apache.org/xmlns/jpa/v1.1.0</namespace>
+                        
<namespace>http://aries.apache.org/xmlns/transactions/v1.2.0</namespace>
+                    </namespaces>
+                    <customParameters>
+                        
<transaction.enableAnnotation>false</transaction.enableAnnotation>
+                    </customParameters>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git 
a/samples/ariestrader/modules/ariestrader-persist-jpa-cm/src/main/java/org/apache/aries/samples/ariestrader/persist/jpa/cm/TradeJpaCm.java
 
b/samples/ariestrader/modules/ariestrader-persist-jpa-cm/src/main/java/org/apache/aries/samples/ariestrader/persist/jpa/cm/TradeJpaCm.java
index 74d048f1d..ffbd55463 100644
--- 
a/samples/ariestrader/modules/ariestrader-persist-jpa-cm/src/main/java/org/apache/aries/samples/ariestrader/persist/jpa/cm/TradeJpaCm.java
+++ 
b/samples/ariestrader/modules/ariestrader-persist-jpa-cm/src/main/java/org/apache/aries/samples/ariestrader/persist/jpa/cm/TradeJpaCm.java
@@ -1,46 +1,50 @@
 /**
- *  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.
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.aries.samples.ariestrader.persist.jpa.cm;
 
-import java.math.BigDecimal;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.aries.blueprint.annotation.service.Service;
+import org.apache.aries.blueprint.annotation.service.ServiceProperty;
 import org.apache.aries.samples.ariestrader.api.TradeServices;
-import org.apache.aries.samples.ariestrader.entities.AccountDataBeanImpl;
-import 
org.apache.aries.samples.ariestrader.entities.AccountProfileDataBeanImpl;
-import org.apache.aries.samples.ariestrader.entities.HoldingDataBeanImpl;
-import org.apache.aries.samples.ariestrader.entities.OrderDataBeanImpl;
-import org.apache.aries.samples.ariestrader.entities.QuoteDataBeanImpl;
 import org.apache.aries.samples.ariestrader.api.persistence.AccountDataBean;
 import 
org.apache.aries.samples.ariestrader.api.persistence.AccountProfileDataBean;
 import org.apache.aries.samples.ariestrader.api.persistence.HoldingDataBean;
 import 
org.apache.aries.samples.ariestrader.api.persistence.MarketSummaryDataBean;
 import org.apache.aries.samples.ariestrader.api.persistence.OrderDataBean;
 import org.apache.aries.samples.ariestrader.api.persistence.QuoteDataBean;
+import org.apache.aries.samples.ariestrader.entities.AccountDataBeanImpl;
+import 
org.apache.aries.samples.ariestrader.entities.AccountProfileDataBeanImpl;
+import org.apache.aries.samples.ariestrader.entities.HoldingDataBeanImpl;
+import org.apache.aries.samples.ariestrader.entities.OrderDataBeanImpl;
+import org.apache.aries.samples.ariestrader.entities.QuoteDataBeanImpl;
 import org.apache.aries.samples.ariestrader.util.FinancialUtils;
 import org.apache.aries.samples.ariestrader.util.Log;
 import org.apache.aries.samples.ariestrader.util.TradeConfig;
 
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.transaction.Transactional;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
 /**
  * TradeJpaCm uses JPA via Container Managed (CM) Entity
  * Managers to implement the business methods of the Trade
@@ -48,24 +52,23 @@ import 
org.apache.aries.samples.ariestrader.util.TradeConfig;
  * the features and operations that can be performed by
  * customers of the brokerage such as login, logout, get a stock
  * quote, buy or sell a stock, etc. and are specified in the
- * {@link org.apache.aries.samples.ariestrader.TradeServices}
+ * {@link org.apache.aries.samples.ariestrader.api.TradeServices}
  * interface
- * 
- * @see org.apache.aries.samples.ariestrader.TradeServices
- * 
+ *
+ * @see org.apache.aries.samples.ariestrader.api.TradeServices
  */
-
+@Service(properties = {
+        @ServiceProperty(name = "mode", values = "JPA_CM")
+})
+@Bean(initMethod = "init", destroyMethod = "destroy")
+@Transactional(Transactional.TxType.REQUIRED)
 public class TradeJpaCm implements TradeServices {
 
-    private EntityManager entityManager;
+    @PersistenceContext(unitName = "ariestrader-cm")
+    EntityManager entityManager;
 
     private static boolean initialized = false;
 
-//    @PersistenceContext(unitName="ariestrader-cm")
-    public void setEntityManager (EntityManager em) { 
-        entityManager = em;
-    }
-
     /**
      * Zero arg constructor for TradeJpaCm
      */
@@ -89,8 +92,7 @@ public class TradeJpaCm implements TradeServices {
             if (!initialized)
                 return;
             Log.trace("TradeJpaCm:destroy");
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             Log.error("TradeJpaCm:destroy", e);
         }
 
@@ -112,7 +114,7 @@ public class TradeJpaCm implements TradeServices {
 
             QuoteDataBean[] quoteArray = (QuoteDataBean[]) quotes.toArray(new 
QuoteDataBean[quotes.size()]);
             ArrayList<QuoteDataBean> topGainers = new ArrayList<QuoteDataBean>(
-                                                                              
5);
+                    5);
             ArrayList<QuoteDataBean> topLosers = new 
ArrayList<QuoteDataBean>(5);
             BigDecimal TSIA = FinancialUtils.ZERO;
             BigDecimal openTSIA = FinancialUtils.ZERO;
@@ -133,15 +135,14 @@ public class TradeJpaCm implements TradeServices {
                     totalVolume += volume;
                 }
                 TSIA = TSIA.divide(new BigDecimal(quoteArray.length),
-                                   FinancialUtils.ROUND);
+                        FinancialUtils.ROUND);
                 openTSIA = openTSIA.divide(new BigDecimal(quoteArray.length),
-                                           FinancialUtils.ROUND);
+                        FinancialUtils.ROUND);
             }
 
             marketSummaryData = new MarketSummaryDataBean(TSIA, openTSIA,
-                                                          totalVolume, 
topGainers, topLosers);
-        }
-        catch (Exception e) {
+                    totalVolume, topGainers, topLosers);
+        } catch (Exception e) {
             Log.error("TradeJpaCm:getMarketSummary", e);
             throw new RuntimeException("TradeJpaCm:getMarketSummary -- error 
", e);
         }
@@ -164,7 +165,7 @@ public class TradeJpaCm implements TradeServices {
 
             HoldingDataBeanImpl holding = null; // The holding will be created 
by this buy order
 
-            order = createOrder( account, (QuoteDataBean) quote, 
(HoldingDataBean) holding, "buy", quantity);
+            order = createOrder(account, (QuoteDataBean) quote, 
(HoldingDataBean) holding, "buy", quantity);
 
             // order = createOrder(account, quote, holding, "buy", quantity);
             // UPDATE - account should be credited during completeOrder
@@ -179,8 +180,7 @@ public class TradeJpaCm implements TradeServices {
                 completeOrder(order.getOrderID(), false);
             else if (orderProcessingMode == TradeConfig.ASYNCH_2PHASE)
                 queueOrder(order.getOrderID(), true);
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             Log.error("TradeJpaCm:buy(" + userID + "," + symbol + "," + 
quantity + ") --> failed", e);
             /* On exception - cancel the order */
             // TODO figure out how to do this with JPA
@@ -212,8 +212,8 @@ public class TradeJpaCm implements TradeServices {
 
             if (holding == null) {
                 Log.error("TradeJpaCm:sell User " + userID
-                          + " attempted to sell holding " + holdingID
-                          + " which has already been sold");
+                        + " attempted to sell holding " + holdingID
+                        + " which has already been sold");
 
                 OrderDataBean orderData = new OrderDataBeanImpl();
                 orderData.setOrderStatus("cancelled");
@@ -245,8 +245,7 @@ public class TradeJpaCm implements TradeServices {
             else if (orderProcessingMode == TradeConfig.ASYNCH_2PHASE)
                 queueOrder(order.getOrderID(), true);
 
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             Log.error("TradeJpaCm:sell(" + userID + "," + holdingID + ") --> 
failed", e);
             // TODO figure out JPA cancel
             if (order != null)
@@ -264,9 +263,9 @@ public class TradeJpaCm implements TradeServices {
 
     public void queueOrder(Integer orderID, boolean twoPhase) {
         Log
-        .error("TradeJpaCm:queueOrder() not implemented for this runtime 
mode");
+                .error("TradeJpaCm:queueOrder() not implemented for this 
runtime mode");
         throw new UnsupportedOperationException(
-                                               "TradeJpaCm:queueOrder() not 
implemented for this runtime mode");
+                "TradeJpaCm:queueOrder() not implemented for this runtime 
mode");
     }
 
     public OrderDataBean completeOrder(Integer orderID, boolean twoPhase) 
throws Exception {
@@ -296,9 +295,9 @@ public class TradeJpaCm implements TradeServices {
 
         if (Log.doTrace())
             Log.trace("TradeJpaCm:completeOrder--> Completing Order "
-                      + order.getOrderID() + "\n\t Order info: " + order
-                      + "\n\t Account info: " + account + "\n\t Quote info: "
-                      + quote + "\n\t Holding info: " + holding);
+                    + order.getOrderID() + "\n\t Order info: " + order
+                    + "\n\t Account info: " + account + "\n\t Quote info: "
+                    + quote + "\n\t Holding info: " + holding);
 
         HoldingDataBean newHolding = null;
         if (order.isBuy()) {
@@ -325,8 +324,7 @@ public class TradeJpaCm implements TradeServices {
                     Log.error("TradeJpaCm:completeOrder -- Unable to sell 
order " + order.getOrderID() + " holding already sold");
                     order.cancel();
                     return order;
-                }
-                else {
+                } else {
                     entityManager.remove(holding);
                     order.setHolding(null);
                 }
@@ -338,12 +336,11 @@ public class TradeJpaCm implements TradeServices {
 
             if (Log.doTrace())
                 Log.trace("TradeJpaCm:completeOrder--> Completed Order "
-                          + order.getOrderID() + "\n\t Order info: " + order
-                          + "\n\t Account info: " + account + "\n\t Quote 
info: "
-                          + quote + "\n\t Holding info: " + holding);
+                        + order.getOrderID() + "\n\t Order info: " + order
+                        + "\n\t Account info: " + account + "\n\t Quote info: "
+                        + quote + "\n\t Holding info: " + holding);
 
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
         }
 
@@ -398,8 +395,7 @@ public class TradeJpaCm implements TradeServices {
                 Query updateStatus = 
entityManager.createNamedQuery("orderejb.completeClosedOrders");
                 updateStatus.setParameter("userID", userID);
                 updateStatus.executeUpdate();
-            }
-            else if (TradeConfig.jpaLayer == TradeConfig.HIBERNATE) {
+            } else if (TradeConfig.jpaLayer == TradeConfig.HIBERNATE) {
                 /*
                  * Add logic to do update orders operation, because JBoss5'
                  * Hibernate 3.3.1GA DB2Dialect and MySQL5Dialect do not work
@@ -407,31 +403,30 @@ public class TradeJpaCm implements TradeServices {
                  * in OrderDatabean
                  */
                 Query findaccountid = entityManager.createNativeQuery(
-                                                        "select "
-                                                        + "a.ACCOUNTID, "
-                                                        + "a.LOGINCOUNT, "
-                                                        + "a.LOGOUTCOUNT, "
-                                                        + "a.LASTLOGIN, "
-                                                        + "a.CREATIONDATE, "
-                                                        + "a.BALANCE, "
-                                                        + "a.OPENBALANCE, "
-                                                        + "a.PROFILE_USERID "
-                                                        + "from accountejb a 
where a.profile_userid = ?",
-                                                        
org.apache.aries.samples.ariestrader.entities.AccountDataBeanImpl.class);
+                        "select "
+                                + "a.ACCOUNTID, "
+                                + "a.LOGINCOUNT, "
+                                + "a.LOGOUTCOUNT, "
+                                + "a.LASTLOGIN, "
+                                + "a.CREATIONDATE, "
+                                + "a.BALANCE, "
+                                + "a.OPENBALANCE, "
+                                + "a.PROFILE_USERID "
+                                + "from accountejb a where a.profile_userid = 
?",
+                        
org.apache.aries.samples.ariestrader.entities.AccountDataBeanImpl.class);
                 findaccountid.setParameter(1, userID);
                 AccountDataBeanImpl account = (AccountDataBeanImpl) 
findaccountid.getSingleResult();
                 Integer accountid = account.getAccountID();
                 Query updateStatus = entityManager.createNativeQuery("UPDATE 
orderejb o SET o.orderStatus = 'completed' WHERE "
-                                                                     + 
"o.orderStatus = 'closed' AND o.ACCOUNT_ACCOUNTID  = ?");
+                        + "o.orderStatus = 'closed' AND o.ACCOUNT_ACCOUNTID  = 
?");
                 updateStatus.setParameter(1, accountid.intValue());
                 updateStatus.executeUpdate();
             }
             return results;
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             Log.error("TradeJpaCm.getClosedOrders", e);
             throw new RuntimeException(
-                                      "TradeJpaCm.getClosedOrders - error", e);
+                    "TradeJpaCm.getClosedOrders - error", e);
 
         }
 
@@ -447,8 +442,7 @@ public class TradeJpaCm implements TradeServices {
                 Log.trace("TradeJpaCm:createQuote-->" + quote);
 
             return quote;
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             Log.error("TradeJpaCm:createQuote -- exception creating Quote", e);
             throw new RuntimeException(e);
         }
@@ -489,10 +483,10 @@ public class TradeJpaCm implements TradeServices {
         if (TradeConfig.jpaLayer == TradeConfig.HIBERNATE) {
             quote = entityManager.find(QuoteDataBeanImpl.class, symbol);
         } else if (TradeConfig.jpaLayer == TradeConfig.OPENJPA) {
-  
+
             Query q = 
entityManager.createNamedQuery("quoteejb.quoteForUpdate");
             q.setParameter(1, symbol);
-  
+
             quote = (QuoteDataBeanImpl) q.getSingleResult();
         }
 
@@ -569,12 +563,12 @@ public class TradeJpaCm implements TradeServices {
         return apb;
     }
 
-    public AccountProfileDataBean updateAccountProfile( String userID, 
-                                                        String password, 
-                                                        String fullName, 
-                                                        String address, 
-                                                        String email, 
-                                                        String creditcard) 
throws Exception {
+    public AccountProfileDataBean updateAccountProfile(String userID,
+                                                       String password,
+                                                       String fullName,
+                                                       String address,
+                                                       String email,
+                                                       String creditcard) 
throws Exception {
 
 
         if (Log.doTrace())
@@ -586,9 +580,9 @@ public class TradeJpaCm implements TradeServices {
          * profileData.getUserID()); // In order for the object to merge
          * correctly, the account has to be hooked into the temp object... // -
          * may need to reverse this and obtain the full object first
-         * 
+         *
          * profileData.setAccount(temp.getAccount());
-         * 
+         *
          * //TODO this might not be correct temp =
          * entityManager.merge(profileData); //System.out.println(temp);
          */
@@ -605,7 +599,7 @@ public class TradeJpaCm implements TradeServices {
     }
 
     public AccountDataBean login(String userID, String password)
-    throws Exception {
+            throws Exception {
 
         AccountProfileDataBeanImpl profile = 
entityManager.find(AccountProfileDataBeanImpl.class, userID);
 
@@ -639,11 +633,11 @@ public class TradeJpaCm implements TradeServices {
             Log.trace("TradeJpaCm:logout(" + userID + ") success");
     }
 
-    public AccountDataBean register(String userID, 
-                                    String password, 
-                                    String fullname, 
-                                    String address, 
-                                    String email, 
+    public AccountDataBean register(String userID,
+                                    String password,
+                                    String fullname,
+                                    String address,
+                                    String email,
                                     String creditcard,
                                     BigDecimal openBalance) throws Exception {
         AccountDataBeanImpl account = null;
@@ -659,13 +653,12 @@ public class TradeJpaCm implements TradeServices {
         if (profile != null) {
             Log.error("Failed to register new Account - AccountProfile with 
userID(" + userID + ") already exists");
             return null;
-        }
-        else {
+        } else {
             profile = new AccountProfileDataBeanImpl(userID, password, 
fullname,
-                                                 address, email, creditcard);
+                    address, email, creditcard);
             account = new AccountDataBeanImpl(0, 0, null, new 
Timestamp(System.currentTimeMillis()), openBalance, openBalance, userID);
-            profile.setAccount((AccountDataBean)account);
-            account.setProfile((AccountProfileDataBean)profile);
+            profile.setAccount((AccountDataBean) account);
+            account.setProfile((AccountProfileDataBean) profile);
             entityManager.persist(profile);
             entityManager.persist(account);
             // Uncomment this line to verify that datasources has been 
enlisted.  After rebuild attempt to register a user with
@@ -695,23 +688,22 @@ public class TradeJpaCm implements TradeServices {
         OrderDataBeanImpl order;
         if (Log.doTrace())
             Log.trace("TradeJpaCm:createOrder(orderID=" + " account="
-                      + ((account == null) ? null : account.getAccountID())
-                      + " quote=" + ((quote == null) ? null : 
quote.getSymbol())
-                      + " orderType=" + orderType + " quantity=" + quantity);
+                    + ((account == null) ? null : account.getAccountID())
+                    + " quote=" + ((quote == null) ? null : quote.getSymbol())
+                    + " orderType=" + orderType + " quantity=" + quantity);
         try {
-            order = new OrderDataBeanImpl(orderType, 
-                                      "open", 
-                                      new 
Timestamp(System.currentTimeMillis()), 
-                                      null, 
-                                      quantity, 
-                                      
quote.getPrice().setScale(FinancialUtils.SCALE, FinancialUtils.ROUND),
-                                      TradeConfig.getOrderFee(orderType), 
-                                      account, 
-                                      quote, 
-                                      holding);
-                entityManager.persist(order);
-        }
-        catch (Exception e) {
+            order = new OrderDataBeanImpl(orderType,
+                    "open",
+                    new Timestamp(System.currentTimeMillis()),
+                    null,
+                    quantity,
+                    quote.getPrice().setScale(FinancialUtils.SCALE, 
FinancialUtils.ROUND),
+                    TradeConfig.getOrderFee(orderType),
+                    account,
+                    quote,
+                    holding);
+            entityManager.persist(order);
+        } catch (Exception e) {
             Log.error("TradeJpaCm:createOrder -- failed to create Order", e);
             throw new RuntimeException("TradeJpaCm:createOrder -- failed to 
create Order", e);
         }
@@ -719,18 +711,18 @@ public class TradeJpaCm implements TradeServices {
     }
 
     private HoldingDataBean createHolding(AccountDataBean account,
-                                          QuoteDataBean quote, 
-                                          double quantity, 
+                                          QuoteDataBean quote,
+                                          double quantity,
                                           BigDecimal purchasePrice) throws 
Exception {
         HoldingDataBeanImpl newHolding = new HoldingDataBeanImpl(quantity,
-                                                         purchasePrice, new 
Timestamp(System.currentTimeMillis()),
-                                                         account, quote);
+                purchasePrice, new Timestamp(System.currentTimeMillis()),
+                account, quote);
         entityManager.persist(newHolding);
         return newHolding;
     }
 
     public double investmentReturn(double investment, double NetValue)
-    throws Exception {
+            throws Exception {
         if (Log.doTrace())
             Log.trace("TradeJpaCm:investmentReturn");
 
@@ -754,7 +746,7 @@ public class TradeJpaCm implements TradeServices {
 
     /**
      * Get mode - returns the persistence mode (TradeConfig.JPA)
-     * 
+     *
      * @return TradeConfig.ModeType
      */
     public TradeConfig.ModeType getMode() {
diff --git 
a/samples/ariestrader/modules/ariestrader-persist-jpa-cm/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/samples/ariestrader/modules/ariestrader-persist-jpa-cm/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index c1c030fc2..000000000
--- 
a/samples/ariestrader/modules/ariestrader-persist-jpa-cm/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint  default-activation="lazy" 
-            xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-            xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0";
-            xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0";>
-
-  <bean id="tradeServicesBeanJPA-CM" 
class="org.apache.aries.samples.ariestrader.persist.jpa.cm.TradeJpaCm" 
init-method="init"> 
-      <jpa:context property="entityManager" unitname="ariestrader-cm" />
-      <tx:transaction method="*" value="Required"/>
-  </bean>
-  
-  <service id="tradeServicesJPA-CM" ref="tradeServicesBeanJPA-CM" 
interface="org.apache.aries.samples.ariestrader.api.TradeServices">
-      <service-properties>
-          <entry key="mode" value="JPA_CM"/>
-      </service-properties>
-  </service>
-
-</blueprint>
-
diff --git a/samples/blog/blog-biz/pom.xml b/samples/blog/blog-biz/pom.xml
index c2039f773..be52ae0ea 100644
--- a/samples/blog/blog-biz/pom.xml
+++ b/samples/blog/blog-biz/pom.xml
@@ -45,7 +45,26 @@
             <groupId>org.apache.aries.samples.blog</groupId>
             <artifactId>org.apache.aries.samples.blog.api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
        
diff --git 
a/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogAuthorManagerImpl.java
 
b/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogAuthorManagerImpl.java
index e4b8412b7..a9c754e2a 100644
--- 
a/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogAuthorManagerImpl.java
+++ 
b/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogAuthorManagerImpl.java
@@ -25,38 +25,38 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.aries.blueprint.annotation.service.Reference;
 import org.apache.aries.samples.blog.api.*;
 import org.apache.aries.samples.blog.api.persistence.Author;
 import org.apache.aries.samples.blog.api.persistence.BlogPersistenceService;
 
+import javax.inject.Singleton;
 
-
+@Singleton
 public class BlogAuthorManagerImpl implements BlogAuthorManager
 {
   private BlogPersistenceService persistenceService;
 
-  // Blueprint injection used to set the persistenceService
-  public void setPersistenceService(BlogPersistenceService persistenceService)
-  {
-    this.persistenceService = persistenceService;
-  }
-  
-  public void createAuthor(String email, String dob, String name, String 
displayName, String bio) throws ParseException
+    public BlogAuthorManagerImpl(@Reference BlogPersistenceService 
persistenceService) {
+        this.persistenceService = persistenceService;
+    }
+
+    public void createAuthor(String email, String dob, String name, String 
displayName, String bio) throws ParseException
   {
     if(email == null) throw new IllegalArgumentException("Email must not be 
null");
-   
+
     Date dateOfBirth;
     dateOfBirth = (dob == null || "".equals(dob)) ? null : new 
SimpleDateFormat("yyyy-MM-dd").parse(dob);
-       
+
     persistenceService.createAuthor(email, dateOfBirth, name, displayName, 
bio);
   }
-  
+
   public List<? extends BlogAuthor> getAllAuthors()
   {
     List<? extends Author> authors = persistenceService.getAllAuthors();
     return adaptAuthor(authors);
   }
-  
+
   public BlogAuthor getAuthor(String emailAddress)
   {
     if(emailAddress == null) throw new IllegalArgumentException("Email must 
not be null");
@@ -66,25 +66,25 @@ public class BlogAuthorManagerImpl implements 
BlogAuthorManager
     else
       return null;
   }
-  
+
   public void removeAuthor(String emailAddress)
   {
     if(emailAddress == null) throw new IllegalArgumentException("Email must 
not be null");
     persistenceService.removeAuthor(emailAddress);
   }
-  
+
   public void updateAuthor(String email, String dob, String name, String 
displayName, String bio) throws ParseException
-  { 
+  {
     if(email == null) throw new IllegalArgumentException("Email must not be 
null");
-   
+
     Date dateOfBirth;
     dateOfBirth = (dob == null || "".equals(dob)) ? null : new 
SimpleDateFormat("yyyy-MM-dd").parse(dob);
 
     persistenceService.updateAuthor(email, dateOfBirth, name, displayName, 
bio);
   }
-  
+
   private List<? extends BlogAuthor> adaptAuthor(List<? extends Author> 
authors) {
     return new BlogListAdapter<BlogAuthor, Author>(authors, 
BlogAuthorImpl.class, Author.class);
   }
- 
+
 }
diff --git 
a/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogCommentManagerImpl.java
 
b/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogCommentManagerImpl.java
index 3513ae7f5..f5e929bb1 100644
--- 
a/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogCommentManagerImpl.java
+++ 
b/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogCommentManagerImpl.java
@@ -23,18 +23,26 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import 
org.apache.aries.blueprint.annotation.referencelistener.ReferenceListener;
+import org.apache.aries.blueprint.annotation.service.Availability;
+import org.apache.aries.blueprint.annotation.service.Reference;
 import org.apache.aries.samples.blog.api.BlogComment;
 import org.apache.aries.samples.blog.api.BlogCommentManager;
 import 
org.apache.aries.samples.blog.api.comment.persistence.BlogCommentService;
 import org.apache.aries.samples.blog.api.comment.persistence.Comment;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
 
+@ReferenceListener(referenceInterface = BlogCommentService.class, bindMethod = 
"blogServiceBound", unbindMethod = "blogServiceUnbound")
+@Singleton
 public class BlogCommentManagerImpl implements BlogCommentManager {
        
        private BlogCommentService commentService;
        private boolean commentServiceValid;
        
-       // Injected via blueprint
+       @Inject
+    @Reference(availability = Availability.OPTIONAL)
        public void setCommentService(BlogCommentService bcs) {
                commentService = bcs;
        }
diff --git 
a/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogEntryManagerImpl.java
 
b/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogEntryManagerImpl.java
index 6806568f7..9c16fb860 100644
--- 
a/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogEntryManagerImpl.java
+++ 
b/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BlogEntryManagerImpl.java
@@ -30,14 +30,17 @@ import org.apache.aries.samples.blog.api.BlogEntryManager;
 import org.apache.aries.samples.blog.api.persistence.BlogPersistenceService;
 import org.apache.aries.samples.blog.api.persistence.Entry;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
 
 
+@Singleton
 public class BlogEntryManagerImpl implements BlogEntryManager
 {
   private BlogPersistenceService persistenceService;
   
 
-  // Injected via blueprint
+  @Inject
   public void setPersistenceService(BlogPersistenceService persistenceService)
   {
     this.persistenceService = persistenceService;
diff --git 
a/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BloggingServiceImpl.java
 
b/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BloggingServiceImpl.java
index 06c5604fd..eb2b62e33 100644
--- 
a/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BloggingServiceImpl.java
+++ 
b/samples/blog/blog-biz/src/main/java/org/apache/aries/samples/blog/biz/BloggingServiceImpl.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.aries.blueprint.annotation.service.Service;
 import org.apache.aries.samples.blog.api.BlogAuthor;
 import org.apache.aries.samples.blog.api.BlogAuthorManager;
 import org.apache.aries.samples.blog.api.BlogComment;
@@ -31,28 +32,22 @@ import org.apache.aries.samples.blog.api.BlogEntry;
 import org.apache.aries.samples.blog.api.BlogEntryManager;
 import org.apache.aries.samples.blog.api.BloggingService;
 
+import javax.inject.Singleton;
+
 /** Implementation of the BloggingService */
+@Service(classes = BloggingService.class)
+@Singleton
 public class BloggingServiceImpl implements BloggingService {
     private BlogEntryManager blogEntryManager;
     private BlogAuthorManager blogAuthorManager;
     private BlogCommentManager blogCommentManager;
 
-    // Injected via blueprint
-    public void setBlogEntryManager(BlogEntryManager blogPostManager) {
-        this.blogEntryManager = blogPostManager;
-    }
-
-    // Injected via blueprint
-    public void setBlogAuthorManager(BlogAuthorManager authorManager) {
-        this.blogAuthorManager = authorManager;
+    public BloggingServiceImpl(BlogEntryManager blogEntryManager, 
BlogAuthorManager blogAuthorManager, BlogCommentManager blogCommentManager) {
+        this.blogEntryManager = blogEntryManager;
+        this.blogAuthorManager = blogAuthorManager;
+        this.blogCommentManager = blogCommentManager;
     }
 
-    // Injected via blueprint
-    public void setBlogCommentManager(BlogCommentManager commentManager) {
-        this.blogCommentManager = commentManager;
-    }
-
-
     public String getBlogTitle() {
         return new BlogImpl().getBlogTitle();
     }
diff --git 
a/samples/blog/blog-biz/src/main/resources/OSGI-INF/blueprint/blueprint.xml 
b/samples/blog/blog-biz/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index 0f7077f91..000000000
--- a/samples/blog/blog-biz/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-
-  <bean id="blogAuthorManager" 
class="org.apache.aries.samples.blog.biz.BlogAuthorManagerImpl">
-    <property name="persistenceService" ref="persistenceManager"/>
-  </bean>
-  
-  <bean id="blogEntryManager" 
class="org.apache.aries.samples.blog.biz.BlogEntryManagerImpl">
-    <property name="persistenceService" ref="persistenceManager"/>
-  </bean>
- 
-  <bean id="blogCommentManager" 
class="org.apache.aries.samples.blog.biz.BlogCommentManagerImpl">
-    <property name="commentService" ref="commentPersistenceService"/>
-  </bean>
-  
-  
-  <bean id="bloggingServiceComponent" 
class="org.apache.aries.samples.blog.biz.BloggingServiceImpl">
-    <property name="blogEntryManager" ref="blogEntryManager"/>
-    <property name="blogAuthorManager" ref="blogAuthorManager"/>
-    <property name="blogCommentManager" ref="blogCommentManager"/>
-  </bean>
-  
-  <service ref="bloggingServiceComponent" 
interface="org.apache.aries.samples.blog.api.BloggingService"/>
-
-  <reference id="persistenceManager" 
interface="org.apache.aries.samples.blog.api.persistence.BlogPersistenceService"/>
-
-  <reference id="commentPersistenceService" availability="optional" 
interface="org.apache.aries.samples.blog.api.comment.persistence.BlogCommentService">
-    <reference-listener ref="blogCommentManager" 
bind-method="blogServiceBound" unbind-method="blogServiceUnbound"/>
-  </reference>
-</blueprint>
diff --git a/samples/blog/blog-persistence-jdbc/pom.xml 
b/samples/blog/blog-persistence-jdbc/pom.xml
index 0a453de6e..f54d9385f 100644
--- a/samples/blog/blog-persistence-jdbc/pom.xml
+++ b/samples/blog/blog-persistence-jdbc/pom.xml
@@ -53,8 +53,30 @@
             <groupId>org.apache.derby</groupId>
             <artifactId>derby</artifactId>
         </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
-
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
 </project>
        
diff --git 
a/samples/blog/blog-persistence-jdbc/src/main/java/org/apache/aries/samples/blog/persistence/jdbc/BlogPersistenceServiceImpl.java
 
b/samples/blog/blog-persistence-jdbc/src/main/java/org/apache/aries/samples/blog/persistence/jdbc/BlogPersistenceServiceImpl.java
index 3e4719f95..ba2ad110a 100644
--- 
a/samples/blog/blog-persistence-jdbc/src/main/java/org/apache/aries/samples/blog/persistence/jdbc/BlogPersistenceServiceImpl.java
+++ 
b/samples/blog/blog-persistence-jdbc/src/main/java/org/apache/aries/samples/blog/persistence/jdbc/BlogPersistenceServiceImpl.java
@@ -28,8 +28,15 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Named;
 import javax.sql.DataSource;
 
+import org.apache.aries.blueprint.annotation.bean.Activation;
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.aries.blueprint.annotation.service.Service;
 import org.apache.aries.samples.blog.api.persistence.BlogPersistenceService;
 import org.apache.aries.samples.blog.persistence.jdbc.entity.AuthorImpl;
 import org.apache.aries.samples.blog.persistence.jdbc.entity.EntryImpl;
@@ -37,9 +44,11 @@ import 
org.apache.aries.samples.blog.persistence.jdbc.entity.EntryImpl;
 /**
  * This class is the implementation of the blogPersistenceService
  */
+@Service(classes = BlogPersistenceService.class)
+@Bean(activation = Activation.LAZY)
 public class BlogPersistenceServiceImpl implements BlogPersistenceService {
        private DataSource dataSource;
-       
+
     private Statements statements;
 
     public BlogPersistenceServiceImpl() {
@@ -49,10 +58,12 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
        /**
         * set data source
         */
+    @Inject
        public void setDataSource(DataSource dataSource) {
                this.dataSource = dataSource;
        }
 
+    @PostConstruct
     public void init() {
         Statement s = null;
         Connection connection = null;
@@ -85,6 +96,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
         }
     }
 
+    @PreDestroy
     public void destroy() {
         Statement s = null;
         Connection connection = null;
@@ -115,10 +127,10 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
             }
         }
     }
-       
+
        /**
         * Create an author record
-        * 
+        *
         * @param a
         *            The author object to be created
         * @throws ParseException
@@ -126,12 +138,12 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
         */
        public void createAuthor(String email, Date dob, String name,
                        String displayName, String bio) {
-               
-               
+
+
                try {
                        Connection connection = dataSource.getConnection();
                        String sql = "INSERT INTO AUTHOR VALUES (?,?,?,?,?)";
-                       
+
                        PreparedStatement ppsm = 
connection.prepareStatement(sql);
                        ppsm.setString(1, email);
                        ppsm.setString(2, bio);
@@ -144,7 +156,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                        int insertRows = ppsm.executeUpdate();
                        ppsm.close();
                        connection.close();
-                       
+
                        if (insertRows != 1)
                                throw new IllegalArgumentException("The Author 
" + email
                                                + " cannot be inserted.");
@@ -157,25 +169,25 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Create a blog entry record
-        * 
-        * @param a 
+        *
+        * @param a
         *                      The author
-        * @param title 
+        * @param title
         *                      The title of the post
-        * @param blogText 
+        * @param blogText
         *                      The text of the post
         * @param tags
-        * 
+        *
         */
        public void createBlogPost(String authorEmail, String title, String 
blogText,
                        List<String> tags) {
-               
+
                AuthorImpl a = getAuthor(authorEmail);
-               
+
                if(title == null) title = "";
                Date publishDate = new Date(System.currentTimeMillis());
                if(tags == null) tags = new ArrayList<String>();
-               
+
 
                try {
                        Connection connection = dataSource.getConnection();
@@ -188,10 +200,10 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
                        long max_id = rs.getLong(1);
                        ppsm.close();
-                       
+
                        long post_id = max_id + 1;
                        sql = "INSERT INTO BLOGENTRY VALUES (?,?,?,?,?,?)";
-                       
+
                    ppsm = connection.prepareStatement(sql);
                        ppsm.setLong(1, post_id);
                        ppsm.setString(2, blogText);
@@ -202,7 +214,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                        else
                                ppsm.setDate(3, null);
                        ppsm.setString(4, title);
-                       
+
                    ppsm.setDate(5, null);
                        ppsm.setString(6, a.getEmail());
                        int rows = ppsm.executeUpdate();
@@ -211,7 +223,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                                                "The blog entry record cannot 
be inserted: "
                                                                + blogText);
                        ppsm.close();
-                       
+
                        // insert a row in the relationship table
 
                        sql = "INSERT INTO Author_BlogEntry VALUES (?,?)";
@@ -222,7 +234,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                        rows = ppsm.executeUpdate();
                        ppsm.close();
                        connection.close();
-                       
+
                        if (rows != 1)
                                throw new IllegalArgumentException(
                                                "The Author_BlogEntry record 
cannot be inserted: "
@@ -236,7 +248,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Find the blog entry record with the specified title
-        * 
+        *
         * @param The title to be searched
         * @return The blogEntry record
         */
@@ -248,7 +260,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                                + "'";
 
                List<EntryImpl> blogEntries = findBlogs(sql);
-               
+
                // just return the first blog entry for the time being
                if ((blogEntries != null) && (blogEntries.size() > 0))
                        be = blogEntries.get(0);
@@ -257,7 +269,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Return all author records in the Author table
-        * 
+        *
         * @return the list of Author records
         */
        public List<AuthorImpl> getAllAuthors() {
@@ -271,7 +283,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
        /**
         * Return all blog entry records from BlogEntry table with the most 
recent
         * published blog entries first
-        * 
+        *
         * @return a list of blogEntry object
         */
        public List<EntryImpl> getAllBlogEntries() {
@@ -284,7 +296,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Return the number of the blog entry records
-        * 
+        *
         * @return the number of the blog Entry records
         */
        public int getNoOfBlogEntries() {
@@ -310,7 +322,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Return the portion of blog Entries
-        * 
+        *
         * @param firstPostIndex
         *            The index of the first blog entry to be returned
         * @param noOfPosts
@@ -346,7 +358,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Return the author with the specified email address
-        * 
+        *
         * @param emailAddress
         *            The email address
         * @return The author record
@@ -367,7 +379,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Return the blog entries modified between the date range of [start, 
end]
-        * 
+        *
         * @param start
         *            The start date
         * @param end
@@ -396,7 +408,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
        /**
         * Return a list of blog entries belonging to the author with the 
specified
         * email address
-        * 
+        *
         * @param emailAddress
         *            the author's email address
         * @return The list of blog entries
@@ -410,7 +422,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Update the author record
-        * 
+        *
         * @param email
         *                      The email associated with an author
         * @param dob
@@ -425,7 +437,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
        public void updateAuthor(String email, Date dob, String name,
                        String displayName, String bio) {
 
-               
+
                String sql = "UPDATE AUTHOR a SET bio = ?, displayName = ?, dob 
= ?, name =? WHERE email ='"
                                + email + "'";
                int updatedRows = 0;
@@ -440,10 +452,10 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                                ppsm.setDate(3, null);
                        ppsm.setString(4, name);
                        updatedRows = ppsm.executeUpdate();
-                       
+
                        ppsm.close();
                        connection.close();
-                       
+
                        if (updatedRows != 1)
                                throw new IllegalArgumentException("The Author 
" + email
                                                + " cannot be updated.");
@@ -454,11 +466,11 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Update the blog entry record
-        * 
-        * 
+        *
+        *
         */
        public void updateBlogEntry(long id, String email, String title, String 
blogText, List<String> tags, Date updatedDate) {
-               
+
                if (id == -1)
                        throw new IllegalArgumentException(
                                        "Not a BlogEntry returned by this 
interface");
@@ -484,7 +496,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                String sql = "UPDATE BLOGENTRY bp SET bp.blogText = ?, 
bp.publishDate = ?, bp.title = ?, bp.updatedDate = ?, bp.AUTHOR_EMAIL = ? where 
bp.id = "
                                + id;
                int updatedRows = 0;
-               
+
                try {
                        Connection connection = dataSource.getConnection();
                        PreparedStatement ppsm = 
connection.prepareStatement(sql);
@@ -505,9 +517,9 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
                        ppsm.setString(5, email);
                        updatedRows = ppsm.executeUpdate();
-                       
+
                        ppsm.close();
-                       
+
                        connection.close();
 
                        if (updatedRows != 1)
@@ -542,10 +554,10 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Delete the author record with the specified email address
-        * 
+        *
         * @param emailAddress
         *            The author's email address
-        * 
+        *
         */
        public void removeAuthor(String emailAddress) {
 
@@ -558,7 +570,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                        PreparedStatement ppsm = 
connection.prepareStatement(sql);
                        ppsm.executeUpdate();
                        ppsm.close();
-                       
+
                        // delete the records from Author_BlogEntry
                        sql = "DELETE FROM Author_BlogEntry ab WHERE 
ab.AUTHOR_EMAIL = '"
                                        + emailAddress + "'";
@@ -581,7 +593,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Delete the blog entry record specified by the blogEntry
-        * 
+        *
         * @param blogEntry
         *            the blog entry record to be deleted
         */
@@ -614,7 +626,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Return the blog entry record with the specified id
-        * 
+        *
         * @param postId
         *            The blogEntry record id
         */
@@ -630,7 +642,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Return a list of authors with the sql query
-        * 
+        *
         * @param sql
         *            The SQL query
         * @return A list of author records
@@ -684,7 +696,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        /**
         * Return a list of blog entries with the sql query
-        * 
+        *
         * @param sql
         *            The sql query to be executed
         * @return a list of blogEntry records
diff --git 
a/samples/blueprint/helloworld/helloworld-server/src/main/java/org/apache/aries/samples/blueprint/helloworld/server/HelloWorldServiceImpl.java
 
b/samples/blog/blog-persistence-jdbc/src/main/java/org/apache/aries/samples/blog/persistence/jdbc/DatasourceProducer.java
similarity index 52%
copy from 
samples/blueprint/helloworld/helloworld-server/src/main/java/org/apache/aries/samples/blueprint/helloworld/server/HelloWorldServiceImpl.java
copy to 
samples/blog/blog-persistence-jdbc/src/main/java/org/apache/aries/samples/blog/persistence/jdbc/DatasourceProducer.java
index 3c3b012e3..e2d0fbdc5 100644
--- 
a/samples/blueprint/helloworld/helloworld-server/src/main/java/org/apache/aries/samples/blueprint/helloworld/server/HelloWorldServiceImpl.java
+++ 
b/samples/blog/blog-persistence-jdbc/src/main/java/org/apache/aries/samples/blog/persistence/jdbc/DatasourceProducer.java
@@ -6,9 +6,9 @@
  * 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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
@@ -16,18 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.aries.samples.blueprint.helloworld.server;
-import org.apache.aries.samples.blueprint.helloworld.api.*;
+package org.apache.aries.samples.blog.persistence.jdbc;
 
-public class HelloWorldServiceImpl implements HelloWorldService {
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource;
 
-        public void hello() {
-                System.out.println("======>>> A message from the server: Hello 
World!");
-        }
+import javax.inject.Singleton;
 
-        public void startUp() {
-                System.out.println("======>>> Starting HelloWorld Server");
-        }
-}
+@Singleton
+public class DatasourceProducer {
 
- 
\ No newline at end of file
+    @Bean
+    public EmbeddedConnectionPoolDataSource dataSource() {
+        EmbeddedConnectionPoolDataSource embeddedConnectionPoolDataSource = 
new EmbeddedConnectionPoolDataSource();
+        embeddedConnectionPoolDataSource.setDatabaseName("memory:blogDB");
+        embeddedConnectionPoolDataSource.setCreateDatabase("create");
+        return embeddedConnectionPoolDataSource;
+    }
+}
diff --git 
a/samples/blog/blog-persistence-jdbc/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/samples/blog/blog-persistence-jdbc/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index 2df999ccd..000000000
--- 
a/samples/blog/blog-persistence-jdbc/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            
-  <bean id="datasource" 
class="org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource">
-     <property name="databaseName" value="memory:blogDB"/>
-     <property name="createDatabase" value="create" />
-  </bean>
-
-  <bean id="persistenceImpl" 
class="org.apache.aries.samples.blog.persistence.jdbc.BlogPersistenceServiceImpl"
 activation="lazy" init-method="init" destroy-method="destroy">
-   <property name="dataSource" ref="datasource" />
-  </bean>
-
-  <service ref="persistenceImpl" 
interface="org.apache.aries.samples.blog.api.persistence.BlogPersistenceService"/>
- 
- 
-</blueprint>
diff --git a/samples/blog/blog-persistence-jpa/pom.xml 
b/samples/blog/blog-persistence-jpa/pom.xml
index 6cb158160..9ad3284e1 100644
--- a/samples/blog/blog-persistence-jpa/pom.xml
+++ b/samples/blog/blog-persistence-jpa/pom.xml
@@ -75,7 +75,19 @@
                     </execution>
                 </executions>
             </plugin>
-
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+                <configuration>
+                    <namespaces>
+                        
<namespace>http://aries.apache.org/xmlns/jpa/v1.0.0</namespace>
+                        
<namespace>http://aries.apache.org/xmlns/transactions/v1.2.0</namespace>
+                    </namespaces>
+                    <customParameters>
+                        
<transaction.enableAnnotation>false</transaction.enableAnnotation>
+                    </customParameters>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
@@ -122,6 +134,21 @@
         </dependency>
         <!-- end OpenJPA PCEnhancer depends -->
 
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.transaction</groupId>
+            <artifactId>javax.transaction-api</artifactId>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
 </project>
diff --git 
a/samples/blog/blog-persistence-jpa/src/main/java/org/apache/aries/samples/blog/persistence/jpa/BlogPersistenceServiceImpl.java
 
b/samples/blog/blog-persistence-jpa/src/main/java/org/apache/aries/samples/blog/persistence/jpa/BlogPersistenceServiceImpl.java
index 18e8ca4f1..0bc4be4a6 100644
--- 
a/samples/blog/blog-persistence-jpa/src/main/java/org/apache/aries/samples/blog/persistence/jpa/BlogPersistenceServiceImpl.java
+++ 
b/samples/blog/blog-persistence-jpa/src/main/java/org/apache/aries/samples/blog/persistence/jpa/BlogPersistenceServiceImpl.java
@@ -25,8 +25,13 @@ import java.util.Date;
 import java.util.List;
 
 import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
 import javax.persistence.Query;
+import javax.transaction.Transactional;
 
+import org.apache.aries.blueprint.annotation.bean.Activation;
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.aries.blueprint.annotation.service.Service;
 import org.apache.aries.samples.blog.api.persistence.BlogPersistenceService;
 import org.apache.aries.samples.blog.api.persistence.Entry;
 import org.apache.aries.samples.blog.persistence.jpa.entity.AuthorImpl;
@@ -35,35 +40,34 @@ import 
org.apache.aries.samples.blog.persistence.jpa.entity.EntryImpl;
 /**
  * This class is the implementation of the blogPersistenceService
  */
+@Service(classes = BlogPersistenceService.class)
+@Transactional(Transactional.TxType.REQUIRED)
+@Bean(activation = Activation.LAZY)
 public class BlogPersistenceServiceImpl implements BlogPersistenceService {
 
-       private EntityManager em;
-       
-       public BlogPersistenceServiceImpl() {
-       }
+    @PersistenceContext(unitName = "blogExample")
+       EntityManager entityManager;
 
-       
-       public void setEntityManager(EntityManager e) {
-               em = e;
-       }
-       
+    public void setEntityManager(EntityManager entityManager) {
+        this.entityManager = entityManager;
+    }
 
-       public void createAuthor(String email, Date dob, String name,
-                       String displayName, String bio) {
+    public void createAuthor(String email, Date dob, String name,
+                             String displayName, String bio) {
                AuthorImpl a = new AuthorImpl();
                a.setEmail(email);
                a.setName(name);
                a.setDisplayName(displayName);
                a.setBio(bio);
                a.setDob(dob);
-               em.persist(a);
+               entityManager.persist(a);
                
        }
 
        public void createBlogPost(String authorEmail, String title,
                        String blogText, List<String> tags) {
        
-               AuthorImpl a = em.find(AuthorImpl.class, authorEmail);
+               AuthorImpl a = entityManager.find(AuthorImpl.class, 
authorEmail);
                EntryImpl b = new EntryImpl();
 
                Date publishDate = new Date(System.currentTimeMillis());
@@ -75,12 +79,12 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
                b.setTags((tags == null) ? new ArrayList<String>() : tags);
 
                a.updateEntries(b);
-               em.persist(b);          
-               em.merge(b.getAuthor());
+               entityManager.persist(b);
+               entityManager.merge(b.getAuthor());
        }
 
        public Entry findBlogEntryByTitle(String title) {
-               Query q = em
+               Query q = entityManager
                                .createQuery("SELECT e FROM BLOGENTRY e WHERE 
e.title = ?1");
                q.setParameter(1, title);
                Entry b = (Entry) q.getSingleResult();
@@ -89,7 +93,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        public List<AuthorImpl> getAllAuthors() {
                @SuppressWarnings("unchecked")
-               List<AuthorImpl> list = em.createQuery("SELECT a FROM AUTHOR a")
+               List<AuthorImpl> list = entityManager.createQuery("SELECT a 
FROM AUTHOR a")
                                .getResultList();
 
                return list;
@@ -97,7 +101,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        public List<EntryImpl> getAllBlogEntries() {
                @SuppressWarnings("unchecked")
-               List<EntryImpl> list = em.createQuery(
+               List<EntryImpl> list = entityManager.createQuery(
                                "SELECT b FROM BLOGENTRY b ORDER BY 
b.publishDate DESC")
                                .getResultList();
                return list;
@@ -105,13 +109,13 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
        }
 
        public int getNoOfBlogEntries() {
-               Number n = (Number) em.createQuery(
+               Number n = (Number) entityManager.createQuery(
                                "SELECT COUNT(b) FROM BLOGENTRY 
b").getSingleResult();
                return n.intValue();
        }
 
        public List<EntryImpl> getBlogEntries(int firstPostIndex, int 
noOfPosts) {
-               Query q = em
+               Query q = entityManager
                                .createQuery("SELECT b FROM BLOGENTRY b ORDER 
BY b.publishDate DESC");
                q.setFirstResult(firstPostIndex);
                q.setMaxResults(noOfPosts);
@@ -123,12 +127,12 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
        }
 
        public AuthorImpl getAuthor(String emailAddress) {
-               AuthorImpl a = em.find(AuthorImpl.class, emailAddress);
+               AuthorImpl a = entityManager.find(AuthorImpl.class, 
emailAddress);
                return a;
        }
 
        public List<EntryImpl> getBlogEntriesModifiedBetween(Date start, Date 
end) {
-               Query q = em
+               Query q = entityManager
                                .createQuery("SELECT b FROM BLOGENTRY b WHERE 
(b.updatedDate >= :start AND b.updatedDate <= :end) OR (b.publishDate >= :start 
AND b.publishDate <= :end) ORDER BY b.publishDate ASC");
                q.setParameter("start", start);
                q.setParameter("end", end);
@@ -141,7 +145,7 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
        
        public List<EntryImpl> getBlogsForAuthor(String emailAddress) {
 
-               List<EntryImpl> list = em.find(AuthorImpl.class, emailAddress)
+               List<EntryImpl> list = entityManager.find(AuthorImpl.class, 
emailAddress)
                                .getEntries();
                
                return list;
@@ -150,56 +154,56 @@ public class BlogPersistenceServiceImpl implements 
BlogPersistenceService {
 
        public void updateAuthor(String email, Date dob, String name,
                        String displayName, String bio) {
-               AuthorImpl a = em.find(AuthorImpl.class, email);
+               AuthorImpl a = entityManager.find(AuthorImpl.class, email);
                a.setEmail(email);
                a.setName(name);
                a.setDisplayName(displayName);
                a.setBio(bio);
                a.setDob(dob);
-               em.merge(a);
+               entityManager.merge(a);
        }
        
        public void updateBlogEntry(long id, String email, String title,
                        String blogText, List<String> tags, Date updatedDate) {
-               EntryImpl b = em.find(EntryImpl.class, id);
+               EntryImpl b = entityManager.find(EntryImpl.class, id);
                b.setTitle(title);
                b.setBlogText(blogText);
                b.setTags(tags);
                b.setUpdatedDate(updatedDate);
 
-               em.merge(b);
+               entityManager.merge(b);
        }
 
        public void removeAuthor(String emailAddress) {
-               em.remove(em.find(AuthorImpl.class, emailAddress));
+               entityManager.remove(entityManager.find(AuthorImpl.class, 
emailAddress));
        }
 
        public void removeBlogEntry(long id) {
-               EntryImpl b = em.find(EntryImpl.class, id);
-               b = em.merge(b);
+               EntryImpl b = entityManager.find(EntryImpl.class, id);
+               b = entityManager.merge(b);
                b.getAuthor().getEntries().remove(b);
 
-               em.remove(em.merge(b));
-               em.merge(b.getAuthor());
+               entityManager.remove(entityManager.merge(b));
+               entityManager.merge(b.getAuthor());
 
        }
 
        public EntryImpl getBlogEntryById(long postId) {
-               EntryImpl b =  em.find(EntryImpl.class, postId);
+               EntryImpl b =  entityManager.find(EntryImpl.class, postId);
                return b;
        }
 
        public void setPublishDate (long postId, Date date) {
                //Added for testing
-               EntryImpl b = em.find(EntryImpl.class, postId);
+               EntryImpl b = entityManager.find(EntryImpl.class, postId);
                b.setPublishDate(date); 
-               em.merge(b);
+               entityManager.merge(b);
        }
        
        public void setUpdatedDate (long postId, Date date) {
                //Added for testing
-               EntryImpl b = em.find(EntryImpl.class, postId);
+               EntryImpl b = entityManager.find(EntryImpl.class, postId);
                b.setUpdatedDate(date); 
-               em.merge(b);
+               entityManager.merge(b);
        }
 }
diff --git 
a/samples/blog/blog-persistence-jpa/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/samples/blog/blog-persistence-jpa/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index ef2a1dfb1..000000000
--- 
a/samples/blog/blog-persistence-jpa/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-       <!--
-               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.
-       -->
-
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0";
-       xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0";
-       default-activation="lazy">
-
-       <bean id="persistenceImpl"
-               
class="org.apache.aries.samples.blog.persistence.jpa.BlogPersistenceServiceImpl">
-               <tx:transaction method="*" value="Required" />
-               <jpa:context property="entityManager" unitname="blogExample" />
-       </bean>
-
-       <service ref="persistenceImpl"
-               
interface="org.apache.aries.samples.blog.api.persistence.BlogPersistenceService">
-       </service>
-
-</blueprint>
diff --git 
a/samples/blueprint/helloworld/helloworld-api/src/main/java/org/apache/aries/samples/blueprint/helloworld/api/HelloWorldService.java
 
b/samples/blueprint/helloworld/helloworld-api/src/main/java/org/apache/aries/samples/blueprint/helloworld/api/HelloWorldService.java
index 2fb4af5ee..52bcc934b 100644
--- 
a/samples/blueprint/helloworld/helloworld-api/src/main/java/org/apache/aries/samples/blueprint/helloworld/api/HelloWorldService.java
+++ 
b/samples/blueprint/helloworld/helloworld-api/src/main/java/org/apache/aries/samples/blueprint/helloworld/api/HelloWorldService.java
@@ -6,9 +6,9 @@
  * 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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
@@ -20,7 +20,7 @@
 package org.apache.aries.samples.blueprint.helloworld.api;
 
 public interface HelloWorldService {
-       public void hello();
+    void hello();
 
-       public void startUp();
+    void startUp();
 }
diff --git a/samples/blueprint/helloworld/helloworld-client/pom.xml 
b/samples/blueprint/helloworld/helloworld-client/pom.xml
index 85dc95df6..30013882c 100644
--- a/samples/blueprint/helloworld/helloworld-client/pom.xml
+++ b/samples/blueprint/helloworld/helloworld-client/pom.xml
@@ -40,13 +40,28 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+            </plugin>
         </plugins>
     </build>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.aries.samples.blueprint.helloworld</groupId>
             
<artifactId>org.apache.aries.samples.blueprint.helloworld.api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 </project>
     
diff --git 
a/samples/blueprint/helloworld/helloworld-client/src/main/java/org/apache/aries/samples/blueprint/helloworld/client/HelloWorldClient.java
 
b/samples/blueprint/helloworld/helloworld-client/src/main/java/org/apache/aries/samples/blueprint/helloworld/client/HelloWorldClient.java
index cea424cbc..8d3446d9f 100644
--- 
a/samples/blueprint/helloworld/helloworld-client/src/main/java/org/apache/aries/samples/blueprint/helloworld/client/HelloWorldClient.java
+++ 
b/samples/blueprint/helloworld/helloworld-client/src/main/java/org/apache/aries/samples/blueprint/helloworld/client/HelloWorldClient.java
@@ -6,9 +6,9 @@
  * 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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
@@ -18,26 +18,33 @@
  */
 package org.apache.aries.samples.blueprint.helloworld.client;
 
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.aries.blueprint.annotation.service.Reference;
 import org.apache.aries.samples.blueprint.helloworld.api.HelloWorldService;
 
+import javax.inject.Inject;
+
+@Bean(initMethod = "startUp")
 public class HelloWorldClient {
 
-        HelloWorldService helloWorldService = null;
+    HelloWorldService helloWorldService = null;
 
-        public void startUp() {
-                System.out.println("========>>>>Client HelloWorld: About to 
execute a method from the Hello World service");
-                helloWorldService.hello();
-                System.out.println("========>>>>Client HelloWorld: ... if you 
didn't just see a Hello World message something went wrong");
-        }
+    public void startUp() {
+        System.out.println("========>>>>Client HelloWorld: About to execute a 
method from the Hello World service");
+        helloWorldService.hello();
+        System.out.println("========>>>>Client HelloWorld: ... if you didn't 
just see a Hello World message something went wrong");
+    }
 
-        public HelloWorldService getHelloWorldService() {
-                return helloWorldService;
-        }
+    public HelloWorldService getHelloWorldService() {
+        return helloWorldService;
+    }
 
-        public void setHelloWorldService(HelloWorldService helloWorldService) {
-                this.helloWorldService = helloWorldService;
+    @Inject
+    @Reference
+    public void setHelloWorldService(HelloWorldService helloWorldService) {
+        this.helloWorldService = helloWorldService;
 
-        }
+    }
 
 }
 
diff --git 
a/samples/blueprint/helloworld/helloworld-client/src/main/resources/OSGI-INF/blueprint/config.xml
 
b/samples/blueprint/helloworld/helloworld-client/src/main/resources/OSGI-INF/blueprint/config.xml
deleted file mode 100644
index daa74105b..000000000
--- 
a/samples/blueprint/helloworld/helloworld-client/src/main/resources/OSGI-INF/blueprint/config.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-        <!--
-                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.
-        -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
-    
-        <reference id="helloservice"
-                
interface="org.apache.aries.samples.blueprint.helloworld.api.HelloWorldService" 
/>
-                
-
-        <bean id="helloclient" 
class="org.apache.aries.samples.blueprint.helloworld.client.HelloWorldClient"
-                init-method="startUp">
-                <property name="helloWorldService" ref="helloservice" />
-        </bean>
-</blueprint>
diff --git a/samples/blueprint/helloworld/helloworld-server/pom.xml 
b/samples/blueprint/helloworld/helloworld-server/pom.xml
index 734529923..32ed4f938 100644
--- a/samples/blueprint/helloworld/helloworld-server/pom.xml
+++ b/samples/blueprint/helloworld/helloworld-server/pom.xml
@@ -47,13 +47,28 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin</artifactId>
+            </plugin>
         </plugins>
     </build>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.aries.samples.blueprint.helloworld</groupId>
             
<artifactId>org.apache.aries.samples.blueprint.helloworld.api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>blueprint-maven-plugin-annotation</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 </project>
     
diff --git 
a/samples/blueprint/helloworld/helloworld-server/src/main/java/org/apache/aries/samples/blueprint/helloworld/server/HelloWorldServiceImpl.java
 
b/samples/blueprint/helloworld/helloworld-server/src/main/java/org/apache/aries/samples/blueprint/helloworld/server/HelloWorldServiceImpl.java
index 3c3b012e3..a53fb65af 100644
--- 
a/samples/blueprint/helloworld/helloworld-server/src/main/java/org/apache/aries/samples/blueprint/helloworld/server/HelloWorldServiceImpl.java
+++ 
b/samples/blueprint/helloworld/helloworld-server/src/main/java/org/apache/aries/samples/blueprint/helloworld/server/HelloWorldServiceImpl.java
@@ -6,9 +6,9 @@
  * 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * 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
@@ -17,17 +17,22 @@
  * under the License.
  */
 package org.apache.aries.samples.blueprint.helloworld.server;
-import org.apache.aries.samples.blueprint.helloworld.api.*;
 
+import org.apache.aries.blueprint.annotation.bean.Bean;
+import org.apache.aries.blueprint.annotation.service.Service;
+import org.apache.aries.samples.blueprint.helloworld.api.HelloWorldService;
+
+@Service
+@Bean(initMethod = "startUp")
 public class HelloWorldServiceImpl implements HelloWorldService {
 
-        public void hello() {
-                System.out.println("======>>> A message from the server: Hello 
World!");
-        }
+    public void hello() {
+        System.out.println("======>>> A message from the server: Hello 
World!");
+    }
 
-        public void startUp() {
-                System.out.println("======>>> Starting HelloWorld Server");
-        }
+    public void startUp() {
+        System.out.println("======>>> Starting HelloWorld Server");
+    }
 }
 
  
\ No newline at end of file
diff --git 
a/samples/blueprint/helloworld/helloworld-server/src/main/resources/OSGI-INF/blueprint/config.xml
 
b/samples/blueprint/helloworld/helloworld-server/src/main/resources/OSGI-INF/blueprint/config.xml
deleted file mode 100644
index ec39e8638..000000000
--- 
a/samples/blueprint/helloworld/helloworld-server/src/main/resources/OSGI-INF/blueprint/config.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-        <!--
-                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.
-        -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
-
-        <bean id="helloservice"
-                
class="org.apache.aries.samples.blueprint.helloworld.server.HelloWorldServiceImpl"
-                init-method="startUp">
-        </bean>
-
-        <service ref="helloservice"
-                
interface="org.apache.aries.samples.blueprint.helloworld.api.HelloWorldService" 
/>
-
-</blueprint>
diff --git 
a/samples/blueprint/idverifier/idverifier-client/src/main/resources/OSGI-INF/blueprint/blueprint-sample-idverifier-client.xml
 
b/samples/blueprint/idverifier/idverifier-client/src/main/resources/OSGI-INF/blueprint/blueprint-sample-idverifier-client.xml
index ef1772050..c62da4981 100644
--- 
a/samples/blueprint/idverifier/idverifier-client/src/main/resources/OSGI-INF/blueprint/blueprint-sample-idverifier-client.xml
+++ 
b/samples/blueprint/idverifier/idverifier-client/src/main/resources/OSGI-INF/blueprint/blueprint-sample-idverifier-client.xml
@@ -48,74 +48,6 @@
                        <idref component-id="bankinfo" />
                </property>
 
-<!--        Inlined service does not work-->
-<!--           <property name="svcreg4cro">-->
-<!--                   <service auto-export="disabled"-->
-<!--                           ranking="100">-->
-<!--                           <description>Inlined service about querying 
credit records.</description>-->
-<!--                           <interfaces>-->
-<!--                                   
<value>org.apache.aries.samples.blueprint.idverifier.api.CreditRecordOperation</value>-->
-<!--                           </interfaces>-->
-<!--                           <service-properties>-->
-<!--                                   <entry key="mode" value="formal">       
                                        -->
-<!--                                   </entry>-->
-<!--                           </service-properties>-->
-<!--                           <registration-listener -->
-<!--                                   registration-method="reg" 
unregistration-method="unreg">-->
-<!--                                   <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditQueryRegistrationListener">-->
-<!--                                           <description>Inlined service 
registration bean</description>                                            -->
-<!--                                   </bean>-->
-<!--                           </registration-listener>-->
-<!--                           <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecordOperationImpl">-->
-<!--                                   <description>Inlined bean for 
CreditRecordOperation interface implementation</description>-->
-<!--                                   <argument index="0">-->
-<!--                                           <description>inlined bean for 
CreditRecordStore</description>-->
-<!--                                           <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecordStore">-->
-<!--                                                   <argument index="0">-->
-<!--                                                           <set>-->
-<!--                                                                   <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecordFactory"-->
-<!--                                                                           
factory-method="staticCreateBean">-->
-<!--                                                                           
<argument>-->
-<!--                                                                           
        <value>310115197011076874:003:2009-12-30:good:4rd donation to 
charity.</value>-->
-<!--                                                                           
</argument>-->
-<!--                                                                   
</bean>-->
-<!--                                                                   <bean 
factory-ref="creditrecordfactory" factory-method="dynamicCreateBean">-->
-<!--                                                                   
<argument>-->
-<!--                                                                           
        <value>310115197011076874:004:2009-12-18:good:3rd donation to 
charity.</value>-->
-<!--                                                                           
</argument>-->
-<!--                                                           </bean>-->
-<!--                                                                   <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecord">-->
-<!--                                                                           
<argument>-->
-<!--                                                                           
        <value>310115197011277844:001:2009-12-29:good:Donation to 
charity</value>-->
-<!--                                                                           
</argument>-->
-<!--                                                                   
</bean>-->
-<!--                                                                   <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecord">-->
-<!--                                                                           
<argument>-->
-<!--                                                                           
        <value>310115197011277844:002:2009-12-01:bad:No pay to bill.</value>-->
-<!--                                                                           
</argument>-->
-<!--                                                                   
</bean>-->
-<!--                                                                   <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecord">-->
-<!--                                                                           
<argument>-->
-<!--                                                                           
        <value>110108197710016853:002:2009-12-02:good:Paied the bill.</value>-->
-<!--                                                                           
</argument>-->
-<!--                                                                   
</bean>-->
-<!--                                                                   <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecord">-->
-<!--                                                                           
<argument>-->
-<!--                                                                           
        <value>110108197710016853:001:1977-10-01:good:I'm born.</value>-->
-<!--                                                                           
</argument>-->
-<!--                                                                   
</bean>-->
-<!--                                                                   <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecord">-->
-<!--                                                                           
<argument>-->
-<!--                                                                           
        <value>11010819541001366X:001:1954-10-01:good:I'm born.</value>-->
-<!--                                                                           
</argument>-->
-<!--                                                                   
</bean>-->
-<!--                                                           </set>-->
-<!--                                                   </argument>-->
-<!--                                           </bean>-->
-<!--                                   </argument>-->
-<!--                           </bean>-->
-<!--                   </service>-->
-<!--           </property>-->
         <property name="cro">
             <bean 
class="org.apache.aries.samples.blueprint.idverifier.client.CreditRecordOperationImpl">
                 <description>Inlined bean for CreditRecordOperation interface 
implementation</description>
diff --git a/samples/pom.xml b/samples/pom.xml
index 94860397f..f8ca7b44e 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -133,11 +133,17 @@
 
         <!-- Aries bundle dependencies-->
         <asm.version>9.7.1</asm.version>
+        <javax.annotation-api.version>1.3.2</javax.annotation-api.version>
+        <javax.inject.version>1</javax.inject.version>
+        <javax.persistence-api.version>2.2</javax.persistence-api.version>
+        <javax.transaction-api.version>1.2</javax.transaction-api.version>
         <osgi.core.version>8.0.0</osgi.core.version>
         <slf4j.version>1.7.36</slf4j.version>
         <pax-logging.version>1.11.17</pax-logging.version>
 
         <!-- Aries dependencies -->
+        
<blueprint-maven-plugin-annotation.version>1.3.0</blueprint-maven-plugin-annotation.version>
+        <blueprint-maven-plugin.version>1.10.0</blueprint-maven-plugin.version>
         
<org.apache.aries.blueprint.api.version>1.0.1</org.apache.aries.blueprint.api.version>
         
<org.apache.aries.blueprint.cm.version>1.3.2</org.apache.aries.blueprint.cm.version>
         
<org.apache.aries.blueprint.core.version>1.10.3</org.apache.aries.blueprint.core.version>
@@ -518,9 +524,61 @@
                 <artifactId>org.apache.aries.util</artifactId>
                 <version>${org.apache.aries.util.version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>org.apache.aries.blueprint</groupId>
+                <artifactId>blueprint-maven-plugin-annotation</artifactId>
+                <version>${blueprint-maven-plugin-annotation.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.inject</groupId>
+                <artifactId>javax.inject</artifactId>
+                <version>${javax.inject.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.transaction</groupId>
+                <artifactId>javax.transaction-api</artifactId>
+                <version>${javax.transaction-api.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.persistence</groupId>
+                <artifactId>javax.persistence-api</artifactId>
+                <version>${javax.persistence-api.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>javax.annotation</groupId>
+                <artifactId>javax.annotation-api</artifactId>
+                <version>${javax.annotation-api.version}</version>
+                <scope>provided</scope>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.aries.blueprint</groupId>
+                    <artifactId>blueprint-maven-plugin</artifactId>
+                    <version>${blueprint-maven-plugin.version}</version>
+                    <executions>
+                        <execution>
+                            <phase>process-classes</phase>
+                            <goals>
+                                <goal>add-resource-dir</goal>
+                                <goal>blueprint-generate</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
     <modules>
         <module>ariestrader</module>
         <module>blog</module>

Reply via email to