8

第一阶段

由于我更改了 JBoss 的 JNDI 端口,因此在 Eclipse 下关闭正在运行的 JBoss 实例时遇到问题。当然,我可以从控制台视图关闭它,但不能使用停止按钮(它仍然在默认的 1099 端口搜索 JNDI 端口)。我期待任何解决方案。谢谢!

使用环境:

  • JBoss 4.0.2(使用默认
  • 日食 3.4.0。(使用 JBoss 工具 2.1.1.GA)

默认端口:1098、1099 更改的端口:11098、11099

我在 jbosspath/server/default/conf/jboss-service.xml 中更改了以下部分:

   <!-- ==================================================================== -->
   <!-- JNDI                                                                 -->
   <!-- ==================================================================== -->

   <mbean code="org.jboss.naming.NamingService"
      name="jboss:service=Naming"
      xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">
      <!-- The call by value mode. true if all lookups are unmarshalled using
      the caller's TCL, false if in VM lookups return the value by reference.
      -->
      <attribute name="CallByValue">false</attribute>
      <!-- The listening port for the bootstrap JNP service. Set this to -1
        to run the NamingService without the JNP invoker listening port.
      -->
      <attribute name="Port">11099</attribute>
      <!-- The bootstrap JNP server bind address. This also sets the default
      RMI service bind address. Empty == all addresses
       -->
      <attribute name="BindAddress">${jboss.bind.address}</attribute>
      <!-- The port of the RMI naming service, 0 == anonymous -->
      <attribute name="RmiPort">11098</attribute>
      <!-- The RMI service bind address. Empty == all addresses
       -->
      <attribute name="RmiBindAddress">${jboss.bind.address}</attribute>
      <!-- The thread pool service used to control the bootstrap lookups -->
      <depends optional-attribute-name="LookupPool"
         proxy-type="attribute">jboss.system:service=ThreadPool</depends>
   </mbean>

   <mbean code="org.jboss.naming.JNDIView"
        name="jboss:service=JNDIView"
        xmbean-dd="resource:xmdesc/JNDIView-xmbean.xml">
   </mbean>

日食设置:

关于我的 JBoss Tools 偏好: 我有一个以前的版本,我遇到了这个问题,我读到了 JbossTools 中的一些错误修复,所以更新到 2.1.1.GA。现在按钮改变了,我有了一个新的偏好视图,但我不能修改任何东西......似乎也很不正常:

错误对话框:

堆栈跟踪:

javax.naming.CommunicationException: Could not obtain connection to any of these urls: localhost:1099 [Root exception is javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]]
    at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1385)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:579)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
    at javax.naming.InitialContext.lookup(InitialContext.java:347)
    at org.jboss.Shutdown.main(Shutdown.java:202)
Caused by: javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:254)
    at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1370)
    ... 4 more
Caused by: javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.ConnectException: Connection refused: connect]
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:228)
    ... 5 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
    at java.net.Socket.connect(Socket.java:452)
    at java.net.Socket.connect(Socket.java:402)
    at java.net.Socket.<init>(Socket.java:309)
    at java.net.Socket.<init>(Socket.java:211)
    at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:69)
    at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:62)
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:224)
    ... 5 more
Exception in thread "main" 

第二阶段:

在文件/新/其他/服务器中创建新服务器后,它确实出现在首选项选项卡中。现在停止按钮正在工作(服务器在没有对 jndi 端口进行任何额外修改的情况下接收关闭消息 - 现在没有机会)但它仍然抛出错误消息,虽然不同,但它没有异常堆栈跟踪:“服务器JBoss 4.0 服务器未能停止。”

4

7 回答 7

3

这是针对此问题的详细修复: 重新映射 jndi 端口时,Eclipse WTP 服务器连接器不会关闭 JBoss。

这是因为默认服务器连接器配置文件不使用自己的 jndiPort 别名。eclipse.org 也讨论了这个问题:http: //www.eclipse.org/forums/index.php? t=msg&goto=489439&S=0db4920aab0a501c80a626edff84c17d#msg_489439

解决方案来自 eclipse 中的 .serverdef 文件:


<eclipse>\plugins\org.eclipse.jst.server.generic.jboss_1.5.105.v200709061325\servers\jboss*.serverdef

他们为 jndi 端口声明了一个 xml 属性:


<property id="jndiPort"
 label="%jndiPort"
 type="string"
 context="server"
 default="1099" /> 

这只需要在 serverdef 有 STOP 命令编码的地方使用:

所以这:


 <stop>
  <mainClass>org.jboss.Shutdown</mainClass>
  <workingDirectory>${serverRootDirectory}/bin</workingDirectory>
  <programArguments>-S</programArguments>
  <vmParameters></vmParameters>
  <classpathReference>jboss</classpathReference>
 </stop>

变成这样:


 <stop>
  <mainClass>org.jboss.Shutdown</mainClass>
  <workingDirectory>${serverRootDirectory}/bin</workingDirectory>
  <programArguments>-s jnp://${serverAddress}:${jndiPort}</programArguments>
  <vmParameters></vmParameters>
  <classpathReference>jboss</classpathReference>
 </stop>

可以通过与 jndi 连接的定义进行比较来验证其原理:


 <jndiConnection>
  <providerUrl>jnp://${serverAddress}:${jndiPort}</providerUrl>
<initialContextFactory>org.jnp.interfaces.NamingContextFactory</initialContextFactory>
  <jndiProperty>
   <name></name>
   <value></value>
  </jndiProperty>
 </jndiConnection>

这个通用案例修复的灵感归功于:Moisa Laurentiu Florin。正是他们的贡献让我寻找一种方法来替换 ${jndiPort} 而不是硬编码的值。

此修复更正了两个普通的 Eclipse WTP 服务器连接器。我还在研究 JBOss IDE 连接器

于 2009-10-03T01:52:05.960 回答
3

打开 jboss-path\bin\shutdown.jar

示例:jboss-4.2.3.GA\bin\shutdown.jar

并打开 jboss-path\bin\shutdown.jar\jndi.properties

和改变

java.naming.provider.url=jnp://localhost:1099 到 java.naming.provider.url=jnp://localhost:11099

于 2011-01-24T15:02:38.743 回答
1

OK,你要做的是File->New->Other->Server,然后在那里设置你的JBoss服务器。然后它将出现在 Preferences->JBossTools->Servers 中。

令人费解。

于 2008-10-06T11:23:59.583 回答
0

在 MyEclipse 服务器配置中,您可以找到“Optional Shutdown Argument”字段,该字段填充了默认值

--shutdown

将其更改为

-s jnp://localhost:11099 --shutdown

编辑:

抱歉,这个答案与 MyEclipse 有关。但是,必须有一些地方也可以在您的环境中指定 JBoss 关闭命令。也许您看一下“运行...”配置?

于 2008-10-06T08:06:27.860 回答
0

您应该在文件“/home/fmoisa/workspace/eclipse/plugins/org.eclipse.jst.server.generic.jboss_1.5.206.v20090115/servers/jboss42.serverdef”中修改:

org.jboss.Shutdown ${serverRootDirectory}/bin -S -Djboss.boot.loader.name=shutdown.bat jboss.shutdown

对此:

org.jboss.Shutdown ${serverRootDirectory}/bin -S -sjnp://localhost:11099 -Djboss.boot.loader.name=shutdown.bat jboss.shutdown

全部;)

于 2009-04-23T21:11:36.783 回答
0

使用 JBoss 工具提供的服务器适配器,而不是 Eclipse WTP 提供的默认适配器。

然后你可以简单地双击服务器,你可以编辑 JNDI 端口(顺便说一句,如果你不做任何事情,它会自动从 XML 配置中获取)。您还可以通过启动配置中的命令行参数来设置 JNDI 端口,但这比仅设置端口值更麻烦。

于 2009-05-17T10:08:13.690 回答
0

这在 JBoss 6.0.0M3 中有所改变。

停止命令现在是:

"-s 服务:jmx:rmi:///jndi/rmi://localhost:1090/jmxrmi"

请注意,端口也发生了变化:不再是 JNDI 端口 1099,而是RMI/JMX 端口 1090。因此,您将需要服务器定义中的另一个配置参数。

我不知道 JBoss 6.0.0M3 服务器是否需要“JNDI 端口”参数。

我在http://www.cs.hs-rm.de/~knauf/public/有一个修改过的 Eclipse 插件,其中包含 6.0.0M3 的服务器定义,包括此更改。该站点还链接到 JBoss 论坛主题,其中包含有关此更改的更多详细信息。

最好的祝福

沃尔夫冈可耐福

于 2010-06-11T08:58:12.187 回答