2014년 3월 9일 일요일

Eclipse 사용 도중 이러한 에러가 날 경우, workspace\.metadata 폴더에 있는 .log파일을 열어본다.
log 파일에 하기와 같은 오류가 있을 경우,

!ENTRY org.eclipse.ui.workbench 4 2 2014-03-10 10:25:38.545
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".
!STACK 0
java.lang.NullPointerException
at org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper.getService(ServiceHelper.java:74)
at org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.updateRoamingProfile(SimpleProfileRegistry.java:156)
at org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.updateSelfProfile(SimpleProfileRegistry.java:147)
at org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.getProfileMap(SimpleProfileRegistry.java:344)
at org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.internalGetProfile(SimpleProfileRegistry.java:248)
at org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.getProfile(SimpleProfileRegistry.java:178)
at org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler.earlyStartup(AutomaticUpdateScheduler.java:88)
at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87)
at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2551)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

이런 저런 설정들을 바꾸어 보았으나 도저히 잡히지가 않았다.
우연히 구글링을 하면서 발견한 팀.

workspace\.metadata\.plugins\org.eclipse.e4.workbench안의 xml파일을 삭제하니 정상적으로 잘 작동한다.

2014년 2월 11일 화요일

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>wan</groupId>
<artifactId>myapp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>myapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>4.0.0.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- JDBC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Transaction -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- ORM -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>

<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>

<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<!-- Apache Commons -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>

<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>

<!-- JDBC Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
    <id>mesir-repo</id>
    <url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url>
    </repository>
    </repositories>  
<build>
    <finalName>myapp</finalName>
</build>
</project>

Spring Framework를 적용해서 프로젝트를 시작하다가 아래와 같은 에러가 났을 경우,
cvc-complex-type-3.2.2: Attribute 'local' is not allowed to appear in element 'ref'
Spring 4.0 부터는 spring-beans.xsd 에서 local을 지원하지 않기 때문에 발생.

local을 bean으로 변경해주거나, 아래와 같이 4.0 이전 버전의 경우에는 Spring의 버전을 추가해주면 된다.
<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.2.xsd">

2013년 12월 18일 수요일

Hadoop 2.2.0 HDFS 명령어

주로 사용하는 Hadoop의 파일시스템인 HDFS의 명령어들을 정리할 계획이다.

hadoop fs -cmd <args> 형태로 명령을 내릴 수 있으며, Unix 또는 Linux의 명령어와 유사하게 사용할 수 있다.

Hadoop에서 가장 일반적인 파일 관리 작업은 아래와 같다.

  1. 파일과 디렉토리의 추가
  2. 파일 복구
  3. 파일 삭제

  • help - 각 명령어의 사용과 간단한 설명을 제공
    hadoop dfs -help [CMD]

    hadoop의 fs 명령어를 사용하면 사용자가 설치한 하둡 버전에서 지원하는 모든 명령어를 볼 수 있다. 또한 help 옵션을 사용하면 각 명령어의 사용과 간단한 설명을  함께 볼 수 있다.
  • ls - 파일과 디렉토리를 조회한다.
    hadoop dfs -ls PATH [PATH ..]
    hadoop@linuxwan-VirtualBox:/usr/local/hadoop/sbin$ hadoop fs -ls /input
    13/12/19 13:35:47 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Found 1 items
    drwxr-xr-x   - hadoop supergroup          0 2013-12-19 13:23 /input/study

    특정 폴더의 하위 폴더까지 보고자 할 경우에는 -R 옵션을 사용
    hadoop dfs -ls -R PATH [PATH ..]
    hadoop@linuxwan-VirtualBox:/usr/local/hadoop/sbin$ hadoop fs -ls -R /input
    13/12/19 13:54:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    drwxr-xr-x   - hadoop supergroup          0 2013-12-19 13:23 /input/study
    -rw-r--r--   3 hadoop supergroup   35451909 2013-12-16 14:21 /input/study/comments.xml
  • mkdir - 디렉토리를 생성한다.
    hadoop dfs -mkdir PATH [PATH ..]
  • mv - SRC에 있는 파일이나 디렉토리를 DST로 옮긴다.
    hadoop dfs -mv SRC [SRC ..] DST
    hadoop@linuxwan-VirtualBox:/usr/local/hadoop/sbin$ hadoop dfs -mv /input/comments.xml /input/study/

    hadoop@linuxwan-VirtualBox:/usr/local/hadoop/sbin$ hadoop dfs -mv /output/out_workshop1 /output/study/
  • put - 로컬 시스템의 파일과 디렉토리를 목적지 파일 시스템으로 복사. 만약 LOCALSRC가 -로 설정되어 있으면 입력은 stdin으로 지정되고 DST는 파일이어야 한다.
    hadoop dfs -put LOCALSRC [LOCALSRC ..] DST
    hadoop@linuxwan-VirtualBox:/usr/local/hadoop/sbin$ hadoop dfs -put ./comments.xml /input/study/
  • rm - 파일 또는 디렉토리를 삭제한다. 하위 폴더까지 모두 삭제를 원할 경우 -R 옵션을 사용.
    hadoop dfs -rm SRC
    hadoop fs -rm /output/study/HadoopInAction/out_*
    hadoop fs -rm -R /output/study/HadoopInAction/out_*





2013년 12월 3일 화요일

Spring + Mybatis + JUnit Test를 위한 예제

mybatistest-context.xml
Mybatis 설정을 위한 dataSource와 transactionManager, Mybatis관련 설정을 아래와 같이 한다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">

<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/springbook?characterEncoding=UTF-8" />
<property name="username" value="spring" />
<property name="password" value="book" />
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- enable autowire -->
    <context:annotation-config />

    <!-- enable transaction demarcation with annotations -->
    <tx:annotation-driven />
 
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- property name="configLocation" value="springbook/learningtest/spring/mybatis/mybatis-config.xml" /-->
<property name="mapperLocations" value="springbook/learningtest/spring/mybatis/*-sqlmap.xml" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

<bean id="mybatisDao" class="springbook.learningtest.spring.mybatis.MybatisTest$MybatisDAO">
<property name="sqlSession" ref="sqlSession" />
</bean>
</beans>
--------------------------------------------------------------------------

mybatis-config.xml
이 부분은 상기의 mybatistest-context.xml에 있는 sqlSessionFactory부분의 주석처리되어 있는 configLocation 태그를 활성화 했을 경우에 필요한 파일.
이때 당연 mapperLocations 태그 부분을 주석처리해야 한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="springbook/learningtest/spring/mybatis/user-sqlmap.xml" />
</mappers>
</configuration>
----------------------------------------------------------------------------

user-sqlmap.xml
수행되어야 할 쿼리문을 아래와 같이 작성.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="springbook.learningtest.spring.mybatis.ExampleDAO">
 
<select id="getUserName" parameterType="String" resultType="string">
    SELECT NAME FROM USERS WHERE ID = #{id}
</select>

<select id="getUserList" resultType="springbook.learningtest.spring.mybatis.Users">
SELECT id, name, password, level, login, recommend, email
FROM users
order by id, name
</select>
</mapper>
----------------------------------------------------------------------------

ExampleDAO.java

/**
 *
 */
package springbook.learningtest.spring.mybatis;

import java.util.List;

import org.apache.ibatis.annotations.Param;

/**
 * @author
 *
 */
public interface ExampleDAO {
public String getUserName(@Param("id") String userId);
public List<Users> getUserList();
}

-----------------------------------------------------------------------------

Users.java

/**
 *
 */
package springbook.learningtest.spring.mybatis;

import java.io.Serializable;

/**
 * @author
 *
 */
public class Users implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;

private String id;
private String name;
private String password;
private String level;
private String login;
private String recommend;
private String email;

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getRecommend() {
return recommend;
}
public void setRecommend(String recommend) {
this.recommend = recommend;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String toString() {
return getId() + getName();
}
}


-----------------------------------------------------------------------------

MybatisTest.java

/**
 *
 */
package springbook.learningtest.spring.mybatis;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @author
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MybatisTest {
@Autowired MybatisDAO mybatisDao;

@Test
public void getUserName() {
String id = "gyumee";
String name = mybatisDao.getUserName(id);

assertThat(name, is("박성철"));
}

@Test
public void getUserList() {
List<Users> userList = mybatisDao.getUserList();

assertThat(true, is(userList.size() > 1));
}

public static class MybatisDAO {
private SqlSession sqlSession;

public void setSqlSession(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}

public String getUserName(String id) {
ExampleDAO exampleDao = sqlSession.getMapper(ExampleDAO.class);
return exampleDao.getUserName(id);
}

public List<Users> getUserList() {
ExampleDAO exampleDao = sqlSession.getMapper(ExampleDAO.class);
List<Users> list = exampleDao.getUserList();
return list;
}
}
}


2012년 3월 28일 수요일

Xcode에서 PhoneGap으로 개발하기

1. 개발에 필요한 사항

  • 인텔기반의 Mac OS X Snow Leopard(10.6) 이상의 컴퓨터
  • 장비에 install하기 위한 필요 사항
    • 애플의 iOS 장치(iPhone, iPad, iPod Touch)
    • iOS 개발자 인증
2. Install SDK + PhoneGap

  • Apple Developer Portal 에서 Xcode를 다운로드 후 설치한다.
  • PhoneGap 최근 버전을 다운로드 받는다. PhoneGap Download.
  • zip파일의 압축을 해제 후, lib/ios 폴더 아래의 확장자가 dmg 파일을 더블클릭해서 설치한다.

3. Setup New Project

  • Xcode 실행 후 새로운 프로젝트를 생성한다.
  • 프로젝트를 위한 템플릿 중에서 Cordova-based Application을 선택한다.




  • Next 버튼을 클릭 후, 애플리케이션에 대한 "Product Name" & "Company Identifier"를 지정한다. 



  • 애플리케이션을 저장하기 위한 폴더를 선택
  • 프로젝트가 생성된 후 바로 Xcode 좌측 상단에 있는 Run 버튼을 클릭해서 프로젝트를 실행한다.
  • 프로젝트 생성 후 저장
  • Xcode 4에서 생성한 프로젝트를 볼 수 있을 것이다. 이때 좌측 상단에 있는 Run 버튼을 클릭해서 해당 프로젝트를 실행시킨다.
  • index.html 파일을 찾지 못해 iPhone 시뮬레이터에서 오류가 발생하게 된다.
  • 프로젝트를 Run 후에 프로젝트 폴더 아래에 www폴더가 생기지 않았다면, PhoneGap을 다운 받은 폴더에서 www폴더를 복사해서 붙여도 된다.
  • 탐색기에서 프로젝트 아래의 생성된 www폴더를 Drag&Drop으로 아래의 푸른색 부부에 놓으면 신규 팝업 메뉴가 나타나게 된다.



  • Drag 후에 나타난 팝업 창에서, 아래와 같이 Create folder reference for any added folders를 선택하면 된다. 




4. Hello World

아래와 같이 구동된 화면을 볼 수 있다.






2012년 2월 7일 화요일

Full Screen enabler for Eclipse 3.6/3.7 on OSX Lion

Mac OS X에서 이클립스를 Full Screen으로 사용하는 방법입니다.
기본적으로 eclipse를 설치하게 되면 Mac OS X에서 제공하는 Full Screen 전환 기능을 제공하지는 않습니다.

Eclipse를 설치하고 실행하면 Mac OS X Lion에서 제공하는 Full Screen으로 전환하는 아이콘이 지원되지 않는다.
Mac OS X에서 제공하는 편리한 Full Screen 기능을 사용하기 위해서는 Eclipse 마켓플레이스에서 "Full Screen"으로 검색한다.

Eclipse Help메뉴에서 Eclipse Maketplace...를 선택한다.














Search 탭에서 검색어로 "Full Screen"을 입력 후 Go 버튼을 클릭하면 Full Screen enabler for Eclipse 3.6/3.7 on OSX Lion의 "Install"버튼을 클릭한다.



















"Next"버튼을 클릭해서 설치한다.





















이렇게 설치 후 Eclipse를 재시작 하면 Eclipse 우측 상단에 Full Screen전환 아이콘이 나타나며, Eclipse를 Full Screen에서 사용할 수 있게 된다.