Skip to main content

[ejb-spec issues] [JIRA] Resolved: (EJB_SPEC-60) Modernize Connector/MDB

  • From: "marina vatkina (JIRA)" <jira-no-reply@...>
  • To: issues@...
  • Subject: [ejb-spec issues] [JIRA] Resolved: (EJB_SPEC-60) Modernize Connector/MDB
  • Date: Thu, 14 Mar 2013 22:01:02 +0000 (GMT+00:00)
  • Auto-submitted: auto-generated


     [ 
http://java.net/jira/browse/EJB_SPEC-60?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

marina vatkina resolved EJB_SPEC-60.
------------------------------------

    Resolution: Fixed

And the simplified version with a marker message-listener interface is in!

David, please create another issue for using annotations directly and mark it 
for the future version.

> Modernize Connector/MDB
> -----------------------
>
>                 Key: EJB_SPEC-60
>                 URL: http://java.net/jira/browse/EJB_SPEC-60
>             Project: ejb-spec
>          Issue Type: Improvement
>    Affects Versions: 3.2
>            Reporter: dblevins
>            Assignee: marina vatkina
>             Fix For: 3.2
>
>
> The thesis is to eliminate the Connector-specfic JavaBean which is 
> currently the heart of the MDB/Connector model.  The 
> @ActivationConfigProperty is just a reflection of that Connector JavaBean.
> There are several disadvantages to the JavaBean approach and current 
> Connector style:
> - Metadata is loosely typed in the bean code
> - Only class-level metadata is allowed, not method-level
> - Requiring an interface can limit API expressiveness
> For those that aren't intimately familiar with the Connector and MDB 
> relationship, see the blog post [EJB.next Connector and Bean 
> API|http://blog.dblevins.com/2010/10/ejbnext-connectorbean-api-jax-rs-and.html]
>  for explanation and this github project, [MDB Improvements: Telnet 
> Connector|https://github.com/dblevins/mdb-improvements] for an actual ;
> functioning connector.
> h1. The core proposal
> The short version of the proposal is as follows:
>  - Allow the ResourceAdapter to obtain the bean class through the 
> ActivationSpec
>  - Allow the ResourceAdapter to obtain a no-interface view of the bean
> This can be done with text and no new API classes or signatures are 
> required.  The contract would be simple.
>  - The Connector Provider can request the MDB implementation class (ejb 
> class) via the ActivationSpec
>  - If the ActivationSpec has an 'ejbClass' property the MDB Container would 
> be required to:
>  -- set a reference to the ejb class of the MDB when creating the 
> ActivationSpec instance
>  -- return a no-interface view of the MDB from the 
> MessageEndpointFactory.createEndpoint method
> Of course the "no-interface" view would still implement MessageEndpoint and 
> the message listener interface.
> h2. Optional no-interface MDB contract
> Instead of requiring Connectors to supply a regular interface such as 
> 'public interface Foo' as the {{<messagelistener-type>}}, allow the 
> Connector to supply a an annotation such as {{public @interface Foo}} as 
> the message listener interface.  The MDB use that on the bean class.
> h2. Modernized MDB Examples
> Some of the possibilities this would open up:
> {code}
> @MessageDriven
> @EmailAccountInfo(address = "dblevins@...")
> public class EmailBean {
>     @PostConstruct
>     public void init() {
>     }
>     @Deliver @Header("Subject: {subject}")
>     public void receiveEmail(@HeaderParam("subject") String subject, @Body 
> String body) {
>         // do your thing!
>     }
> }
> {code}
> EmailAccountInfo, Header, Deliver, HeaderParam, and Body are all 
> annotations supplied by the Connector demonstrating the "JAX-RS" like APIs 
> that could be written and standardly used via custom connector.  The APIs 
> themselves could of course become standard, but that would not be necessary 
> -- the connector itself could be run in any compliant server.
> Another example of an MDB that accepts commands issued in a telnet console:
> {code}
> package org.developer.application;
> import com.superconnectors.telnet.api.Command;
> import com.superconnectors.telnet.api.Option;
> import com.superconnectors.telnet.api.TelnetListener;
> import javax.ejb.ActivationConfigProperty;
> import javax.ejb.MessageDriven;
> import java.text.SimpleDateFormat;
> import java.util.Date;
> import java.util.Map;
> import java.util.Properties;
> import java.util.regex.Pattern;
> @MessageDriven
> @TelnetListener
> public class MyMdb {
>     private final Properties properties = new Properties();
>     @Command("get")
>     public String doGet(@Option("key") String key) {
>         return properties.getProperty(key);
>     }
>     @Command("set")
>     public String doSet(@Option("key") String key, @Option("value") String 
> value) {
>         final Object old = properties.setProperty(key, value);
>         final StringBuilder sb = new StringBuilder();
>         sb.append("set ").append(key).append(" to ").append(value);
>         sb.append("\n");
>         if (old != null) {
>             sb.append("old value: ").append(old);
>             sb.append("\n");
>         }
>         return sb.toString();
>     }
>     @Command("list")
>     public String doList(@Option("pattern") Pattern pattern) {
>         if (pattern == null) pattern = Pattern.compile(".*");
>         final StringBuilder sb = new StringBuilder();
>         for (Map.Entry<Object, Object> entry : properties.entrySet()) {
>             final String key = entry.getKey().toString();
>             if (pattern.matcher(key).matches()) {
>                 sb.append(key).append(" = 
> ").append(entry.getValue()).append("\n");
>             }
>         }
>         return sb.toString();
>     }
> }
> {code}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://java.net/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


[ejb-spec issues] [JIRA] Resolved: (EJB_SPEC-60) Modernize Connector/MDB

marina vatkina (JIRA) 03/14/2013
 
 
Close
loading
Please Confirm
Close