Yes, you can't recover from transport initialization errors except by
fixing the errors and restarting the server.

On Tue, Dec 8, 2015 at 5:17 PM, Samiyuru Senarathne <[email protected]>
wrote:

> That means, are we going to consider the failures in the above abstract
> methods as *unrecoverable* by throwing RuntimeException?
>
> On Tue, Dec 8, 2015 at 3:54 PM, Afkham Azeez <[email protected]> wrote:
>
>> Change the code as follows:
>>
>> void stopTransport() { <- one of the template methods
>>         stop(); <- abstract method is called
>>         if (state.equals(State.STARTED)) {
>>             state = State.STOPPED; <- state is changed without knowing
>> the status of stop() call
>>         } else {
>>             throw new IllegalStateException("Cannot stop transport " + id
>> + ". Current state: " + state);
>>         }
>>
>>     }
>>
>> From the stop() method above, if something fails, throw a
>> RuntimeException.
>>
>> On Tue, Dec 8, 2015 at 3:50 PM, Samiyuru Senarathne <[email protected]>
>> wrote:
>>
>>> Hi,
>>>
>>> CarbonTransport [1] class in carbon-kernel implements template pattern
>>> and it has the following abstract methods.
>>>
>>>    - protected abstract void start();
>>>    - protected abstract void stop();
>>>    - protected abstract void beginMaintenance();
>>>    - protected abstract void endMaintenance();
>>>
>>> These abstract methods should be implemented by any class that
>>> implements a carbon transport. (For example NettyListener [2] does this).
>>> These abstract methods are called by the template methods of
>>> CarbonTransport class. These template methods maintain the state of the
>>> carbon transport as shown in the following code block.
>>>
>>> void stopTransport() { <- one of the template methods
>>>         if (state.equals(State.STARTED)) {
>>>             state = State.STOPPED; <- state is changed without knowing
>>> the status of stop() call
>>>         } else {
>>>             throw new IllegalStateException("Cannot stop transport " +
>>> id + ". Current state: " + state);
>>>         }
>>>         stop(); <- abstract method is called
>>>     }
>>>
>>> As shown in the above code block CarbonTransport's template functions
>>> change the state of the transport without knowing the actual state of the
>>> transport after invoking the abstract function (assuming the abstract
>>> method call succeeded).
>>>
>>> IMO this behaviour can produce invalid states when the operations of the
>>> abstract method implementations do not complete as expected. IMO in order
>>> to fix this we can introduce an exception type to the abstract method's
>>> signature for the implementations to notify any failure or add a state
>>> return to the signature.
>>>
>>>    - protected abstract void start() throws CarbonTransportException;
>>>    - protected abstract void stop() throws CarbonTransportException;
>>>    - protected abstract void beginMaintenance()
>>>     throws CarbonTransportException;
>>>    - protected abstract void endMaintenance()
>>>     throws CarbonTransportException;
>>>
>>> Or
>>>
>>>    - protected abstract State start();
>>>    - protected abstract State stop();
>>>    - protected abstract State beginMaintenance();
>>>    - protected abstract State endMaintenance();
>>>
>>>
>>> WDYT?
>>>
>>> [1] -
>>> https://github.com/wso2/carbon-kernel/blob/master/core/src/main/java/org/wso2/carbon/kernel/transports/CarbonTransport.java
>>> [2] -
>>> https://github.com/wso2/carbon-transports/blob/master/http/netty/component/src/main/java/org/wso2/carbon/transport/http/netty/listener/NettyListener.java
>>>
>>> Thank you.
>>>
>>> Best Regards,
>>> Samiyuru
>>>
>>> --
>>> Samiyuru Senarathne
>>> *Software Engineer*
>>> Mobile : +94 (0) 71 134 6087
>>> [email protected]
>>>
>>
>>
>>
>> --
>> *Afkham Azeez*
>> Director of Architecture; WSO2, Inc.; http://wso2.com
>> Member; Apache Software Foundation; http://www.apache.org/
>> * <http://www.apache.org/>*
>> *email: **[email protected]* <[email protected]>
>> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: *
>> *http://blog.afkham.org* <http://blog.afkham.org>
>> *twitter: **http://twitter.com/afkham_azeez*
>> <http://twitter.com/afkham_azeez>
>> *linked-in: **http://lk.linkedin.com/in/afkhamazeez
>> <http://lk.linkedin.com/in/afkhamazeez>*
>>
>> *Lean . Enterprise . Middleware*
>>
>
>
>
> --
> Samiyuru Senarathne
> *Software Engineer*
> Mobile : +94 (0) 71 134 6087
> [email protected]
>



-- 
*Afkham Azeez*
Director of Architecture; WSO2, Inc.; http://wso2.com
Member; Apache Software Foundation; http://www.apache.org/
* <http://www.apache.org/>*
*email: **[email protected]* <[email protected]>
* cell: +94 77 3320919blog: **http://blog.afkham.org*
<http://blog.afkham.org>
*twitter: **http://twitter.com/afkham_azeez*
<http://twitter.com/afkham_azeez>
*linked-in: **http://lk.linkedin.com/in/afkhamazeez
<http://lk.linkedin.com/in/afkhamazeez>*

*Lean . Enterprise . Middleware*
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to