This behavior is correct for the case of explicitly ending the conversation, but not for the case of the conversation timing out. The following is from the SCA Java Annotations and APIs 1.00 errata at http://www.osoa.org/display/Main/Errata+for+Java+Annotations+and+APIs+V1.00
5. Resolve contradiction regarding ConversationEndedException
Description: Section 18.104.22.168 @EndsConversation (lines 409-420) states that when a method is called on a conversational interface after an @EndsConversation has been called, a ConversationEndedException is thrown. This contradicts section 1.6.5 Conversation Lifetime Summary / Ending conversations, lines 494-495, where it states that "after an @EndsConversation method has been called" (on a service reference) ", then a new conversation will automatically be started." ...and... (lines 498-499) if the conversation has timed out, a ConversationEndedException is thrown.
Solution: Replace lines 417-420 at the end of section 22.214.171.124 with the following: "If a conversation is ended with an explicit outbound call to an @EndsConversation method or a call to ServiceReference.endConversation(), then any subsequent call to an operation on the service reference will start a new conversation. If the conversation ends for any other reason (e.g. a timeout occurred), then until ServiceReference.getConversation().end() is called, the ConversationEndedException will be thrown by any conversational operation."