<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: EJB 3.1: No-interface view feedback</title>
	<atom:link href="http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/feed/" rel="self" type="application/rss+xml" />
	<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/</link>
	<description>Software plumbing using middleware wrenches</description>
	<lastBuildDate>Thu, 09 Feb 2012 19:51:59 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Stephen Riesenberg</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-1910</link>
		<dc:creator><![CDATA[Stephen Riesenberg]]></dc:creator>
		<pubDate>Fri, 23 May 2008 01:44:07 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-1910</guid>
		<description><![CDATA[+1 for optional local interface. Having to code a local view and a remote view is tedious, and having the flexibility to switch seamlessly between local and remote versions of the bean is beneficial.

-1 for optional remote interface. Remote clients should program against an interface of my bean, not my bean itself.  Not to mention, private/public access is a stupid way to define which methods are accessible to remote &quot;users&quot; of my bean.  That&#039;s why interfaces exist.  To decouple systems, and allow concrete agreements between users and implementations.  Interfaces allow me to remain conscious of the design of my application, and how outside users view it.  Also, did someone say unit testing?

While Mike&#039;s idea of combining the interfaces is quite brilliant, I say don&#039;t bother.  Internally, I don&#039;t mind programming against my bean directly.  Again, that&#039;s not what interfaces are for.  But remotely... mmhmm! Interfaces!]]></description>
		<content:encoded><![CDATA[<p>+1 for optional local interface. Having to code a local view and a remote view is tedious, and having the flexibility to switch seamlessly between local and remote versions of the bean is beneficial.</p>
<p>-1 for optional remote interface. Remote clients should program against an interface of my bean, not my bean itself.  Not to mention, private/public access is a stupid way to define which methods are accessible to remote &#8220;users&#8221; of my bean.  That&#8217;s why interfaces exist.  To decouple systems, and allow concrete agreements between users and implementations.  Interfaces allow me to remain conscious of the design of my application, and how outside users view it.  Also, did someone say unit testing?</p>
<p>While Mike&#8217;s idea of combining the interfaces is quite brilliant, I say don&#8217;t bother.  Internally, I don&#8217;t mind programming against my bean directly.  Again, that&#8217;s not what interfaces are for.  But remotely&#8230; mmhmm! Interfaces!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alexandre</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-312</link>
		<dc:creator><![CDATA[alexandre]]></dc:creator>
		<pubDate>Sun, 30 Sep 2007 09:31:15 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-312</guid>
		<description><![CDATA[I like the previous comment but would like it more with:
@Stateless
public class StockTrader {
  public void create() {} //call back
  public String foo() {} //nothing special
  @Local public void bar(){} //local
  @Remote public void trudy(){} //Remote
}

the call back if not called &quot;void create()&quot; could then have a @create annotation.
a &quot;@IsManaged private Boolean isManaged = false;&quot; could be set to true by the container if the container is taking care of the bean.
alex]]></description>
		<content:encoded><![CDATA[<p>I like the previous comment but would like it more with:<br />
@Stateless<br />
public class StockTrader {<br />
  public void create() {} //call back<br />
  public String foo() {} //nothing special<br />
  @Local public void bar(){} //local<br />
  @Remote public void trudy(){} //Remote<br />
}</p>
<p>the call back if not called &#8220;void create()&#8221; could then have a @create annotation.<br />
a &#8220;@IsManaged private Boolean isManaged = false;&#8221; could be set to true by the container if the container is taking care of the bean.<br />
alex</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daoud AbdelMonem Faleh</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-309</link>
		<dc:creator><![CDATA[Daoud AbdelMonem Faleh]]></dc:creator>
		<pubDate>Sat, 29 Sep 2007 22:34:42 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-309</guid>
		<description><![CDATA[-1 optional Remote&#124;&#124;Local interfaces.
Programming to interfaces is a good practice and should be encouraged as it allow good patterns and clean design.
I do agree with Mike idea of making both @Remote and @Local a single interface (one single business interface) and allow them to be overridden at method level.
Although Session Beans are a mean to implement web services they still should be treated separately and annotations like &quot;@InvoationLayers(SOAP,REST,RMI,IIOP,JSON,WHATEVER)&quot; like suggested by Andy IMHO are not very consistent with the actual programming model at least.
One last thing please more aop.

Daoud AbdelMonem Faleh.]]></description>
		<content:encoded><![CDATA[<p>-1 optional Remote||Local interfaces.<br />
Programming to interfaces is a good practice and should be encouraged as it allow good patterns and clean design.<br />
I do agree with Mike idea of making both @Remote and @Local a single interface (one single business interface) and allow them to be overridden at method level.<br />
Although Session Beans are a mean to implement web services they still should be treated separately and annotations like &#8220;@InvoationLayers(SOAP,REST,RMI,IIOP,JSON,WHATEVER)&#8221; like suggested by Andy IMHO are not very consistent with the actual programming model at least.<br />
One last thing please more aop.</p>
<p>Daoud AbdelMonem Faleh.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: José Freire</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-303</link>
		<dc:creator><![CDATA[José Freire]]></dc:creator>
		<pubDate>Thu, 27 Sep 2007 17:00:47 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-303</guid>
		<description><![CDATA[+1

Remote no-interface views? 

How about:

@Stateless
public class StockTrader {

   /*
    * This one is local
    */
   public void buySpecial(Stock, int quantity, other special parameter for local access) {}

   /*
    * These are remote
    */
   @Remote
   public void buy(Stock stock, int quantity) {...}

   @Remote
   public void sell(Stock stock, int quantity) {...}
}]]></description>
		<content:encoded><![CDATA[<p>+1</p>
<p>Remote no-interface views? </p>
<p>How about:</p>
<p>@Stateless<br />
public class StockTrader {</p>
<p>   /*<br />
    * This one is local<br />
    */<br />
   public void buySpecial(Stock, int quantity, other special parameter for local access) {}</p>
<p>   /*<br />
    * These are remote<br />
    */<br />
   @Remote<br />
   public void buy(Stock stock, int quantity) {&#8230;}</p>
<p>   @Remote<br />
   public void sell(Stock stock, int quantity) {&#8230;}<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: chuck</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-302</link>
		<dc:creator><![CDATA[chuck]]></dc:creator>
		<pubDate>Thu, 27 Sep 2007 16:19:31 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-302</guid>
		<description><![CDATA[+1 on optional local interface (anything public is exposed *anyway*), but -1 on optional remote interfaces.]]></description>
		<content:encoded><![CDATA[<p>+1 on optional local interface (anything public is exposed *anyway*), but -1 on optional remote interfaces.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Bakker</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-301</link>
		<dc:creator><![CDATA[Mark Bakker]]></dc:creator>
		<pubDate>Thu, 27 Sep 2007 13:41:29 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-301</guid>
		<description><![CDATA[Hi,

+1

I realy like the Idea not having to implement te interfaces.
But an @Remote or @Local tag on a class makes sense for me.

Kind regards,

Mark]]></description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>+1</p>
<p>I realy like the Idea not having to implement te interfaces.<br />
But an @Remote or @Local tag on a class makes sense for me.</p>
<p>Kind regards,</p>
<p>Mark</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-293</link>
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Thu, 27 Sep 2007 01:32:41 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-293</guid>
		<description><![CDATA[I think interfaceless is good.  there are many times when the interface is just filler.  I guess it means that everything will have to be done by dynamic subclass (which is of course badmojo), cglib, javassist or whatever...but many times I&#039;m just looking for transactions.. .  I&#039;m more interested in turning pooling off though.  Pooling ala SLSBs is totally lame/pointless/sucky.

@ISimplyWantATransactionalBeanWithNoFluff(pool=off) //which should be default for TJB&#039;s (TransactionalJavaBeans)
public class MyBean {
@TransactionAttribute(TransType.REQUIRES_NEW)
public void sendBillHatFromCheetah() {
// ...
}

}

public class MyOtherBean {
@TJB
MyBean bean;
 ...
 bean.sendBillHatFromCheetah();
 ...
}

These &quot;simpleBeans&quot; or (TransactionalJavaBean) might be a subclass proxying to a container with the so-called &quot;Bridge&quot; pattern.  Or they might be directly injected *gasp* without the &quot;container&quot; as subclasses with the @TX stuff or whatever injected.  Really I&#039;d just like a lot less silly shit when all I want to do is demarcate transactions, manage @EntityMangager (aka the session) etc.  Most &quot;Enterprise&quot; applications don&#039;t really need a whole lot more than IoC, TX management and Session management.

As for web services, I never got why SOAP is such a special transport.  That is just invocation, why does it need special treatment?  Maybe I have annotations saying @InvoationLayers(SOAP,REST,RMI,IIOP,JSON,WHATEVER) or maybe that stays outside.  I agree that a special web service interface is the lamest thing ever.

-Andy]]></description>
		<content:encoded><![CDATA[<p>I think interfaceless is good.  there are many times when the interface is just filler.  I guess it means that everything will have to be done by dynamic subclass (which is of course badmojo), cglib, javassist or whatever&#8230;but many times I&#8217;m just looking for transactions.. .  I&#8217;m more interested in turning pooling off though.  Pooling ala SLSBs is totally lame/pointless/sucky.</p>
<p>@ISimplyWantATransactionalBeanWithNoFluff(pool=off) //which should be default for TJB&#8217;s (TransactionalJavaBeans)<br />
public class MyBean {<br />
@TransactionAttribute(TransType.REQUIRES_NEW)<br />
public void sendBillHatFromCheetah() {<br />
// &#8230;<br />
}</p>
<p>}</p>
<p>public class MyOtherBean {<br />
@TJB<br />
MyBean bean;<br />
 &#8230;<br />
 bean.sendBillHatFromCheetah();<br />
 &#8230;<br />
}</p>
<p>These &#8220;simpleBeans&#8221; or (TransactionalJavaBean) might be a subclass proxying to a container with the so-called &#8220;Bridge&#8221; pattern.  Or they might be directly injected *gasp* without the &#8220;container&#8221; as subclasses with the @TX stuff or whatever injected.  Really I&#8217;d just like a lot less silly shit when all I want to do is demarcate transactions, manage @EntityMangager (aka the session) etc.  Most &#8220;Enterprise&#8221; applications don&#8217;t really need a whole lot more than IoC, TX management and Session management.</p>
<p>As for web services, I never got why SOAP is such a special transport.  That is just invocation, why does it need special treatment?  Maybe I have annotations saying @InvoationLayers(SOAP,REST,RMI,IIOP,JSON,WHATEVER) or maybe that stays outside.  I agree that a special web service interface is the lamest thing ever.</p>
<p>-Andy</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dhartford</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-288</link>
		<dc:creator><![CDATA[dhartford]]></dc:creator>
		<pubDate>Wed, 26 Sep 2007 13:21:49 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-288</guid>
		<description><![CDATA[I like Mike&#039;s comment - Allow a single interface to allow @Local and @Remote (@Webservice, others?).  One interface, with method-level adjustments to &#039;visibility&#039;, for all ways the actual implementation(s) could be exposed.

Instead of saying &#039;no interface for this scenario, but allow it for others&#039;, improve by simply having one interface file for all ways to expose actual implementations (instead of multiple interfaces).]]></description>
		<content:encoded><![CDATA[<p>I like Mike&#8217;s comment &#8211; Allow a single interface to allow @Local and @Remote (@Webservice, others?).  One interface, with method-level adjustments to &#8216;visibility&#8217;, for all ways the actual implementation(s) could be exposed.</p>
<p>Instead of saying &#8216;no interface for this scenario, but allow it for others&#8217;, improve by simply having one interface file for all ways to expose actual implementations (instead of multiple interfaces).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim Shaw</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-285</link>
		<dc:creator><![CDATA[Tim Shaw]]></dc:creator>
		<pubDate>Wed, 26 Sep 2007 09:23:28 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-285</guid>
		<description><![CDATA[Why not provide annotation of classes/methods : @Remote and @Local?
If the EJB class implements an I/face, the I/face can be annotated and each method in it will &#039;have&#039; that annotation. Interfaces should be allowed to have both annotations.
If the class is annotated, all get/set methods will be exposed.
If methods are annotated, this will override the Class level annotation.
Something akin to @Transient should be added - @Container/@Hidden (?) - which will restrict these.
My 2c.]]></description>
		<content:encoded><![CDATA[<p>Why not provide annotation of classes/methods : @Remote and @Local?<br />
If the EJB class implements an I/face, the I/face can be annotated and each method in it will &#8216;have&#8217; that annotation. Interfaces should be allowed to have both annotations.<br />
If the class is annotated, all get/set methods will be exposed.<br />
If methods are annotated, this will override the Class level annotation.<br />
Something akin to @Transient should be added &#8211; @Container/@Hidden (?) &#8211; which will restrict these.<br />
My 2c.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike</title>
		<link>http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-284</link>
		<dc:creator><![CDATA[Mike]]></dc:creator>
		<pubDate>Wed, 26 Sep 2007 07:25:36 +0000</pubDate>
		<guid isPermaLink="false">http://bill.burkecentral.com/2007/09/24/ejb-31-no-interface-view-feedback/#comment-284</guid>
		<description><![CDATA[-1 on optional interfaces, but allow a single interface to be both @Local and @Remote at the same time by adding a simple way to choose the interface type for injected dependencies, for example @EJB(type = InterfaceType.LOCAL&#124;REMOTE). A possible further enhancement would be the possibility to override local/remote visibility for each business method individually by applying @Local/@Remote again.]]></description>
		<content:encoded><![CDATA[<p>-1 on optional interfaces, but allow a single interface to be both @Local and @Remote at the same time by adding a simple way to choose the interface type for injected dependencies, for example @EJB(type = InterfaceType.LOCAL|REMOTE). A possible further enhancement would be the possibility to override local/remote visibility for each business method individually by applying @Local/@Remote again.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

