我正在尝试设置一个 Glassfish 集群(1 个 DAS,其集群有一个在 ssh 节点上运行的实例)。
我现在的位置是:
- DAS 运行
已创建集群
asadmin create-cluster cluster
节点已创建
asadmin create-node-ssh --nodehost apphost --installdir /opt/glassfish3 node-apphost
实例安装并配置
asadmin create-instance --node node-apphost --cluster cluster cluster-instance-apphost
当我尝试启动远程实例时,我在 server.log 中收到这些异常
[#|2013-02-05T12:42:28.603-0500|WARNING|glassfish3.1.2|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=10;_ThreadName=Thread-2;|Cannot deploy or load EJBTimerService:
java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'jdbc/__TimerPool' in SerialContext[myEnv={com.sun.enterprise.connectors.jndisuffix=__pm, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: jdbc]
at org.glassfish.
实例确实启动了,但我的应用程序部署失败,
Exception while loading the app : EJB Timer Service is not available
我尝试将 configs.config.cluster-config.ejb-container.ejb-timer-service.timer-datasource 配置属性设置为“jdbc/__ default”(擦除节点后,甚至重新创建集群)作为测试,按照 GF 文档 - 尽管此时我很确定不会产生与任何可远程访问的数据库的实际连接,因为我没有设置 - 关键是,无论我做什么,我仍然会看到远程实例试图查找“jdbc/__ TimerService”......
如何让我的远程实例使用其集群配置中定义的计时器数据源?
答案1
在 Oracle GlassFish Server 3.1 应用程序开发指南中
http://docs.oracle.com/cd/E18930_01/html/821-2418/beahw.html
你可以看到这一行:
注意 - 不要在集群 GlassFish Server 环境中使用 jdbc/__TimerPool 资源作为计时器。您必须改用自定义 JDBC 资源或 jdbc/__default 资源。请参阅下面的“将 EJB 计时器部署到集群”中的说明。另请参阅 Oracle GlassFish Server 3.1 管理指南中的“在集群环境中启用 jdbc/__default 资源”。