Openshift - 在Wildfly上部署简单的Java EE应用程序失败

时间:2015-06-28 23:19:32

标签: postgresql java-ee ejb openshift wildfly

我试图在Openshift上部署一个非常简单的应用程序。它是一个带有单个WAR和EJB模块的EAR项目。在WAR内部,有一个REST服务,它调用EJB模块中定义的EJB。本地和Openshift我使用Wildfly 9.0.0 CR2和PostgreSQL 9.2。在本地部署时一切正常。当在Openshift上部署相同的代码时,我在日志中遇到以下错误:

2015-06-28 18:23:04,574 WARN  [org.jboss.as.clustering.jgroups] (MSC service thread 1-1) WFLYCLJG0006: property bind_addr for protocol org.jgroups.protocols.TCP attempting to override socket binding value 127.12.77.1 : property value 127.12.77.1 will be ignored
2015-06-28 18:23:04,574 WARN  [org.jboss.as.clustering.jgroups] (MSC service thread 1-1) WFLYCLJG0006: property bind_port for protocol org.jgroups.protocols.TCP attempting to override socket binding value 7600 : property value 7600 will be ignored
2015-06-28 18:23:06,252 INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 70) WFLYJPA0010: Starting Persistence Unit (phase 2 of 2) Service 'cooking.ear/cooking-ejb-1.0-SNAPSHOT.jar#cookingPU'
2015-06-28 18:23:08,165 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.jgroups.channel.ee: org.jboss.msc.service.StartException in service jboss.jgroups.channel.ee: java.security.PrivilegedActionException: java.net.BindException: [TCP] /127.12.77.1 is not a valid address on any local network interface
        at org.wildfly.clustering.jgroups.spi.service.ChannelBuilder.start(ChannelBuilder.java:79)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.security.PrivilegedActionException: java.net.BindException: [TCP] /127.12.77.1 is not a valid address on any local network interface
        at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:638)
        at org.jboss.as.clustering.jgroups.JChannelFactory.createChannel(JChannelFactory.java:99)
        at org.wildfly.clustering.jgroups.spi.service.ChannelBuilder.start(ChannelBuilder.java:77)
        ... 5 more
Caused by: java.net.BindException: [TCP] /127.12.77.1 is not a valid address on any local network interface
        at org.jgroups.util.Util.checkIfValidAddress(Util.java:3480)
        at org.jgroups.stack.Configurator.ensureValidBindAddresses(Configurator.java:902)
        at org.jgroups.stack.Configurator.setupProtocolStack(Configurator.java:118)
        at org.jgroups.stack.Configurator.setupProtocolStack(Configurator.java:57)
        at org.jgroups.stack.ProtocolStack.setup(ProtocolStack.java:477)
        at org.jgroups.JChannel.init(JChannel.java:854)
        at org.jgroups.JChannel.<init>(JChannel.java:159)
        at org.jboss.as.clustering.jgroups.JChannelFactory$1.run(JChannelFactory.java:96)
        at org.jboss.as.clustering.jgroups.JChannelFactory$1.run(JChannelFactory.java:93)
        at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:634)
        ... 7 more

提到的地址 - 127.12.77.1是$ OPENSHIFT_WILDFLY_IP。 我不知道造成这个问题的原因。首先,我认为这是一个数据库连接问题,因为它发生在启动持久性单元的第二阶段时。我在Openshift上连接到DB并看到它已成功创建,所以可能不是,但这里是我使用的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="cookingPU">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>java:jboss/datasources/PostgreSQLDS</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL9Dialect" />
        </properties>
    </persistence-unit>
</persistence>

使用的数据源是默认数据源。我没有在standalone.xml中更改任何内容。

我注意到的另一件事是当我向项目添加任何EJB时发生部署问题。 这是我试图使用的一个简单的:

@Stateless
public class AnyEjb {
    public String hello() {
        return "Hi there!";
    }
}

这是在EJB模块中定义的。然后在Web模块中,我有这个类调用它:

@Path("anything")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class AnyEndpoint {

    @EJB
    private AnyEjb anyEjb;

    @GET
    public String sayHi() {
        return anyEjb.hello();
    }
}

我不确定它是否以及如何与此BindException连接。 我尝试在本地运行此应用程序,同时使用独立和独立的完整ha配置文件,它在两种情况下均可使用。我觉得它必须是Openshift配置的一些问题,但我不知道在哪里看。我对Openshift和Java EE非常陌生。请指出我正确的方向。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

可能会https://issues.jboss.org/browse/JGRP-1928。与Rado Husar交谈,看看如何解决这个问题。

答案 1 :(得分:0)

看起来问题是(如@Bela Ban所建议的)与WildFly 9.0.0CR2附带的JGroups版本相关联。我将等待WildFly最终版本的修复。

同时作为能够在Openshift上在WildFly 9.0.0CR2上部署应用程序的解决方法,我决定为我的服务器禁用群集功能。 在.openshift中提供的standalone.xml中,我删除了org.jboss.as.clustering.jgroups模块,并将infinispan缓存设置从分布式更改为本地。

我一直基于这个解决方案(对于WildFly 8):https://gist.github.com/fjuma/3df7f64fbaebd5506ef5#file-standalone-xml

但我必须对其进行修改,以便它可以在Wildfly 9上运行。完整的独立文件库可供我参考,可供参考http://pastebin.com/aANkPUWk