- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在运行 Tomcat 和 Spring 4 的情况下进行简单的集成测试,注入(inject)一个 spring 组件并使用我现有的 Tomcat 数据源配置。我不想两次配置我的数据源。所有内容,包括我的数据源,都在文件 WebContent/WEB-INF/application-context.xml
中配置。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task"
xmlns:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<task:annotation-driven />
<!-- annotations in bean classes -->
<!-- context:annotation-config / -->
<!-- mvc:annotation-driven / -->
<context:component-scan base-package="com.mycompany.package.**" />
<jpa:repositories base-package="com.mycompany.package.**" />
<!-- <aop:aspectj-autoproxy proxy-target-class="true"/> -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="jpaDialect" ref="jpaDialect" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="packagePU" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect" />
</property>
<property name="jpaPropertyMap">
<props>
<prop key="eclipselink.weaving">false</prop>
</props>
</property>
</bean>
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="true" />
</bean>
<bean id="jpaDialect"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect" />
<!-- <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"/> </bean> -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames" value="i18n/messages" />
</bean>
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/DefaultDB" />
</beans>
我正在使用本教程 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontext-ctx-management ,但我不完全理解如何在提供我的数据源的 Tomcat 上下文中运行我的测试。
目前,我是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = { "file:WebContent/WEB-INF/application-context.xml"})
public class SimulatorTest {
@Autowired
private ShiftSimulator simulator;
@BeforeClass
public void setup() {
// ???
}
@Test
public void testShiftStart() {
System.out.println("Hello world");
}
}
目前,我在运行测试时遇到这个错误
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [file:WebContent/WEB-INF/application-context.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
...
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
...
我完全理解需要有一个 InitialContext,但是我如何为我的测试提供 Tomcat 提供的上下文,包括我的数据源配置?我不想两次设置我的数据源连接凭据。
最佳答案
解决了。简单回顾一下问题:Spring 尝试创建 dataSource
bean,但在查找 JNDI 名称时失败了——因为没有可用的 JNDI。
所以我为测试做了什么,我只是创建了另一个覆盖 bean dataSource
的 XML 文件。我在版本控制中忽略了该文件,并要求每个开发人员将此文件复制到位:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="com.sap.db.jdbc.Driver"
p:url="jdbc:sap://xxx:30015"
p:username="sa"
p:password="">
</bean>
</beans>
在测试类中,我提供了覆盖 dataSource
的附加文件引用,因此它永远不会尝试执行失败的 JNDI 查找:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = { "file:WebContent/WEB-INF/application-context.xml", "file:WebContent/WEB-INF/test-datasource.xml" })
public class SimulatorTest {
...
关于java - Spring 单元测试和 InitialContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34800498/
我正在学习Managing database connections with JDBC由 IBM 出版。这是一些旧东西(2001)。他们正在使用 JNDI。当我尝试实现他们的代码时: try {
我是 EJB 的新手,我正在尝试从 InitialContext 中查找 EJB,一切正常,直到我更改了项目名称,现在它给了我这个异常: javax.naming.NoInitialContextEx
全部, 我正尝试在一些陈旧的 Java 代码(没有接口(interface)、没有抽象等)中做一些单元测试 这是一个使用 ServletContext 的 servlet(我假设它是由 Tomcat
我正在使用 jboss 在 java 爬虫中开发一个应用程序。我编写了以下代码: connectionFactoryLookupAddress = new String("jms/RemoteConn
我想在运行 Tomcat 和 Spring 4 的情况下进行简单的集成测试,注入(inject)一个 spring 组件并使用我现有的 Tomcat 数据源配置。我不想两次配置我的数据源。所有内容,包
我正在尝试为 Java SE 控制台应用程序设置 JNDI。 我有以下代码: public class FooMain { public static void main (String ar
当我尝试为 Junit 测试模拟以下方法(方法使用远程 EJB 调用业务逻辑)时,它给出 javax.naming.NoInitialContextException private void som
我在我的应用程序中使用 InitialContext 来查找远程 EJB。有一些外部系统会通知我一些事件,当发生这种情况时,我将此通知委托(delegate)给适当的远程 EJB。 我一直认为我应该为
我正在开发一个在 WebLogic 10 上运行的应用程序,当然还有 Java。 好吧,问题是我正在使用 oracle.jdbc.xa.client.OracleXADataSource 来管理事务,
我收到以下错误消息: javax.naming.NoInitialContextException: Need to specify class name in environment or syst
我有一些其他人编写的 Java 代码(早已不在,无法联系他们),在我正在调试的 JBoss 服务器上运行。它使用以下一行代码获取 javax.sql.DataSource: DataSource ds
尝试使用 Oracle WebLogic 12.1 从我的初始上下文中检索数据源对象时出现以下错误: "Problem creating dummy orb: org.omg.CORBA.COMM_F
我正在开发一个命令行客户端 (Java SE6),它现在需要与 Glassfish 2.1 服务器通信。建立这个连接的代码是 try { final InitialContext contex
在分布式客户端服务器应用程序中,我使用 java RMI 从客户端计算机调用服务器端方法。在服务器端使用 EJB,应用服务器是 Glassfish。我在服务器端有一个 SampleFacade 类,它
我在基于 Active Directory (Windows Server 2008 R2) 和 Java 实现正确的身份验证时遇到问题。 假定的流程是当帐户在 AD 中被禁用时(属性 → 帐户 →
我正在尝试创建一个 InitialContext,这样我就可以向 JNDI 请求一些企业 java bean。JBoss 运行良好,但是当我运行 java 代码时出现异常。 我正在运行 JBoss 7
Context context = new InitialContext(); dataSource = (DataSource) context.lookup("java:comp/env/jdbc
我在我的测试中使用 jmockit,我想测试一个类,直接使用 InitialContext。所以我有以下内容: public class MyClass { public void myMetho
我正在编写一个 Java Servlet 应用程序,该应用程序需要存在某些环境变量和 JNDI 定义。这些在 server.xml 文件中定义。使用默认值是不可能的。因此程序需要抛出运行时(未经检查的
OSGi 客户端尝试连接到 GF4。在 Maven 中,我添加了 gf-client-module 4。我看到 bundle glassfish-naming-4.0.jar 已安装。 所以在 Act
我是一名优秀的程序员,十分优秀!