resource addListener / removeListener