我正在測試(使用JUnit)一個休息服務,並使所有事情都按預期進行,我需要使用一些EJB方法。說,我有:ClassNotFoundException:org.jboss.naming.remote.client.InitialContextFactory當試圖加載InitialContext
- 被測試的類,在這裏是沒有興趣;
測試類
public class UploadServiceTest { private final String RemoteBeanLookupKey = "/project/dao/TaskManager!ru.project.dao.TaskManager"; @EJB private TaskManager taskManager; @Before public void startEverythingNeeded() throws Exception { InitialContext ctx = null; Properties jndiProp = new Properties(); InputStream testConfStream = getClass().getClassLoader().getResourceAsStream("jndi.properties"); jndiProp.load(testConfStream); ctx = new InitialContext(jndiProp); taskManager = ((TaskManager) ctx.lookup(RemoteBeanLookupKey)); } @Test public void blablabla(){ } }
jndi.properties
java.naming.factory.initial的= org.jboss.naming.remote.client.InitialContextFactory java.naming.provider.url的= HTTP的遠程://本地主機:8080 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS =假 jboss.naming.client.ejb.context =真
remote.connection.default.username =管理員 remote.connection.default.password =管理員
gradle這個依賴關係:
testCompile group: 'org.wildfly', name: 'wildfly-ejb-client-bom', version: '8.2.0.Final', ext: 'pom'
,testCompile group: 'junit', name: 'junit', version: '4.11'
和provided project(path: ':dao')
(這是我希望從中獲取EJB模塊)。
但是,當我嘗試運行測試時,出現在這裏,並在網上javax.naming.NoInitialContextException: Cannot instantiate class: org.jboss.naming.remote.client.InitialContextFactory [Root exception is java.lang.ClassNotFoundException: org.jboss.naming.remote.client.InitialContextFactory]
其他類似的問題建議到JBoss的客戶端添加到CLASSPATH,但是我看着附近的JBoss自述客戶端在我的發行版中,它表示不會像這樣操作,而是改爲使用gradle依賴。所以我做了。
另一個奇怪的事情是:我從測試中獲得代碼和屬性到同一項目中的另一個模塊(由另一個編碼器編寫)。我試圖運行這些測試,並按預期工作。我複製了一切,甚至更多(gradle依賴),但得到這個異常。
我試圖簡化代碼爲了說明,我可能有一些重要的缺失。如果需要,我可以複製一些設置和代碼的部分。