Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jboss eap quickstarts群集ha单例客户端JNDI查找类强制转换异常_Java_Maven_Jboss_Singleton_Ejb - Fatal编程技术网

Java jboss eap quickstarts群集ha单例客户端JNDI查找类强制转换异常

Java jboss eap quickstarts群集ha单例客户端JNDI查找类强制转换异常,java,maven,jboss,singleton,ejb,Java,Maven,Jboss,Singleton,Ejb,我正在使用JBoss6.2,并试图从webapp筛选器调用单例服务 我已在群集环境中成功安装并启动了singleton服务,如以下快速入门教程所述: 我们可以看到,singleton服务已经在管理控制台中成功部署(我将一个图像上传到我的网站,因为我在堆栈溢出方面没有足够高的声誉来发布图像): 作为快速入门教程的补充,我想要一个从外部客户端调用singleton服务的示例。在我的例子中,这是一个过滤器(LoginFilter),可以通过JBoss modules目录中的service.jar进

我正在使用JBoss6.2,并试图从webapp筛选器调用单例服务

我已在群集环境中成功安装并启动了singleton服务,如以下快速入门教程所述:

我们可以看到,singleton服务已经在管理控制台中成功部署(我将一个图像上传到我的网站,因为我在堆栈溢出方面没有足够高的声誉来发布图像):

作为快速入门教程的补充,我想要一个从外部客户端调用singleton服务的示例。在我的例子中,这是一个过滤器(LoginFilter),可以通过JBoss modules目录中的service.jar进行访问。此jar包含以下内容:

/META-INF/jboss-ejb-client.properties /com/login/filter/LoginFilter.class

出于我尝试做的目的,我没有使用集群环境,只有Node1将运行

jboss-ejb-client.properties包含: LoginFilter.java包含: 我将service.jar复制到$JBOSS_HOME/modules/com/login/filter/main中,然后启动node1服务器

在service.jar所在的目录中,我们在module.xml中定义了以下依赖项: 我认为我必须缺少某种配置,以允许从LoginFilter调用singleton服务。请提出您认为有帮助的建议,并提前感谢

Scheduler.java
我认为问题在于您试图远程访问
调度程序
,但由于它没有注释为远程接口,因此默认为本地:


您能否将
@Remote
添加到
调度程序中,看看这是否会让事情变得更好?

我认为问题在于您试图远程访问
调度程序,但由于它没有注释为远程接口,因此默认为本地:


能否将
@Remote
添加到
调度程序
中,看看这是否会使事情变得更好?

能否发布
调度程序
调度程序bean
的代码?这是远程接口吗?嗨,休,谢谢你的回复。我已经编辑了原始帖子,并添加了Scheduler和SchedulerBean。谢谢你能把
Scheduler
SchedulerBean
的代码贴出来吗?这是远程接口吗?嗨,休,谢谢你的回复。我已经编辑了原始帖子,并添加了Scheduler和SchedulerBean。谢谢你好,休!这很有效,非常感谢!现在唯一让我困惑的是,当我从node1和node2调用singleton count()方法时,即localhost:8080用于节点1和localhost:8180(不同端口),我看到以下输出:“****HasingleTimer:Counter=1”(node1)和“****HasingleTimer:Counter=1”(node2)。我本以为节点2会出现“******HASingletonTimer:Counter=2”(很抱歉回复太慢)恐怕不确定。如果两个调用都使用同一个节点,那么计数器是否正确递增是很有趣的。嗨,休,没关系:)如果两个调用都使用同一个节点,计数器是否正确递增。有没有办法从webapp外部调用HATimerService服务(来自原始集群ha singleton tuturial)?嗨,休!这很有效,非常感谢!现在唯一让我困惑的是,当我从node1和node2调用singleton count()方法时,即localhost:8080用于节点1和localhost:8180(不同端口),我看到以下输出:“****HasingleTimer:Counter=1”(node1)和“****HasingleTimer:Counter=1”(node2)。我本以为节点2会出现“******HASingletonTimer:Counter=2”(很抱歉回复太慢)恐怕不确定。如果两个调用都使用同一个节点,那么计数器是否正确递增是一件有趣的事情?Hi Hugh,没关系:)如果两个调用都使用同一个节点,计数器是否正确递增。是否有办法从webapp外部调用HATimerService服务(来自原始群集ha singleton tuturial)?
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=node1
remote.connection.node1.host=localhost
remote.connection.node1.port = 9999
remote.connection.node1.connect.timeout = 500
remote.connection.node1.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);

System.out.println(">>>>> JNDI LOOKUP >>>>>");
Object obj = context.lookup("global/jboss-cluster-ha-singleton-service/SchedulerBean!org.jboss.as.quickstarts.cluster.hasingleton.service.ejb.Scheduler");
Scheduler scheduler = (Scheduler) obj;
System.out.println(">>>>> JNDI END >>>>>");
<module xmlns="urn:jboss:module:1.0" name="td.oca.spike.kernel">
    <resources>
        <resource-root path="service.jar"/>
    </resources>
    <dependencies>
        ...
        <module name="org.jboss.as.quickstarts" />
    </dependencies>
</module>
java.lang.ClassCastException: org.jboss.as.quickstarts.cluster.hasingleton.service.ejb.Scheduler$$$view1 cannot be cast to org.jboss.as.quickstarts.cluster.hasingleton.service.ejb.Scheduler
package org.jboss.as.quickstarts.cluster.hasingleton.service.ejb;

/**
 * @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a>
 */
public interface Scheduler {

    void count();

    void initialize(String info);

    void stop();

}
package org.jboss.as.quickstarts.cluster.hasingleton.service.ejb;

import javax.annotation.Resource;
import javax.ejb.ScheduleExpression;
import javax.ejb.Singleton;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;

import org.jboss.logging.Logger;


@Singleton
public class SchedulerBean implements Scheduler {
    private static Logger LOGGER = Logger.getLogger(SchedulerBean.class);
    @Resource
    private TimerService timerService;

    private int counter=0;

    @Timeout
    public void scheduler(Timer timer) {
        LOGGER.info("*** HASingletonTimer: Info=" + timer.getInfo());
    }

    @Override
    public void initialize(String info) {
        ScheduleExpression sexpr = new ScheduleExpression();
        // set schedule to every 10 seconds for demonstration
        sexpr.hour("*").minute("*").second("0/10");
        // persistent must be false because the timer is started by the HASingleton service
        timerService.createCalendarTimer(sexpr, new TimerConfig(info, false));
    }

    @Override
    public void stop() {
        LOGGER.info("Stop all existing HASingleton timers");
        for (Timer timer : timerService.getTimers()) {
            LOGGER.trace("Stop HASingleton timer: " + timer.getInfo());
            timer.cancel();
        }
    }


    @Override
    public void count() {
        counter++;
        LOGGER.info("***** HASingletonTimer: Counter=" + counter);
    }
}