How can I spoof a jndi lookup for a datasource without a app server

后端 未结 3 1336
别跟我提以往
别跟我提以往 2021-02-04 18:24

I want to test some new functionality which is part of an internal web app. This new code uses a database connection normally provided by an app server (tomcat).

I do no

相关标签:
3条回答
  • 2021-02-04 18:38

    With the help of Spring SimpleNamingContextBuilder and Apache BasicDataSource, you can do something like this (I usually have this in a static block in test classes that need JNDI):

    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName(db_driver_name);
    dataSource.setUrl(db_connection_url);
    dataSource.setUsername(db_username);
    dataSource.setPassword(db_password);
    SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
    builder.bind(jndi_name, dataSource);
    builder.activate();
    

    The value of jndi_name might look like this: java:comp/env/jdbc/my-db

    Once this is set up, code that normally looks up the database connection via JNDI should work. The code above would for example work with this Spring config:

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="java:comp/env/jdbc/my-db"/>
    </bean>
    
    0 讨论(0)
  • 2021-02-04 18:44

    With TomcatJNDI you can access every JNDI resource you configured within Tomcat as used to do in your web application. The code to achieve it is simple and looks like

    TomcatJNDI tomcatJNDI = new TomcatJNDI();
    tomcatJNDI.processContextXml(contextXmlFile);
    tomcatJNDI.start();
    
    DataSource ds = (DataSource) InitialContext.doLookup("java:comp/env/path/to/datasource")
    

    Go here to read more about it.

    0 讨论(0)
  • 2021-02-04 18:54

    The solutions listed here look a bit simpler than what I came up with about a year ago when I had to do the same thing. I basically made my own very simple DataSource implementation and adding it to a new Initial Context.

    http://penguindreams.org/blog/running-beans-that-use-application-server-datasources-locally/

    0 讨论(0)
提交回复
热议问题