我有一个奇怪的问题.我有一个以前部署在tomcat中的Java应用程序,并且很高兴地使用logback classic作为slf4j实现.现在,当我们尝试在jboss 7.1.final服务器中部署相同的应用程序时,它甚至没有部署应用程序maoning.
java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
这是令人讨厌的代码行
final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
Run Code Online (Sandbox Code Playgroud)
拥有他的类是弹簧注入而失败 - 因此整个应用程序无法部署.有人有解决方案吗?提前致谢
在查看此站点和其他论坛后,我意识到Jboss 7捆绑了它自己的slf4j实现,并实现LogbackContext在logback中所做的相同ILoggerFactory接口.我们的应用程序尝试获取相同的实例,但应用服务器强加了它自己的slf4j实现.
我试图修改jboss\modules\org\slf4j\impl\main中的module.xml并将其指向logback jar.
<resources>
<resource-root path="logback-classic-0.9.28.jar"/>
<resource-root path="logback-core-0.9.28.jar"/>
</resources>
Run Code Online (Sandbox Code Playgroud)
现在,当我启动应用程序时,我遇到了严重的错误
Exception starting filter WicketFilter: java.lang.ClassCastException: ch.qos.logback.classic.LoggerContext cannot be cast to ch.qos.logback.classic.LoggerContext
我没办法.任何jboss和logback专家都可以提供帮助吗?提前致谢
我正在使用jboss-7,我想将端口号从8080更改为7001.我需要更改哪个文件?
我有一个WAR文件.我想打开它,编辑XML文件,删除一些罐子,然后重新打包.
我使用WINRAR打开WAR文件,然后删除了一些Jars并在WinRar中执行了"添加到存档"并创建了一个WAR.
当我在jboss文件夹中部署WAR时,我得到了一个例外.
16:05:14,316 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2)
MSC00001: Failed to start service jboss.deployment.unit."myapplication.war".
STRUCTURE: org.jboss.msc.service.StartException in
service jboss.deployment.unit."myapplication.war".STRUCTURE:
Failed to process phase STRUCTURE of deployment "myapplication.war"
Run Code Online (Sandbox Code Playgroud)
我如何重新包装WAR?
以前的JBoss版本包含一个脚本(如jboss_init_redhat.sh
),可以复制到/etc/init.d以便将其添加为服务 - 因此它将在启动时启动.我似乎无法在JBoss 7中找到任何类似的脚本.有没有人已经做过这样的事情?
PS我试图在Ubuntu 10.04中实现这一点
目前在Jboss AS 4/5上运行一些webapps,我正在测试迁移到jboss7.当我尝试在JBoss AS 7上部署基于jersey的webapp(带有独立预览配置文件的完整配置文件)时,我得到:
org.jboss.as.server.deployment.DeploymentUnitProcessingException: Only one JAX-RS Application Class allowed.
Run Code Online (Sandbox Code Playgroud)
我已经做了一些搜索,发现RestEasy是嵌入到Application Server中的默认JAX-RS实现.像http://community.jboss.org/message/579996和https://issues.jboss.org/browse/JBAS-8830这样的帖子提到RestEasy部署者接管了.
在AS 6中,删除部署者似乎更容易,而我没有看到AS 7的任何解决方案.
我们在JBoss 7应用服务器上运行了一个相当大的应用程序.在过去,我们使用的是ParallelGC,但它在一些堆大(5 GB或更多)并且通常几乎填满的服务器中给我们带来麻烦,我们会经常得到非常长的GC暂停.
最近,我们对应用程序的内存使用情况进行了改进,并且在少数情况下为应用程序运行的某些服务器添加了更多RAM,但我们也开始切换到G1,希望使这些暂停不那么频繁和/或更短.事情似乎有所改善,但我们看到一种奇怪的行为,以前没有发生过(使用ParallelGC):Perm Gen似乎很快就会填满,一旦达到最大值就会触发Full GC,这通常会导致长时间停顿在应用程序线程中(在某些情况下,超过1分钟).
我们使用512 MB的最大烫发尺寸几个月,在我们的分析中,使用ParallelGC,烫发尺寸通常会在390 MB左右停止增长.然而,在我们切换到G1之后,上面的行为开始发生了.我尝试将最大烫发大小增加到1 GB甚至1.5 GB,但仍然发生了Full GCs(它们只是不那么频繁).
在此链接中,您可以看到我们正在使用的分析工具的一些屏幕截图(YourKit Java Profiler).请注意,当触发Full GC时,Eden和Old Gen有很多可用空间,但Perm大小最大.完整GC后,Perm大小和加载类的数量急剧减少,但它们再次开始上升并重复循环.代码缓存很好,永远不会超过38 MB(在这种情况下它是35 MB).
以下是GC日志的一部分:
2013-11-28T11:15:57.774-0300:64445.415:[全GC 2126M-> 670M(5120M),23.6325510秒] [伊甸园:4096.0K(234.0M) - > 0.0B(256.0M)幸存者:22.0M- > 0.0B堆:2126.1M(5120.0M) - > 670.6M(5120.0M)] [时间:用户= 10.16 sys = 0.59,实际= 23.64秒]
您可以在此处查看完整日志(从我们启动服务器的那一刻起,直到完整GC后几分钟).
这是一些环境信息:
java版"1.7.0_45"
Java(TM)SE运行时环境(版本1.7.0_45-b18)
Java HotSpot(TM)64位服务器VM(内置24.45-b08,混合模式)
启动选项: -Xms5g -Xmx5g -Xss256k -XX:PermSize=1500M -XX:MaxPermSize=1500M -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintAdaptiveSizePolicy -Xloggc:gc.log
所以这是我的问题:
这是G1的预期行为吗?我在网上发现了另一篇帖子,有人质疑非常相似的内容,并说G1应该在Perm Gen上执行增量收集,但没有答案......
我的启动参数中有什么可以改进/纠正的吗?服务器有8 GB的RAM,但似乎我们缺乏硬件,应用程序的性能在触发完整的GC之前是正常的,那时用户遇到了很大的滞后并开始抱怨.
我想在hossnate 4.3中使用JBoss 7.1中的多租户功能.
我设法通过在jboss-deployment-structure中添加以下行来将它包含在我的战争中
<exclusions>
<module name="org.hibernate" />
</exclusions>
Run Code Online (Sandbox Code Playgroud)
并在我的pom.xml中为hibernate核心和实体管理器添加依赖项
这使得hibernate 4.3加载但不幸的是我收到了一个错误
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
Run Code Online (Sandbox Code Playgroud)
这是由于在hibernate 4.3使用JPA 2.1时加载了JPA 2.0
我已经看过这些线程并尝试了他们的建议 从JBoss EAP 6.1中排除JPA子系统 - 尝试在JBoss EAP 6.1中使用JPA 2.1,JBoss AS7自动加载JPA,Hibernate 4.3.0.Final和Spring Data JPA 1.4.3.RELEASE.
我添加了一个persistence.xml
<property name="jboss.as.jpa.managed" value="false" />
Run Code Online (Sandbox Code Playgroud)
从Spring Data中排除了hibernate jpa 2.0
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring-data.version}</version>
<exclusions>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
从JBoss standalone.xml中完全删除了JPA子系统,没有任何成功.
唯一能做到这一点的是在jboss-deployment-structure中排除整个javaee.api,如另一个线程所示
<exclusions>
<module name="javax.persistence.api"/>
<module name="javaee.api"/>
</exclusions>
Run Code Online (Sandbox Code Playgroud)
但这会给我的其余代码带来许多问题.
更新:我的jboss-deployment-structure.xml现在是这样的
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
<module name="org.apache.log4j" /> …
Run Code Online (Sandbox Code Playgroud) 在JBoss AS 7中,依赖于AS中包含的库的Web应用程序必须在META-INF/MANIFEST.MF中声明这些依赖关系,如下所示:
Dependencies: <package-name>
Run Code Online (Sandbox Code Playgroud)
例:
Dependencies: org.slf4j
Run Code Online (Sandbox Code Playgroud)
(这与Import-Package:for OSGi相当.)有关从旧版本迁移,类加载和部署的隐式模块依赖关系的文章中可以找到更多信息.
该项目是使用Maven构建的.AS中包含的所有依赖项都使用范围"提供"声明.
有没有一种简单的方法可以使用Maven自动创建这个依赖项列表?
只应包含声明范围"已提供"的依赖项,因为所有其他依赖项已包含在WAR中.
我遇到了这个错误,其中CPU使用率达到极限,JBoss需要重启(java.lang.OutOfMemoryError: PermGen space
).
我发现旧的JBoss版本的解决方案可以增加MaxPermSize
.我想JBoss7也是如此.
为了不再遇到任何问题,哪个值足够好?有没有办法永久远离这个问题(比如让我们说使用像JRockit这样的其他虚拟机)?
在JBoss-as-7.0.x独立部署中加载第三方JAR的最佳实践是什么?
我试过了:
上面方法1的明显优势是在部署时比内容2和方法3减少了内存占用.然而,由于需要在module.xml中显式定义JAR的每个依赖项,因此维护起来似乎相当艰巨.对于大量的第三方库来说,这似乎无法维护.