달력

92021  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  

안드로이드 구글맵 v2

java 2013. 10. 17. 09:00

구글맵을 하기 위해서 거쳐야 하는 apikey 작업이 바뀌었군요.

maps.jar도 Google Play Services 패키지 안에 포함되었구요. 

GCM(Google Cloud Messaging)도 [Deprecated] 딱지가 붙고, 이것도 Google Play Services로 포함되었습니다.

더 파고 들어가 봐야겠습니다.

일단 구글맵 v2 먼저 정리하신 분 블로그 링크겁니다.

http://pppdw.tistory.com/entry/GoogleMap-API-v2-띄워-볼까요



Posted by 케누 kenu허광남

댓글을 달아 주세요

한참을 삽질했습니다. 구글링을 해보니 mac의 jdk와 호환이 되지 않아서 발생하는 문제라고 합니다.

http://stackoverflow.com/questions/17822795/google-app-engine-javax-servlet-unavailableexception-initialization-failed#comment27168122_17822795


역시나 윈도우 가상머신에 GAE 개발환경 갖추고 실행하니 같은 소스가 잘 동작합니다.



다음은 앱엔진 로그에 나타나는 메시지입니다.

  1. 2013-10-15 16:22:29.386 / 500 5066ms 0kb Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1
    210.98.50.4 - - [15/Oct/2013:16:22:29 -0700] "GET / HTTP/1.1" 500 0 - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1" "1.okgawi.appspot.com" ms=5067 cpu_ms=2567 loading_request=1 app_engine_release=1.8.6 instance=00c61b117cc605edbcad33f6d430edbd601896
  2. W2013-10-15 16:22:29.299
    EXCEPTION 
    java.lang.IllegalArgumentException
    	at com.google.appengine.runtime.Request.process-3c18ce8f0ef50d07(Request.java)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:360)
    	at org.mortbay.util.Loader.loadClass(Loader.java:91)
    	at org.mortbay.util.Loader.loadClass(Loader.java:71)
    	at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
    	at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242)
    	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    	at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
    	at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:435)
    	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:442)
    	at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:186)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:306)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:298)
    	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:439)
    	at java.lang.Thread.run(Thread.java:724)
    
  3. E2013-10-15 16:22:29.376
    javax.servlet.ServletContext log: unavailable
    javax.servlet.UnavailableException
    	at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:79)
    	at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242)
    	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    	at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
    	at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    	at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:219)
    	at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:194)
    	at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134)
    	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:446)
    	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:435)
    	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:442)
    	at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:186)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:306)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:298)
    	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:439)
    	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    	at java.lang.Thread.run(Thread.java:724)
    
  4. W2013-10-15 16:22:29.380
    Failed startup of context com.google.apphosting.utils.jetty.RuntimeAppEngineWebAppContext@1d9525e{/,/base/data/home/apps/s~okgawi/1.370945407503011368}
    java.lang.NullPointerException
    	at java.lang.Class.isAssignableFrom(Native Method)
    	at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256)
    	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    	at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
    	at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    	at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:219)
    	at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:194)
    	at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134)
    	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:446)
    	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:435)
    	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:442)
    	at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:186)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:306)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:298)
    	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:439)
    	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    	at java.lang.Thread.run(Thread.java:724)



쉬운 게 없군요.


Posted by 케누 kenu허광남

댓글을 달아 주세요

HW > OS > JVM > Spring 을 만들고 있다는 생각. 애플리케이션 컴포넌트들을 만들고 레고처럼 조립하게 만드는 방향으로 가는 듯 합니다. IoC, PSA 덕분에 조립하기가 쉬운 프레임워크이니까요.

문서화가 약하다는 오픈소스의 편견을 깬 문서 목록입니다. 미친 속도입니다.

http://spring.io/docs


Spring Projects

Projects in Incubation

Projects in the Attic

Posted by 케누 kenu허광남

댓글을 달아 주세요

스프링 웹MVC로 코드 만들어 실행할 때 WAR로 빌드해서 톰캣 설치된 곳에 복사해서 실행하지 않아도 되는 세상입니다. 빌드 도구를 통해서 톰캣 관련 jar 다운받아서 바로 실행할 수 있게 되어 있으니까요.


라고 생각했었습니다. mvn 쓸 때까지는요.


스프링 한 술 더 뜨네요.


package hello;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

이러면 서버가 뜹니다.

자바 공부할 때 흔히 보던 main() 메소드로 말이죠.


Download http://repo1.maven.org/maven2/org/apache/tomcat/embed/tomcat-embed-core/7.0.42/tomcat-embed-core-7.0.42.jar

Download http://repo1.maven.org/maven2/org/apache/tomcat/embed/tomcat-embed-logging-juli/7.0.42/tomcat-embed-logging-juli-7.0.42.jar

빌드에서 확인한 파일입니다.


관련 글입니다. 아래 문서는 spring-boot 를 사용합니다.

http://spring.io/guides/gs/serving-web-content/#initial




Posted by 케누 kenu허광남

댓글을 달아 주세요

1.7.0 뿐만 아니라 다른 버전도 멈춰서네요.

Downloading: http://maven.springframework.org/milestone/org/aspectj/aspectjtools/1.7.0.RC1/aspectjtools-1.7.0.RC1.pom

Downloaded: http://maven.springframework.org/milestone/org/aspectj/aspectjtools/1.7.0.RC1/aspectjtools-1.7.0.RC1.pom (862 B at 1.2 KB/sec)

Downloading: http://maven.springframework.org/release/org/aspectj/aspectjtools/1.7.0.RC1/aspectjtools-1.7.0.RC1.jar

Downloading: http://maven.springframework.org/milestone/org/aspectj/aspectjtools/1.7.0.RC1/aspectjtools-1.7.0.RC1.jar

390KB

^C

망을 바꿔서 다시 시도하니 됩니다.

kenuui-Retina-MacBook-Pro:petclinic kenu$ mvn package

[INFO] Scanning for projects...

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] Building petclinic 0.1.0.BUILD-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[INFO]

[INFO] --- aspectj-maven-plugin:1.2:compile (default) @ petclinic ---

Downloading: http://maven.springframework.org/milestone/org/aspectj/aspectjtools/1.7.0.RC1/aspectjtools-1.7.0.RC1.jar

Posted by 케누 kenu허광남

댓글을 달아 주세요

간만에 안드로이드를 할 때마다 요즘 골치입니다.

XP에서 emulator를 띄우는 법입니다.


이런 에러 메시지를 만나게 됩니다.

Starting emulator for AVD 'avd18'

Failed to create pbuf surface for FB 0x3004

emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.

extension WGL_ARB_make_current_read was not found

extension WGL_EXT_swap_control was not found

Failed to allocate memory: 8

This application has requested the Runtime to terminate it in an unusual way.

Please contact the application's support team for more information.



제가 해결한 방법입니다. .android 폴더 아래 avd 경로로 이동합니다.

C:\Documents and Settings\Administrator\.android\avd\avd18.avd

config.ini 파일을 엽니다.



hw.ramSize=576 이라고 되어 있는 라인에 MB 를 덧붙여줍니다.




저장하고 다시 에뮬레이터를 실행해봅니다.

Posted by 케누 kenu허광남

댓글을 달아 주세요

배치처리 (Batch Layer)  


지속적으로 제기된 일괄(배치) 기능에 대한 요구를 지원하기 위해 실행환경, 개발환경, 운영환경 으로 이루어진 일괄(배치) 프레임워크가 추가되었습니다.  





표준프레임워크 배치 실행환경은 3개 레이어(Core, Support, Execution Layer)로 구성되며, 일괄 (배치) 처리를 위한 기반 환경을 제공합니다.  



모바일 화면처리 (Mobile Presentation Layer)  


모바일 화면처리는 모바일 웹 애플리케이션을 위한 자바스크립트 프레임워크인 jQueryMobile을 포함하고 있습니다. 




모바일 디바이스 API (Mobile Device API Layer)  


모바일 디바이스 API는 아이폰, 안드로이드 앱으로 모바일 웹 애플리케이션을 패키징하고, 가속도계, 위치정보, 주소록 같은 디바이스의 기능을 자바스크립트로 제어하도록 지원합니다.





디바이스 API는 가장 많이 사용되는 폰갭(phonegap)을 포함하고 있습니다.



Posted by 케누 kenu허광남

댓글을 달아 주세요

파일 첨부합니다.

hsqldb 로 돌아가는 소스입니다.



egovm.zip


Posted by 케누 kenu허광남

댓글을 달아 주세요

Ceylon (http://ceylon-lang.org) 언어는 Java와 JavaScript 두 가지 플랫폼을 지원합니다. JVM 또는 node.js 플랫폼에서 동작하는 진정한 일타쌍피 언어이죠.

이 실험적인 언어의 기능(Feature)이 정해졌다고 합니다.

http://www.theserverside.com/news/thread.tss?thread_id=77418 (Gavin King이 직접 쓴 뉴스)

http://www.infoq.com/news/2013/09/ceylon-beta


Ceylon은 C, Java언어를 아시는 분들은 아주 잘 읽힙니다. html도 구조대로 프로그래밍을 하고 동적으로 생성해줍니다.

Table table = Table {

    title = "Squares";

    rows = 5;

    Border {

        padding = 2;

        weight = 1;

    };

    Column {

        heading = "x";

        width = 10;

        String content(Integer row) {

            return row.string;

        }

    },

    Column {

        heading = "x^2";

        width=10;

        String content(Integer row) {

            return (row^2).string;

        }

    }

};


하이버네이트로 자바 표준인 JPA도 이끌어낸 Gavin이라 이 분이 만든 Ceylon이 어떤 반향을 일으킬 것 같습니다. 특히나 메이저 언어가 된 자바스크립트와 전혀 다른 언어 자바를 통합시켰으니까요.


15분이면 Ceylon 언어를 탐험하실 수 있습니다. 

http://ceylon-lang.org/documentation/current/introduction/

영어가 안되서 당황하시면 안 됩니다. ^^;

Posted by 케누 kenu허광남

댓글을 달아 주세요

표준프레임워크의 자동생성된 샘플은 hsqldb를 기본적으로 이용하고 있습니다. 2.6부터는 hsqldb서버를 따로 실행하지 않고, 바로 실행합니다.


datasource 설정부터 찾아보겠습니다.

ctrl+shift+R(맥은 cmd+shift+R)로 Open Resource 창을 엽니다. *data라고 검색어를 입력하면 context-datasource.xml 파일이 보입니다. 선택해서 파일을 엽니다.


<jdbc:embedded-database> 설정이 HSQL을 지정하고 있습니다. db파일의 위치는 classpath상에 있고, db/sampledb.sql 입니다. sampledb.sql 파일을 선택하고 ctrl+shift+R 단축키를 입력하면 sampledb.sql 파일을 쉽게 열 수 있습니다.


src/main/resources 폴더 아래 db 폴더가 있고, 그 아래 sampledb.sql 파일이 있습니다. 파일을 열어서 sql 내역을 살펴보겠습니다.


CREATE MEMORY TABLE SAMPLE(...) 과 같은 SQL을 볼 수 있습니다. 


메모리 DB를 사용하면 테스트를 용이하게 할 수 있는 장점이 있습니다. 딱 거기까지입니다. 익숙하게 다루기까지는 연습이 많이 필요할 것 같습니다.




Posted by 케누 kenu허광남

댓글을 달아 주세요