Hi Thusitha, On Mon, Jul 10, 2017 at 11:37 AM, Thusitha Thilina Dayaratne < thusit...@wso2.com> wrote:
> Hi Shafreen, > > +1 for the proposed implementation. In MSF4J point of view, we are > wrapping the carbon message with MSF4J Request/Response objects and use the > underlying messaging methods provided to retrieve/write back data in/out/. > > Are we considering a getting a message body clone with the re > architrecture? > Isn't cloning of the message body should be done using some util method at MessageProcessor level ? > > Thanks > Thusitha > > On Fri, Jul 7, 2017 at 6:18 PM, Shafreen Anfar <shafr...@wso2.com> wrote: > >> Hi All, >> >> In addition to considering all the facts presented above, I also talked >> to each transport developer who actually came up with different types of >> carbon-messages. Based on those discussion I came up with below design. >> >> Originally, CarbonMessage is designed to carry data between two >> components and I believe it should stay the same. However, it should be >> able carry data relevant to each component. For instance, in JMS case, it >> should be able carry a map for map messages where as in websockets case it >> should be able carry a string. >> >> Therefore, I thought of creating a CarbonMessage with java generics. Then >> we can extend it accordingly. >> >> >> >> As you can see above, we can provide a DefaultCarbonMessage >> implementation. However, in HTTP case, we have done some specific >> implementation to optimize the transport. At the moment those logic also >> resides inside the abstract CarbonMessage. With the new design we can >> simply move them to something like ByteCarbonMessage<ByteBuffer>. >> >> I believe with this design we can have proper abstraction while reducing >> number of redundant carbon messages. >> >> >> On Thu, Jul 6, 2017 at 12:16 AM, Chanaka Fernando <chana...@wso2.com> >> wrote: >> >>> It seems there is room to improve the current CarbonMessage >>> implementation. Following are few main areas where we can improve its >>> functionality. >>> >>> - At the moment there are too many ways to get the message body from >>> the CarbonMessage >>> - getMessageBody() >>> - getInputStream() - This is a http specific impl. >>> - getMessageDateSource() >>> >>> The above 3 methods serve 3 different purposes. This design has been >>> done mainly thinking about the HTTP messages. In a message passthrough >>> scenario, content is kept in the content queue and accessed as a stream. >>> When the message content is accessed within intermediate layer (like >>> ballerina), it will be retrieved through messageDataSource. >>> >>> - There are too many types of CarbonMessages in carbon-messaging >>> that are only used by a specific transport implementation >>> - BinaryCarbonMessage >>> - ControlCarbonMessage >>> - DefaultCarbonMessage >>> - MapCarbonMessage >>> - SerializableCarbonMessage >>> - StatusCarbonMessage >>> - StreamingCarbonMessage >>> - TextCarbonMessage >>> >>> >>> - Most of above CarbonMessages do not adhere to the contract that is >>> imposed by the CarbonMessage interface. >>> >>> I agree on the fact that we need to refactor these different types of >>> CarbonMessage implementations. I think what Asitha suggested is a viable >>> approach to handle different types of messages. >>> >>> Considering these facts, I believe we should refactor CarbonMessage >>> before others starting using it in their implementations. Please let us >>> know your thoughts as well :) >>> >>> +1 for refactoring the carbon message and relevant implementations to >>> support non-HTTP use cases. In the meantime, we should support HTTP >>> messaging in an efficient manner since that will be the mostly used >>> scenario of ballerina. >>> >>> On Wed, Jul 5, 2017 at 4:55 PM, Irunika Weeraratne <irun...@wso2.com> >>> wrote: >>> >>>> Hi Shafreen and Asitha, >>>> In the first place, they were introduced after a long discussion in >>>> WebSocket scenarios. This was because when the WebSocket messages are >>>> arrived to transport level we already knew what kind of message it is. >>>> Eg: Text, Binary, Control, Status >>>> >>>> So I made sense to create the same type of carbon message in the >>>> transport. Then carbon message types were used to identify the scenarios we >>>> had to address in the application layer. >>>> Eg: If the carbon message is an instance of TextCarbonMessage we know >>>> what to do in the first place. Also converting text into byte buffer in the >>>> transport and then converting it again into text in the application layer >>>> doesn't make sense. >>>> >>>> Because of that, those message types were introduced. IMO while we >>>> reduce the no. of carbon message types we might need to keep some of the >>>> types because it will affect the performance. >>>> Also, we can always override the methods in default carbon message if >>>> in order to work with default scenarios. >>>> >>>> WDYT? >>>> >>>> Thanks, >>>> Irunika >>>> >>>> *Irunika Weeraratne* >>>> *Software Engineer | WSO2, Inc. <http://wso2.com/>* >>>> *Email : irun...@wso2.com <irun...@wso2.com>* >>>> *LinkedIn : https://lk.linkedin.com/in/irunika >>>> <https://lk.linkedin.com/in/irunika>* >>>> *Mobile : +94712403314 <071%20240%203314>* >>>> *Lean . Enterprise . Middleware* >>>> >>>> >>>> On Wed, Jul 5, 2017 at 3:54 PM, Asitha Nanayakkara <asi...@wso2.com> >>>> wrote: >>>> >>>>> Hi Shafreen, >>>>> >>>>> I would suggest having a single Carbon Message with the option to set >>>>> different types of data sources as the data source for the message. For >>>>> that, we might need to go through the existing other message types and >>>>> think what kind of functionality to be added to carbon message. If our >>>>> intention is not to extend carbon message, we can make it a final class. >>>>> If >>>>> not we have to design it to be extended by other users. >>>>> >>>>> When reading the payload multiple times (building the message) we need >>>>> to clone messages (since data is represented as a stream). In pass through >>>>> scenarios, we should avoid cloning the message and use the stream once. >>>>> IMO we can implement this functionality by way of having package level >>>>> methods for transport to read from the internal blocking queue and write >>>>> to >>>>> the output stream. If we invoke other public methods they will make a >>>>> clone >>>>> of the message data and use. This way we avoid unnecessary cloning in a >>>>> pass-through scenario. And reading from the blocking queue can only be >>>>> done >>>>> from the transport. Outside users have to use message data source to read >>>>> the content, which might clone the data. >>>>> >>>>> WDYT? >>>>> >>>>> Regards, >>>>> Asitha >>>>> >>>>> On Wed, Jul 5, 2017 at 3:14 PM, Shafreen Anfar <shafr...@wso2.com> >>>>> wrote: >>>>> >>>>>> Hi All, >>>>>> >>>>>> It seems there is room to improve the current CarbonMessage >>>>>> implementation. Following are few main areas where we can improve its >>>>>> functionality. >>>>>> >>>>>> - At the moment there are too many ways to get the message body >>>>>> from the CarbonMessage >>>>>> - getMessageBody() >>>>>> - getInputStream() - This is a http specific impl. >>>>>> - getMessageDateSource() >>>>>> >>>>>> >>>>>> - There are too many types of CarbonMessages in carbon-messaging >>>>>> that are only used by a specific transport implementation >>>>>> - BinaryCarbonMessage >>>>>> - ControlCarbonMessage >>>>>> - DefaultCarbonMessage >>>>>> - MapCarbonMessage >>>>>> - SerializableCarbonMessage >>>>>> - StatusCarbonMessage >>>>>> - StreamingCarbonMessage >>>>>> - TextCarbonMessage >>>>>> >>>>>> >>>>>> - Most of above CarbonMessages do not adhere to the contract that >>>>>> is imposed by the CarbonMessage interface. >>>>>> >>>>>> Considering these facts, I believe we should refactor CarbonMessage >>>>>> before others starting using it in their implementations. Please let us >>>>>> know your thoughts as well :) >>>>>> >>>>>> -- >>>>>> Regards, >>>>>> *Shafreen* >>>>>> Software Engineer >>>>>> WSO2 Inc >>>>>> Mobile : 077-556-395-1 >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> *Asitha Nanayakkara* <http://asitha.github.io/> >>>>> Senior Software Engineer >>>>> WSO2, Inc. <http://wso2.com/> >>>>> Mob: +94 77 853 0682 <+94%2077%20853%200682> >>>>> [image: https://wso2.com/signature] <https://wso2.com/signature> >>>>> >>>>> >>>> >>> >>> >>> -- >>> Thank you and Best Regards, >>> Chanaka Fernando >>> Senior Technical Lead >>> m: +94 773337238 <+94%2077%20333%207238> >>> https://wso2.com <https://wso2.com/signature> >>> >>> >>> >>> >>> >>> >>> >> >> >> -- >> Regards, >> *Shafreen* >> Software Engineer >> WSO2 Inc >> Mobile : 077-556-395-1 >> > > > > -- > Thusitha Dayaratne > WSO2 Inc. - lean . enterprise . middleware | wso2.com > > Mobile +94712756809 <+94%2071%20275%206809> > Blog alokayasoya.blogspot.com > About http://about.me/thusithathilina > <http://wso2.com/signature> > > -- Regards, *Shafreen* Software Engineer WSO2 Inc Mobile : 077-556-395-1
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev