Java 无法部署到基于glassfish 4.1的群集?

Java 无法部署到基于glassfish 4.1的群集?,java,jakarta-ee,deployment,glassfish,ejb,Java,Jakarta Ee,Deployment,Glassfish,Ejb,我在为EJB异步计时器配置GlassFish 4.1集群时遇到问题。每当我试图发布我的应用程序时,我都会出现以下错误: Error occurred during deployment: Exception while deploying the app [APP-EAR-1.0] : Failed to create automatic timers for AsyncTimer -- EJB Timer Service is not available. Please see server

我在为EJB异步计时器配置GlassFish 4.1集群时遇到问题。每当我试图发布我的应用程序时,我都会出现以下错误:

Error occurred during deployment: Exception while deploying the app [APP-EAR-1.0] :
Failed to create automatic timers for AsyncTimer -- EJB Timer Service is not available. 
Please see server.log for more details
最后,不知何故,我在一段时间前设法使它正常工作,但这确实是一次尝试和错误。我确信我知道我做了什么。。。现在,当我试图记录服务器安装过程时,在我将集群从头安装到单独的一组机器上之后,我再次碰壁: 当我将同一个应用程序发布到新的glassfish 4.1群集时,我得到了相同的错误:

Failed to create automatic timers for AsyncTimer
我不知道原因是什么。我从正在工作的glassfish集群中一步一步地复制了所有设置。我为计时器分配了单独的连接池。数据库中有额外的表

CREATE TABLE public."EJB__TIMER__TBL" (
  "CREATIONTIMERAW" BIGINT NOT NULL,
  "BLOB" BYTEA,
  "TIMERID" VARCHAR(255) NOT NULL,
  "CONTAINERID" BIGINT NOT NULL,
  "OWNERID" VARCHAR(255),
  "STATE" INTEGER NOT NULL,
  "PKHASHCODE" INTEGER NOT NULL,
  "INTERVALDURATION" BIGINT NOT NULL,
  "INITIALEXPIRATIONRAW" BIGINT NOT NULL,
  "LASTEXPIRATIONRAW" BIGINT NOT NULL,
  "SCHEDULE" VARCHAR(255),
  "APPLICATIONID" BIGINT NOT NULL,
  CONSTRAINT "PK_EJB__TIMER__TBL" PRIMARY KEY("TIMERID")
) 
WITH (oids = false);
我在日志文件中发现以下错误:

java.io.FileNotFoundException: /opt/glassfish4/glassfish/nodes/test-1-node/test-instance-1/config/noop=true (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at org.apache.felix.gogo.shell.Shell.readScript(Shell.java:218)
at org.apache.felix.gogo.shell.Shell.gosh(Shell.java:161)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.felix.gogo.runtime.Reflective.method(Reflective.java:136)
at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:469)
at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:395)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89)
at org.apache.felix.gogo.shell.Activator.run(Activator.java:75)
at java.lang.Thread.run(Thread.java:745)]]
java.io.FileNotFoundException:/opt/glassfish4/glassfish/nodes/test-1-node/test-instance-1/config/noop=true(无此类文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:138)
位于java.io.FileInputStream。(FileInputStream.java:93)
位于sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
位于sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
位于org.apache.felix.gogo.shell.shell.readScript(shell.java:218)
位于org.apache.felix.gogo.shell.shell.gosh(shell.java:161)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:483)
位于org.apache.felix.gogo.runtime.Reflective.method(Reflective.java:136)
位于org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
位于org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:469)
位于org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:395)
位于org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
位于org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
位于org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
位于org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89)
位于org.apache.felix.gogo.shell.Activator.run(Activator.java:75)
在java.lang.Thread.run(Thread.java:745)]]
有没有一种方法可以在不需要发布应用程序的情况下启动EJB计时器,以便更容易地诊断问题的原因? 或者,您可以建议如何让这个集群启动EJB计时器

希望您能帮助我,我将非常感谢您的帮助。

看起来像GlassFish 4.1 bug。您可以在GlassFish 4.0或4.0.1上尝试相同的设置,看看它是否正常工作


但是,您是否确保更改了DAS上的JDBC资源
JDBC/_TimerPool
,以引用您的集群数据库并可用于特定集群?这是工作所必需的。

谢谢您的回答。由于一些不兼容,我不能使用较旧版本的glassfish。在配置我拥有的版本时:我进入JDBC连接池,创建并配置TimerPool,我可以ping它。我在JDBC资源/计时器池中使用了这个池。我在安装DAS的节点上进行了此操作,但在控制台中看不到与DAS相关的任何特定配置。您是在本地还是远程部署?4.1中的远程部署也存在类似的错误。如果您感兴趣,有一个GlassFish的构建,目前正在寻找修复部署错误的方法,并提到Grizzly的一个补丁,可以尝试: