我需要加载位于jboss服务器中的jndi资源。为此,我使用jnp客户端库:
<dependency>
<groupId>jboss</groupId>
<artifactId>jnp-client</artifactId>
<version>4.2.2.GA</version>
</dependency>
问题是,只要我在pom.xml中包含这个依赖项,spring应用程序就会在启动时卡住,没有任何消息。没有一行日志,就像它试图永远加载某个东西一样。甚至没有调用main。在应用程序运行时删除此依赖项,但我得到预期的:
ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
这是正常的,因为我已经删除了包含这个类的依赖关系。
有什么线索吗?我已经尝试了所有版本的jnp客户端或jbossall客户端,其中也包括这个namingcontextfactory
编辑:
不幸的是,这两个依赖项的组合是从所需依赖项继承的:
<dependency>
<groupId>org.jboss.naming</groupId>
<artifactId>jnp-client</artifactId>
</dependency>
里面还有spring webmvc
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
如果我和你一起跑
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</exclusion>
</exclusions>
</dependency>
很好用。
现在,如果我排除jnp客户机,我就不能访问jndi资源,但是如果我删除springsecurityweb,我就不能访问这个服务公开的其余内点。
编辑2:
所以我认为可能是两个类相互干扰,于是我用-verbose启动了java进程。这就是我发现的。
org.springframework.boot.context.config.configfileapplicationlistener$loader$$lambda$165/0x00000001002d8440来源:org.springframework.boot.context.config.configfileapplicationlistener$loader[389.020s][info][class,load]org.springframework.boot.context.config.configfileapplicationlistener$loader$$lambda$166/0x00000001002d8840来源:org.springframework.boot.context.config.configfileapplicationlistener$loader[558.011s][info][class,load]org.springframework.boot.context.config.configfileapplicationlistener$loader$$lambda$167/0x00000001002d8c40来源:org.springframework.boot.context.config.configfileapplicationlistener$loader[558.012s][info][class,load]org.springframework.boot.context.config.configfileapplicationlistener$loader$$lambda$168/0x00000001002d9040来源:org.springframework.boot.context.config.configfileapplicationlistener$loader
应用程序有时仅以详细形式打印此configfileapplicationlistener$loader
编辑3:
问题似乎是jnp客户机内部的timedsocketfactory。不知何故,只要将这个类放在jnp客户机依赖项中,spring应用程序就会被阻塞并且永远不会启动。从jnp客户机中删除这个允许应用程序启动。当然,它稍后会失败,因为jndi无法连接到服务器。
暂无答案!
目前还没有任何答案,快来回答吧!