[ https://issues.apache.org/jira/browse/FELIX-4751?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
J.W. Janssen updated FELIX-4751: -------------------------------- Description: I register service like this: {code} public void start(BundleContext context) throws Exception { Dictionary props = new Hashtable(); // service.pid String symbolicName = (String) context.getBundle().getHeaders() .get("Bundle-SymbolicName"); props.put("service.pid", symbolicName); props.put(Constant.COMMANDNAME, "manager"); serviceRegistrationRuntime = context.registerService( AgentAction.class.getName(), new ManagerAction(context), props); logger.info("manager Service regist success."); } {code} and I get the service like this: {code} public Response handle(Message message) { ServiceReference[] serviceRefs = null; Response result = null; try { String mess = message.getContent().toString(); logger.debug(mess); Map map = JsonUtil.toBean(mess, Map.class); logger.info("begin to handle message " + map.get(MODULENAME)); serviceRefs = context.getAllServiceReferences( AgentAction.class.getName(), "(" + Constant.COMMANDNAME + "=" + map.get(MODULENAME) + ")"); // serviceRefs = context.getAllServiceReferences( // AgentAction.class.getName(),null); if (serviceRefs.length == 0) { throw new Exception("has not command service like this"); } if (serviceRefs.length > 1) { throw new Exception("more than one command service like this"); } AgentAction action = (AgentAction) context .getService(serviceRefs[0]); // handle the command result = action.handle(message); } catch (Exception e) { result = message.createResponse(); result.setErrorMsg( e.getMessage()); logger.error(e.getMessage(), e); } return result; } {code} the phenomenon is I always catch the Exception(about 50%) like this: {code} ERROR - cn.tianya.amm.agent.service.AgentMessageHandler - Invalid BundleContext. java.lang.IllegalStateException: Invalid BundleContext. at org.apache.felix.framework.BundleContextImpl.checkValidity(BundleContextImpl.java:514) at org.apache.felix.framework.BundleContextImpl.getAllServiceReferences(BundleContextImpl.java:411) at cn.tianya.amm.agent.service.AgentMessageHandler.handle(AgentMessageHandler.java:55) at cn.tianya.fw.mq.impl.activemq.FwMqListenService$MessageSyncHandlerAdapter.run(FwMqListenService.java:582) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) {code} was: I register service like this: public void start(BundleContext context) throws Exception { Dictionary props = new Hashtable(); // service.pid String symbolicName = (String) context.getBundle().getHeaders() .get("Bundle-SymbolicName"); props.put("service.pid", symbolicName); props.put(Constant.COMMANDNAME, "manager"); serviceRegistrationRuntime = context.registerService( AgentAction.class.getName(), new ManagerAction(context), props); logger.info("manager Service regist success."); } and I get the service like this: public Response handle(Message message) { ServiceReference[] serviceRefs = null; Response result = null; try { String mess = message.getContent().toString(); logger.debug(mess); Map map = JsonUtil.toBean(mess, Map.class); logger.info("begin to handle message " + map.get(MODULENAME)); serviceRefs = context.getAllServiceReferences( AgentAction.class.getName(), "(" + Constant.COMMANDNAME + "=" + map.get(MODULENAME) + ")"); // serviceRefs = context.getAllServiceReferences( // AgentAction.class.getName(),null); if (serviceRefs.length == 0) { throw new Exception("has not command service like this"); } if (serviceRefs.length > 1) { throw new Exception("more than one command service like this"); } AgentAction action = (AgentAction) context .getService(serviceRefs[0]); // handle the command result = action.handle(message); } catch (Exception e) { result = message.createResponse(); result.setErrorMsg( e.getMessage()); logger.error(e.getMessage(), e); } return result; } the phenomenon is I always catch the Exception(about 50%) like this: ERROR - cn.tianya.amm.agent.service.AgentMessageHandler - Invalid BundleContext. java.lang.IllegalStateException: Invalid BundleContext. at org.apache.felix.framework.BundleContextImpl.checkValidity(BundleContextImpl.java:514) at org.apache.felix.framework.BundleContextImpl.getAllServiceReferences(BundleContextImpl.java:411) at cn.tianya.amm.agent.service.AgentMessageHandler.handle(AgentMessageHandler.java:55) at cn.tianya.fw.mq.impl.activemq.FwMqListenService$MessageSyncHandlerAdapter.run(FwMqListenService.java:582) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) > getAllServiceReferences() Throw IllegalStateException: Invalid BundleContext > ---------------------------------------------------------------------------- > > Key: FELIX-4751 > URL: https://issues.apache.org/jira/browse/FELIX-4751 > Project: Felix > Issue Type: Bug > Components: Framework > Affects Versions: framework-4.0.1 > Environment: Centos 6.0 JDK 6 > Reporter: Chenqiulin > > I register service like this: > {code} > public void start(BundleContext context) throws Exception { > Dictionary props = new Hashtable(); > // service.pid > String symbolicName = (String) context.getBundle().getHeaders() > .get("Bundle-SymbolicName"); > props.put("service.pid", symbolicName); > props.put(Constant.COMMANDNAME, "manager"); > > serviceRegistrationRuntime = context.registerService( > AgentAction.class.getName(), new > ManagerAction(context), props); > logger.info("manager Service regist success."); > } > {code} > and I get the service like this: > {code} > public Response handle(Message message) { > ServiceReference[] serviceRefs = null; > Response result = null; > try { > String mess = message.getContent().toString(); > logger.debug(mess); > Map map = JsonUtil.toBean(mess, Map.class); > logger.info("begin to handle message " + > map.get(MODULENAME)); > serviceRefs = context.getAllServiceReferences( > AgentAction.class.getName(), "(" + > Constant.COMMANDNAME > + "=" + > map.get(MODULENAME) + ")"); > // serviceRefs = context.getAllServiceReferences( > // AgentAction.class.getName(),null); > if (serviceRefs.length == 0) { > throw new Exception("has not command service > like this"); > } > if (serviceRefs.length > 1) { > throw new Exception("more than one command > service like this"); > } > AgentAction action = (AgentAction) context > .getService(serviceRefs[0]); > // handle the command > result = action.handle(message); > } catch (Exception e) { > result = message.createResponse(); > result.setErrorMsg( e.getMessage()); > logger.error(e.getMessage(), e); > } > return result; > } > {code} > the phenomenon is I always catch the Exception(about 50%) like this: > {code} > ERROR - cn.tianya.amm.agent.service.AgentMessageHandler - Invalid > BundleContext. > java.lang.IllegalStateException: Invalid BundleContext. > at > org.apache.felix.framework.BundleContextImpl.checkValidity(BundleContextImpl.java:514) > at > org.apache.felix.framework.BundleContextImpl.getAllServiceReferences(BundleContextImpl.java:411) > at > cn.tianya.amm.agent.service.AgentMessageHandler.handle(AgentMessageHandler.java:55) > at > cn.tianya.fw.mq.impl.activemq.FwMqListenService$MessageSyncHandlerAdapter.run(FwMqListenService.java:582) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > at java.lang.Thread.run(Thread.java:619) > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)