2015-07-22 2 views
0

я должен написать класс, который принимает сокет-соединение и передать его в класс Handler с помощью Springне может быть приведен к ThreadPoolTaskExecutor

Мой Слушатель Класс

public class Listener { 

    static Logger log = Logger.getLogger(Listener.class.getName()); 

    public static void main(String args[]) throws IOException { 
    int port = 0; 
     if (args.length < 1) { 
      System.out.println("Usage: java -jar hovel.jar listenPortNumber"); 
      System.exit(1); 
     } else { 
      port = Integer.parseInt(args[0]); 
     } 
     ApplicationContext context = 
       new ClassPathXmlApplicationContext("Beans.xml"); 
      ThreadPoolTaskExecutor taskExecutor = (ThreadPoolTaskExecutor) context.getBean("TCPHandler"); 

     ServerSocket serverSocket = new ServerSocket(port); 
     System.out.println("Listening on TCP port " + port); 
     for (;;) { 
      Socket sock = serverSocket.accept(); 
      taskExecutor.execute(new TCPHandler(sock)); 

     } 
    } 

} 

Мой класс Handler является

public class TCPHandler implements Runnable { 
    private Socket moduleSocket; 



    public TCPHandler(Socket sock) { 
     moduleSocket = sock; 
    } 

    public void run() { 

    } 

} 

Мои Bean.xml является

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="TCPHandler" class="org.hovel.server.TCPHandler"> 
    <constructor-arg type="java.net.Socket"> 
     <null /> 
    </constructor-arg> 
    </bean> 
    <bean id="taskExecutor" 
     class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> 
     <property name="corePoolSize" value="5" /> 
     <property name="maxPoolSize" value="10" /> 
     <property name="WaitForTasksToCompleteOnShutdown" value="true" /> 
    </bean> 
</beans> 

, когда я прохожу номер порта, то я получил эту ошибку
**

Исключение в потоке «главный» java.lang.ClassCastException: org.hovel.server.TCPHandler не может быть приведен к org.springframework .scheduling.concurrent.ThreadPoolTaskExecutor на org.hovel.server.Listener.main (Listener.java:27) *

**

Пожалуйста, помогите мне

ответ

1

Вы запрашивающий TCPHandler боб здесь:

context.getBean("TCPHandler") 

Это неThreadPoolTaskExecutor, так что я не знаю, почему вы ожидаете, что это будет. Если вы хотите получить исполнителя, вы должны получить , что вместо этого bean bean, у которого есть идентификатор taskExecutor.

Обратите внимание, что в настоящее время вы фактически не используете свой бонус TCPHandler любым удобным способом, поскольку вы произвольно создаете TCPHandler в своем методе main.

Смежные вопросы