gpt4 book ai didi

java - Weblogic Bea 10.0 M1 和 WorkManager

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:31 25 4
gpt4 key购买 nike

我必须在 WebLogic Bea 10.0 M1 服务器环境中执行长时间运行的线程。为此,我尝试使用 WorkManagers。使用自己的 WorkManager 允许我指定自己的线程超时 (MaxThreadStuckTime),而不是调整整个业务应用程序的超时。

我的设置如下:

weblogic-ejb-jar.xml:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-ejb-jar.xsd">

<weblogic-enterprise-bean>
<ejb-name>TestBean</ejb-name>
<resource-description>
<res-ref-name>myWorkManager</res-ref-name>
<jndi-name>wm/myWorkManager</jndi-name>
</resource-description>
</weblogic-enterprise-bean>

</weblogic-ejb-jar>

weblogic-application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic xmlns="http://www.bea.com/ns/weblogic/90" xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic.xsd">

<work-manager>
<name>myWorkManager</name>
<ignore-stuck-threads>1</ignore-stuck-threads>
</work-manager>

</weblogic>

和 Bean:

import javax.annotation.Resource;
import javax.ejb.Stateful;

import weblogic.work.WorkManager;

@Stateful(mappedName = "TestBean")
public class TestBean implements TestBeanRemote {

@Resource(name = "myWorkManager")
private WorkManager myWorkManager;

public void test() {
myWorkManager.schedule(new Runnable() {

public void run() {
while (true) {
System.out.println("test: +++++++++++++++++++++++++");
try {
Thread.sleep(45000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
});
}
}

当我尝试部署这些东西时,服务器给我以下异常:

[EJB:011026]The EJB container failed while creating the java:/comp/env namespace for this EJB deployment.
weblogic.deployment.EnvironmentException: [EJB:010176]The resource-env-ref 'myWorkManager' declared in the ejb-jar.xml descriptor has no JNDI name mapped to it. The resource-ref must be mapped to a JNDI name using the resource-description element of the weblogic-ejb-jar.xml descriptor.

这几天我一直在尝试弄清楚如何访问/使用 WorkMangers,但仍然将这个或那个作为异常(exception)。非常令人沮丧!

提前致谢!

最佳答案

您需要从 weblogic-ejb-jar.xml 中删除 WorkManager 引用,此引用应转到 ejb-jar.xml

事实上,我怀疑 Weblogic 架构定义“weblogic-ejb-jar.xsd”是否允许您添加引用元素,您一定会遇到 xsd 验证错误。

无论如何,去掉这个元素

resource-description from weblogic-ejb-jar.xml

<weblogic-enterprise-bean> 
<ejb-name>TestBean</ejb-name>
<resource-description>
<res-ref-name>myWorkManager</res-ref-name>
<jndi-name>wm/myWorkManager</jndi-name>
</resource-description>
</weblogic-enterprise-bean>

看起来像这样

weblogic-ejb-jar.xml

<weblogic-enterprise-bean>
<ejb-name>TestBean</ejb-name>
</weblogic-enterprise-bean>

您的 workManager 引用将像这样转到 ejb-jar.xml。

ejb-jar.xml

 <enterprise-beans>
<session>
<ejb-name>TestBean</ejb-name>
<ejb-class>com.xxx.TestBean</ejb-class> <!-- your package com.xxx-->
<resource-ref>
<res-ref-name>myWorkManager</res-ref-name>
<res-type>commonj.work.WorkManager</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</session>
</enterprise-beans>

现在我正在做的是从 JNDI 获取 WorkManager

InitialContext ctx = new InitialContext();
this.workManager = (WorkManager) ctx.lookup("java:comp/env/myWorkManager");

但我相信注释会同样有效。

@Resource(name = "myWorkManager")

我的 weblogic-application.xml 看起来和上面共享的一样

<weblogic> 
<work-manager>
<name>myWorkManager</name>
<ignore-stuck-threads>1</ignore-stuck-threads>
</work-manager>

这对我有用..如果需要请告诉我,我可以分享我的完整代码。

您可以通过转到 Weblogic 管理控制台查看您的 WorkManager 并加载它Home—>Deployments—>yourApp—>Monitoring(Tab)—>WorkLoad(Tab)”

关于java - Weblogic Bea 10.0 M1 和 WorkManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1104960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com