Hi, I am working on unit tests for the mail services. They run JBoss 3.2.4RC1 "embedded", by calling the following from their setup() method:
| //Start JBoss | ServerImpl impl = new ServerImpl(); | System.out.println("got the server impl"); | Properties prop = new Properties(); | prop.setProperty(ServerConfig.HOME_DIR,(new File(".")).getAbsolutePath()); | prop.setProperty(ServerConfig.ROOT_DEPLOYMENT_FILENAME,"src/META-INF/depends-service.xml"); | prop.setProperty(ServerConfig.SERVER_CONFIG_URL,"file:"+(new File(".")).getAbsolutePath()); | System.out.println("done setting up properties"); | impl.init(prop); | System.out.println("impl.init is finished"); | impl.start(); | System.out.println("impl.start done"); | alreadyrun = true; | System.out.println("done configureMBeanServerFactory"); | | //Start MBeans | MBeanServer mbserver = JBMailJMXUtil.locateJBoss(); | ObjectName oname = new ObjectName("jboss.mail:type=MailServices,name=UserRepository"); | StaticUserRepository sur = new StaticUserRepository(); | sur.addUser("acoliver","test"); | sur.addUser("test","testpw"); | sur.addUser("jboss","jbosspw"); | mbserver.registerMBean(sur, oname); | | //Start other MBeans here | | Until now we have been running JNDI with a mock context for JNDI, but since JBoss is actually being started, I am trying to use the existing NamingService, but have run into problems. I have set up the jndi.properties file to be: | java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory | java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces | I stepped through the org.jboss.naming.NamingService.startService() method. The first bit loads up the properties from the jndi.properties file and sets them in System.properties, as expected there is no java.naming.provider.url there. Also, when I do a System.getProperty("java.naming.provider.url") at any stage nothing is returned. However, once the first InitialContext is created and it's environment got, java.naming.provider.url is there! (i.e. it is in env below, but System.getProperty("java.naming.provider.url") still returns nothing) Code: | InitialContext iniCtx = new InitialContext(); | Hashtable env = iniCtx.getEnvironment(); | I followed this through, and new InitialContext() calls javax.naming.InitialContext.init() //This initialises the environment for the InitialContext which calls javax.naming.internal.ResourceManager.getInitialEnvironment() //"produces" the environment for the InitialContext which calls javax.naming.internal.VersionHelper.getJndiProperties() VersionHelper.getProperties() looks like this | | String[] getJndiProperties() { | if (getSystemPropsFailed) { | return null; // after one failure, don't bother trying again | } | Properties sysProps = (Properties) AccessController.doPrivileged( | new PrivilegedAction() { | public Object run() { | try { | return System.getProperties(); | } catch (SecurityException e) { | getSystemPropsFailed = true; | return null; | } | } | } | ); | if (sysProps == null) { | return null; | } | String[] jProps = new String[PROPS.length]; | for (int i = 0; i < PROPS.length; i++) { | jProps | = sysProps.getProperty(PROPS | ); | } | return jProps; | } | | String getJndiProperty(final int i) { | return (String) AccessController.doPrivileged( | new PrivilegedAction() { | public Object run() { | try { | return System.getProperty(PROPS | ); | } catch (SecurityException e) { | return null; | } | } | } | ); | } | | In this funky looking code (in which to be honest I don't understand the special AccessController/PrivilegedAction bits) java.naming.provider.url and jnp://localhost:1099 are returned. I'm wondering a) Why doesn't this appear in JBoss itself when starting that without the java.naming.provider.url in the jndi.properties b) What the AccessController stuff does special to magically create the java.naming.provider.url=jnp://localhost:1099 c) If I change the test target in the ant build file to run only one of the tests, and make that test call ResourceManager.getInitialEnvironment(null).get(Context.PROVIDER_URL) BEFORE I have done anything to start the embbeddd JBoss it still returns a URL. I'd like to not have java.naming.provider.url=jnp://localhost:1099, in order to run the naming service "in-jvm" since I am experiencing other problems if I set the Port and RmiPort > -1. If needed I can describe in more detail what they are. Any ideas? Cheers, Kab View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3830915#3830915 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3830915 ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-user