BLOG ARTICLE 2012/03 | 3 ARTICLE FOUND

  1. 2012/03/13 Set favicon.ico on JBoss 5.1
  2. 2012/03/12 Domain Name을 apache 없이 JBoss에 적용시키기
  3. 2012/03/09 Case : Spring @Async doesn't work

JBoss 5.1에서 favicon.ico가 mime-type으로 등록되지 않아 적용이 안될 경우

vi $SERVER_HOME/deployers/jbossweb.deployer/web.xml

아래의 내용 등록
<mime-mapping>
        <extension>ico</extension>
        <mime-type>image/x-icon</mime-type>
</mime-mapping>


크리에이티브 커먼즈 라이센스
Creative Commons License
2012/03/13 17:26 2012/03/13 17:26

Domain Name을 얻어 아파치를 사용하지 않고 바로 JBoss에 적용해야 할 일이 있었습니다.
보통의 경우 virtual-host 설정으로 여러 개의 도메인이름을 이야기하는 데 한 도메인 이름을 사용할 경우 다음의 세팅을 하면 됩니다.

keystore를 이용한 https까지 추가한 내용입니다.

<Service name="jboss.web">

      <!-- A HTTP/1.1 Connector on port 8080 -->
      <Connector protocol="HTTP/1.1" port="80" address="${jboss.bind.address}"
               connectionTimeout="20000" redirectPort="443" />

      <!-- Add this option to the connector to avoid problems with
          .NET clients that don't implement HTTP/1.1 correctly
         restrictedUserAgents="^.*MS Web Services Client Protocol 1.1.4322.*$"
      -->

      <!-- A AJP 1.3 Connector on port 8009 -->
      <Connector protocol="AJP/1.3" port="8009" address="${jboss.bind.address}"
         redirectPort="443" />

      <!-- SSL/TLS Connector configuration using the admin devl guide keystore-->
      <Connector protocol="HTTP/1.1" SSLEnabled="true"
           port="443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false"
           sslProtocol = "TLS"
           keystoreFile="/jboss/servers/admin/conf/admin.keystore"
           keystorePass="123456"
     />

      <Engine name="jboss.web" defaultHost="admin.openseed.com">

      <Realm className="org.jboss.web.tomcat.security.JBossWebRealm"             certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping"             allRolesMode="authOnly"             />
      <Host name="admin.openseed.com" autoDeploy="false"                   deployOnStartup="false" deployXML="false">                 <Valve className="org.apache.catalina.valves.AccessLogValve"                        prefix="admin_access_log."                        suffix=".log"                        pattern="common"                        directory="${jboss.server.log.dir}"                        resolveHosts="false" />          </Host>          <Host name="localhost">           blabla...


deploy되는 application war 의 jboss-web.xml 파일 아래에
  1. <jboss-web> 
  2.     <context-root>/</context-root> 
  3.     <virtual-host>admin.openseed.com</virtual-host> 
  4. </jboss-web> 

hostname을 즉시 변경
# echo admin.openseed.com > /proc/sys/kernel/hostname 
끝.

크리에이티브 커먼즈 라이센스
Creative Commons License
2012/03/12 18:53 2012/03/12 18:53

Spring Task의 비동기를 이용할 일이 있어서 @Async 어노테이션을 사용하는데 standalone형태의 TestCase를 할 때는 잘 되다가 서블릿 컨테이너에만 올라가면 동작이 되지 않는 현상이 발생.

빈 자체를 통째로 @EnableAsync(http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html)를 사용하고 싶었으나, 공통 모듈이 spring 3.0.5인 관계로 패스.

결국 inner class를 만들어 task를 사용하는 방법밖에 없는 것 같은데 혹시 다른 방법이 있는지 모르겠습니다.

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;


@Service
public class MessageDispatcherExecutor {

	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	private TaskExecutor executor;

    public MessageDispatcherExecutor(TaskExecutor taskExecutor) {
        this.executor = taskExecutor;
    }


	public void doProcess() {
		logger.debug("Async Message Dispatcher called : {}", Request.getBusinessName());
		Map<String, Map<String, String>> requestData = Request.getRequestList();

		for( int i = 0; i < 5; i++) {
			executor.execute(new Task(requestData));
		}
	}

	private class Task implements Runnable {
        private Map<String, Map<String, String>> requestData;

        public Task(Map<String, Map<String, String>> requestData) {
            this.requestData = requestData;
        }

        public void run() {
        	logger.debug(Thread.currentThread().getName());
        }
    }
}


크리에이티브 커먼즈 라이센스
Creative Commons License
2012/03/09 13:14 2012/03/09 13:14