天道酬勤,学无止境

Weblogic Server 11g 上的自定义线程(Custom Thread on Weblogic Server 11g)

问题

我的 weblogic 服务器上需要一个自定义线程; 我不能使用 TimerEJB 或 Delayed MDB,因为我必须使用 3d 库。

我知道不鼓励应用服务器上的自定义线程; 这里有一篇相关的帖子(4 岁):为什么不鼓励在 Java EE 容器中生成线程?

是不是还气馁? 我可以使用ExecutorService或 Quartz 吗? 或者我只需要考虑 commonj 和工人经理?

回答1

在 Weblogic 11g (EJB3.0) 上,不鼓励创建“自己的线程执行器”(另请参阅 Java EE 规范和多线程),您应该使用:

  • 定时器服务

例子:

MyEjb {
   @Stateless
   public class TimerBean implements TimerRemote {

    @Resource
    TimerService service;

    @Override
    public void startTimer() {
        Timer timer = service.createTimer(1000,  1000, null);
        System.out.println("Timers set");
    }

    @Timeout
    public void handleTimeout(Timer timer) {
        System.out.println("Handle timeout event here...");
    }
}
  • 延迟的MDB
  • 工作经理

**如果您不能使用 Deleyed MDB 或 TimerService,则需要使用 Work Manager **。

Weblogic 和 Websphere 是 CommonJ (JSR 237 Timer & WorkManager) 兼容的; 换句话说,他们使用一个通用的界面来与工作经理一起工作; 在 weblogic 中,工作管理器调节线程的生命周期(Servlet、EJB、MDB、...、自定义线程)。

恕我直言,不要使用ExecutorService因为它不受 weblogic 的控制:如果停止应用程序(不是服务器),则 weblogic 控制下的线程将停止,其他线程不应终止; 我遇到了这个问题。

工作经理

WebLogic Server 中的 WorkManager 功能本质上是动态的,根据传入请求的数量,线程池大小会自动调整大小以最大化吞吐量。 要使用WorkManager,您可以通过 commonj 接口或 MBean 进行访问。

例子:

InitialContext ic = new InitialContext();
commonj.work.WorkManager wm = (WorkManager);
ic.lookup(‘java:comp/env/wm/default’); // default work manager

春天

例如,spring 有一种简单的方法可以将自己的 TaskExecutor 附加到 comonj 工作管理器:

<bean id="workManager" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
        <property name="workManagerName" value="java:comp/env/wm/default" />
    </bean>

石英

Quartz 在应用服务器上工作,在 spring 中他们可以使用工作管理器

爪哇EE 7

JEE7 引入了 Batch (JSR 352)。 Java Platform API (Batch) 的批处理应用程序提供了批处理应用程序的编程模型和用于调度和执行作业的运行时。

执行服务

从java规范:

Java EE 7 平台中的另一个新功能是 Batch API,它提供了批处理应用程序的编程模型和调度和执行作业的运行时,以及 Concurrency Utilities API,它通过托管执行程序服务、托管调度执行程序提供异步功能.

在 JEE7 Executor Service 中扩展了ManagedExecutorServiceManagedThreadFactory

例子:

   javax.naming.InitialContext ctx = new InitialContext();
   ManagedExecutorService mes = (ManagedExecutorService)
       ctx.lookup("java:comp/env/concurrent/ThreadPool");

   // Create a set of tasks to perform the account retrieval.
   ArrayList<Callable<MyObject>> retrieverTasks = new ArrayList<Callable<MyObject>>();
   retrieverTasks.add(new MyCallable());

结论:Weblogic

请参阅 http://www.oracle.com/technetwork/java/restrictions-142267.html

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Custom Thread on Weblogic Server 11g
    I need a custom threda on my weblogic server; I cannot use TimerEJB or Delayed MDB since I have to use a 3d library. I know that custom threads on application server are discouraged; here a related post (4 years old): Why is spawning threads in Java EE container discouraged? Is it still discouraged? Can I use ExecutorService or Quartz? Or I have to consider only commonj and worker manager?
  • Solaris JMS Client 连接Weblogic 11g t3s 安全问题(Solaris JMS Client connect to Weblogic 11g t3s security problem)
    问题 当我尝试在 Solaris Server 中连接 Weblogic t3s 协议时,它显示以下错误: java.lang.IllegalStateException: Not enough cryptography available to enable a cipher suite! at com.certicom.tls.interfaceimpl.TLSSystem.resetCipherSuiteSupport(Unknown Source) at com.certicom.tls.interfaceimpl.TLSSystem.setCertificateSupport(Unknown Source) at com.certicom.tls.interfaceimpl.TLSSystem.<init>(Unknown Source) at com.certicom.tls.interfaceimpl.TLSSystem.<init>(Unknown Source) at com.certicom.net.ssl.SSLContext.<init>(Unknown Source) at com.bea.sslplus.CerticomSSLContext.<init>(Unknown Source) at sun.reflect
  • DeploymentException & Class Not Found on WebLogic Admin Server 11g
    Related: Load external properties files into EJB 3 app running on WebLogic 11 Using Oracle Enterprise Pack for Eclipse, I created an Enterprise Project and named it: PropertiesDemoEAR Also created a PropertiesDemoEARWeb module in which I put this code (inside PropertiesDemoEARWeb / Java Resources / src / com.project.util): package com.project.util; public class PropertiesFileHandler extends ApplicationLifecycleListener { private static final String FILE = "C:/etc/error.properties"; public void preStart(ApplicationLifecycleEvent evt) { System.out.println("\n\n\t\tInside preStart() method\n\n")
  • Solaris JMS Client connect to Weblogic 11g t3s security problem
    When I try to connect Weblogic t3s protocol in Solaris Server, it shows this error: java.lang.IllegalStateException: Not enough cryptography available to enable a cipher suite! at com.certicom.tls.interfaceimpl.TLSSystem.resetCipherSuiteSupport(Unknown Source) at com.certicom.tls.interfaceimpl.TLSSystem.setCertificateSupport(Unknown Source) at com.certicom.tls.interfaceimpl.TLSSystem.<init>(Unknown Source) at com.certicom.tls.interfaceimpl.TLSSystem.<init>(Unknown Source) at com.certicom.net.ssl.SSLContext.<init>(Unknown Source) at com.bea.sslplus.CerticomSSLContext.<init>(Unknown Source) at
  • JRE 8 compatibility with weblogic 10.3.6 (11g
    Could you please help in finding out if JRE 8 would be compatible with weblogic 10.3? We have a swing based application deployed on weblogic 10.3 server. We want to upgrade our JRE so wanted to check if JRE 8 would be able to run apps deployed on weblogic 10.3
  • Weblogic 默认用户名、密码问题
    通过阅读Oracle相关文档发现ADF应用的部署和发布方式在新版本中做了一些更改,于是今天想进行下研究和测试,启动JDeveloper自带 的WebLogic,并打开控制台页面后,输入用户名密码weblogic/weblogic进行登录,却发现无法正常登录,提示用户名/密码错误。试验 了几次不成功后,求助于Oracle官方提供的文档,在e13852.pdf中有段关于用户名和密码的描述: Default Administrator Password Has Changed. The default administrator password for WebLogic Server has been changed from weblogic to welcome1. Use weblogic/welcome1 for logging in to the Administration Console when accessing the Examples Server (wl_server) domain and Medical Records Server . 原来是在WebLogic 11g(即WebLogic 10.3.1)版本中默认的管理员密码做了修改,这里给出的是welcome1,但是在控制台登录页面进行测试后发现仍不能正常登录,于是转到 boot.properties文件
  • Jboss Seam:在WebLogic 10.3.2(11g)上启用调试页面(Jboss Seam: Enabling Debug page on WebLogic 10.3.2 (11g))
    问题 跳过更新3 我想在Weblogic 10.3.2(11g)上启用Seam调试页面。 因此,我做了以下工作: 我的ejb和Web Maven项目(都是我的超级项目的模块)中都具有jboss-seam和jboss-seam-debug罐子作为依存关系,我将此上下文参数放在了web.xml中: <context-param> <param-name>org.jboss.seam.core.init.debug</param-name> <param-value>true</param-value> </context-param> 现在,当我点击应用程序的URL时,我得到了带有此异常的调试页面(在文章末尾有完整的stacktrace): 由java.lang.IllegalStateException引起,并带有消息:“当前阶段未绑定任何相位ID(请确保您没有安装两个SeamPhaseListener实例)” 从我阅读的帖子中可以看出,这似乎与类路径中的两个jar包jboss-seam或jboss-seam-debug有某种关系。 我打开了我的耳朵文件,但每个文件中只有一个(耳朵里),而战争本身在WEB-INF / lib中没有库。 我还阅读了使用components.xml初始化调试页面的另一种方法。 我还尝试在WEB-INF中包含以下components.xml,但它也不起作用
  • 【WebLogic】ClassNotFoundException: weblogic.jdbc.wrapper.PoolConnection
    问题描述: weblogic启动web域工程报错如下 用的是oracle19c,jdk1.6,weblogic11g java.lang.Exception: java.rmi.RemoteException: EJB Exception: ; nested exception is: java.lang.AssertionError: java.lang.ClassNotFoundException: weblogic.jdbc.wrapper.PoolConnection 原因分析: 以前,是oracle11g,以为是weblogic11g、jdk1.6和19c不兼容导致; 想着ojdbc14.jar替换为ojdbc6.jar,结果后来发现换了个11g的库也不行 解决方案: 最后发现是jdk1.6本身问题,服务器上的1.6有问题,换了个jdk1.6版本解决了…… 来源:https://blog.csdn.net/yyqjjw/article/details/115331042
  • 如何解决 NoClassDefFoundError?(How can i solve a NoClassDefFoundError?)
    问题 我已在 Oracle Linux 上安装了 Oracle Weblogic 11g,并尝试使用 jdeveloper 11g 完成 Oracle 的 ADF 教程之一。 当我运行我的项目时,它编译成功,没有错误。 它开始将应用程序部署到 weblogic 服务器并打开我的默认 Internet 浏览器。 但随后出现错误“500 内部服务器错误”。 我收到以下错误: java.lang.NoClassDefFoundError: Could not initialize class org.apache.myfaces.trinidadinternal.convert.ColorConverter at.... 我在互联网上研究了这个问题,我也四处询问,常见的答案是类路径有问题。 可能 jdeveloper 中使用的库在 weblogic 中不一样,然后项目被部署。 谁能确定问题是否出在类路径上?? 以及如何设置 jdeveloper 来部署它用于 weblogic 服务器的相同类路径? 回答1 java.lang.NoClassDefFoundError表示类路径中类的运行时版本与编译时不同。 您的问题可能是在部署服务器时发现类的多个版本。 我注意到在trinidad-impl.jar找到了类org.apache.myfaces.trinidadinternal
  • Jboss Seam: Enabling Debug page on WebLogic 10.3.2 (11g)
    SKIP TO UPDATE 3 I want to enable the Seam debug page on Weblogic 10.3.2 (11g). So, I have done the following: I have the jboss-seam and jboss-seam-debug jars as dependency in both my ejb and web maven projects (both are modules of my superproject) I put this context parameter in my web.xml: <context-param> <param-name>org.jboss.seam.core.init.debug</param-name> <param-value>true</param-value> </context-param> Now, when I hit the URL of my application, I get the debug page with this exception (full stacktrace at the end of the post): Caused by java.lang.IllegalStateException with message: "No
  • Weblogic 错误 403--禁止(Weblogic Error 403--Forbidden)
    问题 我正在尝试在 weblogic 上运行 Java EE 应用程序。 该应用程序在 Tomcat 上运行良好。 我已经自定义了 war 文件以包含 weblogic.xml。 该文件包含以下代码:- <container-descriptor> <show-archived-real-path-enabled>true</show-archived-real-path-enabled> </container-descriptor> 我还更改了应用程序属性文件中的配置,以反映容器正在侦听的端口。 server.port=7001 server.modjk.enabled=false 我的 web.xml 文件包含以下代码:- <servlet> <servlet-name>olatservlet</servlet-name> <servlet-class>org.olat.core.servlets.OLATServlet</servlet-class> <!-- Set the load order --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>olatservlet</servlet-name> <url-pattern>/</url-pattern>
  • How do I have weblogic reload cached JSPs on restart
    Our method of deploying a new version of an app for weblogic (11g) is to copy over top of the existing ear file and then stop and restart the weblogic server. We do a start/stop of weblogic rather than a redeployment, because of the known permgen issue (where eventually we will run out of perm gen and have to bounce the weblogic server). However, this method of deploying has a drawback-- new JSP versions are not seen by weblogic. In order to fix this we have had to wipe out the contents of the tmp directory that maintain a cache of the compiled JSPs prior to restarting the server. Is there a
  • 重新启动时如何让weblogic重新加载已缓存的JSP(How do I have weblogic reload cached JSPs on restart)
    问题 我们为weblogic(11g)部署新版本的应用程序的方法是在现有的ear文件之上复制,然后停止并重新启动weblogic服务器。 由于已知的permgen问题(最终我们将耗尽perm gen并不得不反弹weblogic服务器),因此我们开始/停止weblogic而不是进行重新部署。 但是,这种部署方法有一个缺点-weblogic无法看到新的JSP版本。 为了解决此问题,我们必须在重新启动服务器之前清除tmp目录的内容,该目录维护已编译JSP的缓存。 是否有一个设置可以告诉weblogic在启动备份时擦除缓存/重新加载/重新编译JSP? 回答1 更改JSP刷新计时器 一个标准的解决方案是,通过在web.xml或weblogic.xml设置值,使Weblogic更加频繁地检查JSP的新鲜度。 在生产模式下,Weblogic不会在开发模式下(默认值:1 )每秒检查新的JSP版本(默认值:-1 )。 对于您要定位的应用程序服务器,修改web.xml或weblogic.xml的选择取决于您,是否仅使用WebLogic。 如果您希望修改web.xml ,那么可以为上下文参数weblogic.jsp.pageCheckSeconds设置一个值,如下所示: <context-param> <param-name>weblogic.jsp.pageCheckSeconds</param
  • 如何在Eclipse中使用Weblogic? [关闭](How to work with Weblogic in Eclipse? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 2年前关闭。 改善这个问题 eclipse与weblogic配合使用的推荐插件是什么? 具体来说,我需要使用旧版本的weblogic 8.1,但是我可以使用任何版本的Ecplise。 我想调试应用程序并设置断点等。 我的更大任务是将项目移至Jboss,我是否可以在Eclipse中的两个应用程序服务器上部署相同的应用程序,大概需要两套配置文件,等等,有什么建议吗? 2个独立的项目? 回答1 如果将Eclipse与WTP一起使用,则可以通过其他服务器适配器使用Weblogic Integration。 要获取它,请右键单击“服务器”视图,然后选择“新建”>“服务器” ,然后单击“下载其他服务器适配器” 。 从列表中选择Oracle扩展,然后继续安装。 安装后,您将能够从8.1版到11g添加用于WebLogic的新服务器(对于BEA WebLogic Server v8.1,请在BEA System,Inc.下查看)。 替代文字http://blogs.oracle.com/gstachni/WindowsLiveWriter/DevelopingApplicationsforWeblogicServer1_C379/image_thumb.png
  • 无法从带有前缀jdbc /的Java访问weblogic数据源(Unable to access weblogic datasource from java with prefix jdbc/)
    问题 我在weblogic中用以下jndi名称创建了两个数据源 jdbc / testDatasource testDatasource1 我可以使用Java访问数据源testDatasource1,但是在访问dataource jdbc / testDatasource时却出现了以下提及的错误 javax.naming.NameNotFoundException: While trying to lookup 'jdbc.testDatasource' didn't find subcontext 'jdbc'. Resolved '' [Root exception is javax.naming.NameNotFoundException: While trying to lookup 'jdbc.testDatasource' didn't find subcontext 'jdbc'. Resolved '']; remaining name 'jdbc/testDatasource' 似乎前缀jdbc /给了问题。 回答1 在某些情况下,这是由于数据源与服务器不在同一目标中引起的。 使用数据源的服务器应添加到相同的目标。 回答2 听起来可能很愚蠢,但是既然发生在我身上,我将与您分享。 在Weblogic(至少10.3.4)下创建数据源时
  • nginx反向代理,具有两种SSL到Weblogic的方式(nginx reverse proxy with two way SSL to weblogic)
    问题 我正在尝试使用nginx作为Web逻辑的反向代理,使用两种方式的SSL /相互SSL。 客户端<=双向SSL => NGINX <=双向SSL => WebLogic服务器 NGINX的客户端以两种方式运行SSL可以正常工作,但在上游连接到Web逻辑时出现错误。 nginx调试日志: 2014/08/16 22:40:53 [debug] 33741#0: *9 SSL handshake handler: 0 2014/08/16 22:40:53 [debug] 33741#0: *9 SSL_do_handshake: -1 2014/08/16 22:40:53 [debug] 33741#0: *9 SSL_get_error: 2 2014/08/16 22:40:53 [debug] 33741#0: timer delta: 5 2014/08/16 22:40:53 [debug] 33741#0: posted events 0000000000000000 2014/08/16 22:40:53 [debug] 33741#0: worker cycle 2014/08/16 22:40:53 [debug] 33741#0: kevent timer: 59840, changes: 0 2014/08/16 22:40:53 [debug]
  • 将自定义对象添加到 Weblogic 10 上的 JNDI(Adding custom object to JNDI on Weblogic 10)
    问题 是否可以使用 Weblogic 服务器管理控制台 (Weblogic 10.0) 或通过编辑服务器的配置文件 (config.xml) 将自定义对象(字符串或 URL)添加到 JNDI? 回答1 我不这么认为。 在 JNDI 树中引用 Load 对象: 使用管理控制台,您可以在 JNDI 树中加载 WebLogic Server J2EE 服务和组件,例如 RMI、JMS、EJB 和 JDBC 数据源。 事实上,我找不到使用控制台添加String或URL方法。 AFAIK,标准方法是在您的部署描述符(web.xml、ejb-jar.xml)中放置一个env-entry : <env-entry> <env-entry-name>string/foo</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>foobar</env-entry-value> </env-entry> <env-entry> <env-entry-name>url/bar</env-entry-name> <env-entry-type>java.net.URL</env-entry-type> <env-entry-value>http://foobar/</env-entry
  • weblogic漏洞系列- 弱口令
    【研究】weblogic漏洞系列- 弱口令和解密 1.环境2.原理3.影响版本4.利用过程任意文件读取漏洞的利用 webshell 1.环境 Weblogic版本:10.3.6(11g) Java版本:1.6 本环境模拟了一个真实的weblogic环境,其后台存在一个弱口令,并且前台存在任意文件读取漏洞。分别通过这两种漏洞,模拟对weblogic场景的渗透。 环境启动后,weblogic后台访问http://ip:7001/console 本环境存在弱口令: weblogic Oracle@123 2.原理 3.影响版本 Weblogic版本:10.3.6(11g) 4.利用过程 环境启动后,weblogic后台访问http://ip:7001/console 本环境存在弱口令: weblogic Oracle@123 登录进来 任意文件读取漏洞的利用 假设不存在弱口令,如何对weblogic进行渗透? 环境前台模拟了一个任意文件下载漏洞,访问http://IP:7001/hello/file.jsp?path=/etc/passwd可见成功读取passwd文件。 读取后台用户密文与密钥文件 weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下
  • RuleBaseLoader loadFromInputStream drools 2.5 compilation error on Java8 and weblogic12c
    We are facing compilation error while compiling Rule Base from DB on server using drools-io-2.5.jar. RuleBaseLoader.loadFromInputStream(stream); stream is XML input stream picked from database. This code is working with JAVA6 and weblogic 11g but we start getting error when we deployed on weblogic 12c on JAVA8. Can someone please give a direction, how to resolve this. Error: <09-09-2020 18:12:47.235> <DEBUG> <ejbframework> <system> <RulesHelper> <subscriber-type-rules Checking rule base: subscribertypemapping> <09-09-2020 18:12:47.237> <DEBUG> <ejbframework> <system> <RulesHelper> <subscriber
  • How to deploy the same web application twice on WebLogic 11g?
    We have developed a JEE5 web application (WAR) and running it in production under WebLogic 11g (10.3.5). Now the same application should be deployed as separate applications for different customers (different URLs, different data) on the same WebLogic. I managed the first part by setting different context roots after deployment for each of them. But I have yet to make them use different datasources - and since I want to avoid customer specific builds, the persistence.xml is the same for all applications, thus also the persistence unit name. What is the best setup for this scenario? Am I forced