问题标签 [wildfly-swarm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
slf4j - Setting up Wildfly Swarm with slf4j and log4j2
I am trying to set up a Wildfly Swarm based project to log with log4j 2 through slf4j. I have already tried a few things reaching some kind of compromise, that I will base my question on (maybe it's of help to others). Yet my solution is nothing I am fully satisfied with, so I am curious to see if someone can give hints on how to improve my project setup.
First of all, my pom.xml:
So, I do two things regarding logging:
- adding the dependencies to log4j2 and the slf4j bridge (seems like slf4j itself is not necessary)
- setting a jvm argument to point to the log4j2.xml (dirty way, but will suit the example)
Next thing I did is disabling the logging subsystem of wildfly swarm by placing a jboss-deploayment-structure.xml under WEB-INF with the following content:
Finally, I created a simple WebListener to test my logging setup:
Note: of course, there's also a log4j2.xml, but it's not doing anything special, just prints to a file, so quoting it here would not add anything, I think.
Result
Good news is, that my message is written to the log-file. On the downside, the output from the container is written on the console (well, didn't expect it to be in the log-file with these settings, but that's what I'd like to have) and with log4j 2 in version 2.9.0, there's an ugly error message during startup:
With other versions of log4j 2, including 2.9.1, it's been even worse:
Later crashing with:
Seems like my solution is rather fragile...
Some additional notes to the problem
As a measure of keeping the answers / discussions focused, I'd like to add some notes:
- I'd like to have the containers messages log-messages to be logged by log4j 2 to avoid to have two logging configurations. As log4j 2 is already established in my company, I'd like to keep that one. For the same reason, I don't want to have log4j 2 messages routed to wildfly swarms logging system through slf4j.
- One of our libraries, that I have to use in my final project, we already log against slf4j, so I don't want to have to log against log4j 2 directly. Well, at least this problem seems to be adressed by my solution already.
- I tried to add my own log4j 2 container module, but it either had no effect or led to a java.lang.ClassNotFoundException: org.xml.sax.SAXException.
- My own research on the web led me to the impression, that rerouting the containers log-messages to log4j 2 seems to be a problem in Wildfly already, so it's not a problem of Wildfly Swarm. Seems like they have questioned the need of that feature, but I think that with Wildfly Swarm, the matter needs to be re-evaluated.
Having said all this, I'm curious to see if someone can help me improving on my project setup... Thank you in advance!
@Benjamin: Sorry for the long delay, but I was pretty busy the last weeks. I have no special settings in my log4j2.xml, I really don't believe that its content is the root of your difficulties. As I prefer to be able to config my log4j2.xml without recompiling the project, I usually place it outside my jar-file. The location of the file is then up to you as you can set its path with the system property log4j.configurationFile. If you check the pom.xml I posted above, you'll see it in the configuration part of the wildfly-swarm-plugin. However, I suggest you rather do that in your project-stages.yml or project-defaults.yml, which have to go to src/main/resources of your project. That's how I did it for my real application and it still seems to work even after upgrading to Thorntail. Just keep case that your path starts with file:... - hope that helps.
java - wildfly swarm:查找 ejb 远程接口
我已经生成了两个简单的野蝇群项目。首先具有带有远程接口的 EJB 外观,其次应该查找它并发送消息。所以第二个应该是客户。
我用的是Wildfly swarm 2017.9.4版
我的 EJB 外观查找路径:
我的客户 :
将客户端依赖项添加到 pom.xml
我不知道客户的全部依赖关系并且总是有
另外如何解决在客户端查找中传递安全凭据的问题?
项目本身在这里
https://drive.google.com/open?id=0B45Md1_c5-gGQ0p3Q2pURUxOY00
docker - docker中的Wildfly swarm - 启动http服务器时出现异常
我在 Docker 中运行一个 jar 文件(主机 macosx),在启动过程中我得到了这个堆栈跟踪:
似乎,它无法启动 http 服务器,某些服务没有安装?我使用的是正确的 docker 镜像吗?
Dockerfile:
我可能做错了什么,但我不知道是什么!可能是接口问题还是套接字问题?
编辑:
这些是我在 docker-compose.yml 中传递的环境变量:
postgresql - 从 java 应用程序连接到 postgres 容器?
我正在对 Java 应用程序(wildfly 服务器)进行 docker 化,该应用程序需要连接到也作为容器运行的 postgres 服务器。
现在,由于 postgres 连接的配置在 .jar 文件中,它应该连接到在 localhost 上运行的 postgres 实例,当我启动 .jar 容器时,它告诉我它找不到 postgres 服务器(有意义,因为它不在本地主机上运行,而是在不同的容器上运行)。
13:00:38,448 错误 [stderr] (main) 原因:org.postgresql.util.PSQLException:连接到 localhost:5432 被拒绝。检查主机名和端口是否正确以及 postmaster 是否接受 TCP/IP 连接。
有没有办法通过wildfly服务器的外部配置文件覆盖.jar中的配置文件,这样它就不会在本地主机上寻找postgres服务器,而是在运行postgres服务器的容器上寻找?
Tnx,汤姆
java - API 调用的等效 YAML 配置
我一直在使用 API 成功启动我的应用程序,现在由于某些原因,我必须使用一个空心的 uberjar 从单独的 WAR 启动应用程序。由于我找不到任何关于如何使用带有空心 jar 的自定义 main 方法的参考资料,并且由于 2017.10.1 中关于 main 方法的弃用说明,我决定使用 YAML 配置。我进行了转换,但我遇到了不同的错误,这些错误至少表明消息传递部分没有获取配置。挖掘参考资料也无济于事。
这是有效的方法:
这是不工作的 YAML 配置:
在尝试使用配置时,我在日志中收到以下错误:
之后,一堆其他相关的错误被抛出,最终服务器停止。
java - 如何在带有 .war 包装的 WildFly Swarm 中添加具有加密密码的数据源?
我正在使用以下配置将数据源添加到 WildFly 群中的 WAR:
如何更改此密码以使密码加密而不是明文?
consul - 野蝇群领事
我正在尝试将 Wildfly Swarm REST 服务注册到正在运行的 Consule 代理,但它无法正常工作。
我能够注册一项服务(我可以在 Consul ui 中看到它),但不知何故,健康检查不起作用。
Swarm 服务器经常告诉我,由于“不允许使用 HTTP 405 方法”,“发送检查”失败。我可以在 Consule 控制台中看到类似的日志,不允许使用 GET 方法。
我陷入了死胡同:我的应用程序无法正常工作,Wildfly Swarm 示例也无法正常工作(同样的例外)。为了确定,我还在两侧配置了一个 CORS 过滤器,但这也不起作用。
我正在使用 Wildfly Swarm 2017.10.1 和 Consul 1.0.0。
我希望你们能提供帮助。此致
hibernate - 在 Wildfly Swarm 应用程序中忽略 hibernate.jdbc.time_zone 设置
我正在使用 Wildfly Swarm (2017.11.0) 构建一个应用程序,它要求ZonedDateTime
对象以 UTC 格式保存。
目前,我正在使用 ExamplesDS JTA 数据源并配置以下属性:
由于 Swarm JPA 依赖项将 Hibernate 5.0.x 和 JPA 2.1 声明为依赖项,因此我手动包含
和
并将它们设置为未提供。
但是,Hibernate 完全忽略了该属性,它保留并获取时间戳作为ZonedDateTime
本地区域。persistence.xml 中的其他属性被正确识别。
目前,我不确定问题出在哪里以及如何解决。此外,当我使用 jvm 参数运行 Wildfly Swarm 时-Duser.timezone=UTC
,没有任何变化。这可能是 ExamplesDS 的问题还是 Wildfly Swarm 忽略了我的依赖声明?如果是这样,我如何确保 Swarm 使用正确的版本?
java - 带有postgresql的wildfly-SWARM中的连接池
我正在使用 postgres、wildfly-swarm、hibernate,并且我的事务是 bean 管理的。
我的 project-defaults.yml 数据源:数据源:部分
在模拟应用程序和 postgres 之间的连接丢失后(关闭数据库、iptables 丢弃数据包等,然后执行一些请求然后再次启动数据库或清除 iptables 丢弃规则),数据库已启动但 Hibernate/swarm 无法找到连接不再...有人可以告诉我我做错了什么吗?
编辑:添加堆栈跟踪
2017-11-23 15:16:03.180 错误 [PgSinkTask.paymentResultToJPA.0] PgSinkTask.paymentResultToJPA.0:重试提交异常::javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法获取 JDBC 连接 2017 -11-23 15:16:03.180 错误 [PgSinkTask.paymentResultToJPA.0] PgSinkTask.paymentResultToJPA.0:重试提交时出现异常:javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法在 org 获取 JDBC 连接。 hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl. java:1608) 在 org.hibernate.jpa.spi。AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1171) at com.scheidtbachmann.fcs.idbt.datamart.sink.JPASinkTask.setConnectorStatus(JPASinkTask.java:297) at com.scheidtbachmann.fcs.idbt.datamart.sink.JPASinkTask.errorHandler( JPASinkTask.java:423) 在 com.scheidtbachmann.fcs.idbt.datamart.sink.JPASinkTask.flush(JPASinkTask.java:328) 在 com.scheidtbachmann.fcs.idbt.datamart.sink.JPASinkTask.getRecord(JPASinkTask.java: 182) 在 com.scheidtbachmann.fcs.idbt.datamart.sink.JPASinkTask.run(JPASinkTask.java:144) 在 java.lang.Thread.run(Thread.java:748) 在 org.glassfish.enterprise.concurrent.ManagedThreadFactoryImpl $ManagedThread.run(ManagedThreadFactoryImpl.java:250) 原因:org.hibernate.exception.GenericJDBCException:无法在 org.hibernate.exception.internal 获取 JDBC 连接。StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java: 95) 在 org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:112) 在 org.hibernate.engine 的 org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:90) .jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:47) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl$声明准备模板。prepareStatement(StatementPreparerImpl.java:172) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148) 在 org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1929) 在 org.hibernate .loader.Loader.executeQueryStatement(Loader.java:1898) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1876) at org.hibernate.loader.Loader.doQuery(Loader.java:919) at org. hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:306) at org.hibernate.loader.Loader.loadEntity(Loader.java:2204) at org .hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:60) 在 org.hibernate.loader.entity.AbstractEntityLoader。load(AbstractEntityLoader.java:50) at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3967) at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:508) at org.hibernate .event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:478) at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219) at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java :278) org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121) org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89) org.hibernate.internal.SessionImpl。 fireLoad(SessionImpl.java:1129) 在 org.hibernate.internal.SessionImpl.access$2600(SessionImpl.java:164) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2696) at org.hibernate.internal.SessionImpl.get(SessionImpl.java:980 ) 在 org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170) 在 org.hibernate.event.internal.DefaultMergeEventListener 的 org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:290)。 onMerge(DefaultMergeEventListener.java:69) at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:840) at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:822) at org.hibernate.internal.SessionImpl .merge(SessionImpl.java:827) 在 org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1161)...省略了 7 个常见框架 原因:java.sql.SQLException:javax.resource.ResourceException:IJ000460:在 org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java: 146) 在 org.jboss.as.connector.subsystems.datasources.WildFlyDataSource.getConnection(WildFlyDataSource.java:66) 在 org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) 在 org .hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:386) at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:87) ...省略了 39 个常见帧 原因:javax。 resource.ResourceException:IJ000460:在 org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:747) 的 org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:424) 检查事务时出错org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:138) ... 省略了 43 个常用帧 原因:javax.resource.ResourceException:IJ000459:事务未激活:tx=TransactionImple < ac, BasicAction : 0:ffffc0a83842:6e69d97c:5a16d4f3:18 状态: ActionStatus.ABORTED > at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:408) ... 省略了 45 个常用帧TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:424) 在 org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:747) 在 org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java: 138)...省略了 43 个公共帧 原因:javax.resource.ResourceException:IJ000459:事务未激活:tx=TransactionImple < ac,BasicAction:0:ffffc0a83842:6e69d97c:5a16d4f3:18 状态:ActionStatus.ABORTED > at org .jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:408) ...省略了45个常用框架TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:424) 在 org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:747) 在 org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java: 138)...省略了 43 个公共帧 原因:javax.resource.ResourceException:IJ000459:事务未激活:tx=TransactionImple < ac,BasicAction:0:ffffc0a83842:6e69d97c:5a16d4f3:18 状态:ActionStatus.ABORTED > at org .jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:408) ...省略了45个常用框架java:747) at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:138) ... 省略了 43 个常见帧 原因:javax.resource.ResourceException:IJ000459:事务未激活:tx= TransactionImple < ac, BasicAction: 0:ffffc0a83842:6e69d97c:5a16d4f3:18 status: ActionStatus.ABORTED > at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:408) ... 45 个常用帧省略java:747) at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:138) ... 省略了 43 个常见帧 原因:javax.resource.ResourceException:IJ000459:事务未激活:tx= TransactionImple < ac, BasicAction: 0:ffffc0a83842:6e69d97c:5a16d4f3:18 status: ActionStatus.ABORTED > at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:408) ... 45 个常用帧省略connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:408) ...省略了45个常用帧connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:408) ...省略了45个常用帧
编辑:添加了 persistence.xml
java - 属性文件 - 远程 x 本地
我有一个属性文件来处理我的数据源。该文件由属性 maven 插件加载。加载后,我在 wildfly Swarm 插件上使用。
数据库属性:
属性 Maven 插件:
Wildfly Swarm 插件:
一切正常。远程和本地。
我也使用 Git,我有两个分支。一个(主)用于更新我的远程存储库,另一个(开发)用于代码和测试。
最后,我使用 Heroku 来部署我的应用程序,并为此使用 maven 插件(不是 git)。
我的问题是关于数据源属性文件。我不知道如何拥有两个版本的文件。一种在我(本地)编码时使用,另一种在我需要在 Heroku 上部署应用程序时使用。
当然,本地数据库的地址、用户和密码与远程数据库不同。
这一刻,我将远程信息放入属性文件并部署在 Heroku 上。然后我带着本地信息回来继续编码。