<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Espacio de Dario Quintana &#187; Spring</title>
	<atom:link href="http://blog.darioquintana.com.ar/category/spring/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.darioquintana.com.ar</link>
	<description></description>
	<lastBuildDate>Tue, 21 Jun 2011 22:51:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>3 layer Example of NHibernate + Spring.Net + AOP</title>
		<link>http://blog.darioquintana.com.ar/2007/11/17/3-layer-example-of-nhibernate-springnet-aop/</link>
		<comments>http://blog.darioquintana.com.ar/2007/11/17/3-layer-example-of-nhibernate-springnet-aop/#comments</comments>
		<pubDate>Sat, 17 Nov 2007 14:43:55 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[AOP]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[uNHAddIns]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/11/17/3-layer-example-of-nhibernate-springnet-aop/</guid>
		<description><![CDATA[<p>Hace un tiempo escrib&#xED; este proyecto plantilla usando <a href="http://springframework.net/">Spring.Net</a> y <a href="http://www.hibernate.org/343.html">NHibernate</a>principalmente. Us&#xE9; NHibernate para el acceso a datos obviamente y <a href="http://springframework.net/">Spring.Net</a> para aplicar <a href="http://blog.darioquintana.com.ar/2006/12/28/inyeccin-de-dependencia-con-springnet/">IoC</a> y <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">Aop</a>.</p> <p>Esta es la clase CustomerService:</p> public class CustomerService : BaseService, ICustomerService { /// &#60;summary&#62; /// This field is inyected by IoC through the property. [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un tiempo escrib&#xED; este proyecto plantilla usando <a href="http://springframework.net/">Spring.Net</a> y <a href="http://www.hibernate.org/343.html">NHibernate</a>principalmente. Us&#xE9; NHibernate para el acceso a datos obviamente y <a href="http://springframework.net/">Spring.Net</a> para aplicar <a href="http://blog.darioquintana.com.ar/2006/12/28/inyeccin-de-dependencia-con-springnet/">IoC</a> y <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">Aop</a>.</p>
<p>Esta es la clase <em>CustomerService</em>:</p>
<pre class="csharpcode">
    <span class="kwrd">public</span> <span class="kwrd">class</span> CustomerService : BaseService, ICustomerService
    {
	<span class="rem">/// &lt;summary&gt;</span>
        <span class="rem">/// This field is inyected by IoC through the property.</span>
        <span class="rem">/// &lt;/summary&gt;</span>

        <span class="kwrd">private</span> ICustomerDao customerDao;        <span class="kwrd"></span>
 <span class="kwrd">	public</span> ICustomerDao CustomerDao {
            get { <span class="kwrd">return</span> customerDao; }
          set { customerDao = <span class="kwrd">value</span>; }
        }

<span class="preproc">#region</span> ICustomerService Members

<span class="kwrd">	public</span> <span class="kwrd">int</span> CreateCustomer(<span class="kwrd">string</span> Name, <span class="kwrd">string</span> LastName) {

        	Customer customer = <span class="kwrd">new</span> Customer();

        	customer.FirstName = <span class="str">"Dario"</span>;

	        customer.LastName = <span class="str">"Quintana"</span>;

		CustomerDao.Save(customer);

<span class="kwrd">		return</span> customer.Id;

        }

<span class="kwrd">	public</span> <span class="kwrd">void</span> DeleteCustomer(<span class="kwrd">int</span> Id) {

            	Customer customer = CustomerDao.GetById(Id);

		CustomerDao.Delete(customer);

        }

<span class="preproc">#endregion</span>

    }</pre>
<p>Como se puede apreciar las clases <em>CreateCustomer</em> &#xF3; <em>DeleteCustomer</em> no est&#xE1;n envueltas en un codigo Transactional o de UnitOfWork, tampoco el m&#xE9;todo <em>Save(customer)</em> en la clase <em>CustomerDao</em>.</p>
<p>Entonces&#8230; donde est&#xE1; el soporte transaccional? Spring + AOP es la respuesta. Spring envuelve a los metodos del Servicio entre transacciones. Y la respuesta para esto son los proxies.</p>
<p>Cuando se realiza la instanciaci&#xF3;n de la clase CustomerService, un proxy es instanciado. Con el proxy de nuestra clase Spring.Net puede envolver los metodos configurados dentro de transacciones. Muy bueno no ? </p>
<p>Otra cosa que pueden apreciar en el ejemplo es el uso de <a href="http://code.google.com/p/unhaddins/">uNhAddIns</a> en el repositorio. Con esta librer&#xED;a podemos usar queries &quot;detachadas&quot; o separadas de un contexto de persistencia por medio de la clase <a href="http://blog.darioquintana.com.ar/2007/09/06/unhaddins-unofficial-nhibernate-addins/">DetachedQuery</a>. Con DetachedQuery podemos hacer uso indistinto de Hql/SqlNativo en NamedQueries, <a href="http://blog.darioquintana.com.ar/2007/10/16/named-queries-en-nhibernate-y-por-qu-debemos-usarlas/">y esto es una buena pr&#xE1;ctica que debemos tratar de adoptar</a>.</p>
<h4><a href="http://code.google.com/p/darioquintana/downloads/detail?name=SpringNHAop.7z">Descargar el ejemplo</a></h4>
</p>
<pre></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/11/17/3-layer-example-of-nhibernate-springnet-aop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Db4o + Spring Modules y configuraci&#243;n</title>
		<link>http://blog.darioquintana.com.ar/2007/09/27/db4o-spring-modules-y-configuracin/</link>
		<comments>http://blog.darioquintana.com.ar/2007/09/27/db4o-spring-modules-y-configuracin/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 05:10:59 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[AOP]]></category>
		<category><![CDATA[db4o]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/09/27/db4o-spring-modules-y-configuracin/</guid>
		<description><![CDATA[<p> Una de las cosas que me llama notablemente la atención, es la imposibilidad de poder configurar Db4o por medio de Xml, siendo algo tan común hoy en día y por sobre todo naciendo en Java.</p> <p>La respuesta del lado de Java está justificada, no así del todo del lado de .Net. En Java, yo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://springmodules.dev.java.net/source/browse/*checkout*/springmodules/docs/reference/src/images/logo-medium.png" align="left"> Una de las cosas que me llama notablemente la atención, es la imposibilidad de poder configurar Db4o por medio de Xml, siendo algo tan común hoy en día y por sobre todo naciendo en Java.</p>
<p>La respuesta del lado de Java está justificada, no así del todo del lado de .Net. En Java, yo creo que la mayoría de los que usan Db4o usan el <a href="https://springmodules.dev.java.net/">módulo de Spring</a> para poder configurarla y obviamente no solo para eso, para usar las ventajas de IoC y Aop que posee Spring. </p>
<p>Algo básico que permite el módulo de Spring para Db4o es la capacidad de envolver a métodos que uno seleccione (y configure correctamente) en transacciones, de modo de abstraernos de este aspecto a nosotros. </p>
<p>Por que digo que no está tan justificado del lado de .Net, por que Spring del lado de .Net no es tan aceptado como lo&nbsp;es del&nbsp;lado de Java, que es donde nació. Y entonces mucho menos será entonces la adopción de dicho módulo pero para .Net.</p>
<p>Que lindo sería si se podría configurar Db4o de esta manera:&nbsp;</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode"><span class="kwrd">&lt;?</span><span class="html">xml</span> <span class="attr">version</span><span class="kwrd">="1.0"</span> <span class="attr">encoding</span><span class="kwrd">="utf-8"</span> ?<span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">db4o</span> <span class="attr">assembly</span><span class="kwrd">="db4oif.Test"</span> <span class="attr">namespace</span><span class="kwrd">="db4oif.Test.Objects"</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">class</span> <span class="attr">name</span><span class="kwrd">="Customer"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">field</span> <span class="attr">name</span><span class="kwrd">="_id"</span> <span class="attr">unique</span><span class="kwrd">="true"</span> <span class="attr">indexed</span><span class="kwrd">="true"</span><span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">class</span><span class="kwrd">&gt;</span>

    <span class="kwrd">&lt;</span><span class="html">class</span> <span class="attr">name</span><span class="kwrd">="Product"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">field</span> <span class="attr">name</span><span class="kwrd">="_name"</span> <span class="attr">unique</span><span class="kwrd">="true"</span> <span class="attr">indexed</span><span class="kwrd">="true"</span><span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">class</span><span class="kwrd">&gt;</span>

    <span class="kwrd">&lt;</span><span class="html">class</span> <span class="attr">name</span><span class="kwrd">="db4oif.Test.Objects, db4oif.Test"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">field</span> <span class="attr">name</span><span class="kwrd">="_name"</span> <span class="attr">unique</span><span class="kwrd">="true"</span> <span class="attr">indexed</span><span class="kwrd">="true"</span><span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">class</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">db4o</span><span class="kwrd">&gt;</span></pre>
<p>Cualquier semejanza con un mapping file de NHibernate es pura coincidencia <img src='http://blog.darioquintana.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Esto lo había expuesto <a href="http://developer.db4o.com/forums/permalink/40628/40676/ShowThread.aspx#40676">aquí</a> en el foro de la comunidad de Db4o, algún día espero tomarme el tiempo para escribir las clases de configuración, pero supongo que terminaré usando el módulo Spring que ya lo hace por mí (entre otras cosas).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/09/27/db4o-spring-modules-y-configuracin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

