2017-03-14 2 views
0

저는 glassfish를 사용하여 원격으로 배포하는 java-ee의 웹 응용 프로그램을 보유하고 있습니다. 또한 원격 서버에 로컬 화 된 MySQL 데이터베이스가 있습니다.원격 Glassfish가 MySQL에 연결할 수 없습니다.

내 응용 프로그램을 배포 할 때 모든 것이 정상적으로 작동하고 응용 프로그램이 원격 데이터베이스에 연결됩니다. 하지만, 내 서버에 원격으로 배포 할 때 작동하지만 내 응용 프로그램이 데이터베이스에 연결되어 있지 않습니다.

내 서버에는 docker를 사용하고 glassfish는 컨테이너에 있지만 mysql은 없습니다.

sudo docker run -it -p 4848:4848 -p 8080:8080 payara/server-full 

내 친구가 같은 일을하고 그것을 잘 작동합니다 : 나는 payara/서버 전체 (글래스 피쉬의 예)와 글래스 피쉬 배포합니다.

+0

아마도 테스트 할 수 있습니다. 응용 프로그램을 로컬 데이터베이스에 연결할 수 있습니까? 가능한 경우 오류는 db 연결 참조에 있어야합니다. 어떻게 든 상대 호스트가 아니라 설치 프로그램 컴퓨터입니다. 나는 단지 추측한다! :) –

+0

제 코드에는 다음과 같은 것이 있습니다 :'String url = "jdbc : mysql : //xx.xx.xx.xx : 3306/ecom";'. 'String url = "jdbc : mysql : // localhost : 3306/ecom"을 설정하면 그 결과는 같습니다. 로컬 컴퓨터에 데이터베이스를 만들고 웹 응용 프로그램 배포 localy가 해당 컴퓨터에 연결됩니다. 그러나 원격 웹 응용 프로그램의 경우 작동하지 않습니다./ –

+0

j2ee를 사용하는 경우 응용 프로그램 서버에 저장된 데이터베이스 연결 리소스를 사용할 수 있으며 관리자가 배포시 초기화합니다. 코드에 유선 연결 문자열을 사용하지 마십시오. –

답변

0

모든 유형의 컨테이너 관리 대상에서 DI를 사용할 수 있습니다. 먼저 응용 프로그램 서버에 연결을 등록해야합니다 (IDE 또는 관리 콘솔을 사용하십시오 : 4848). 비 상태 세션 빈은 하나의 예일뿐입니다.

package mypackage; 

imports 

@Stateless 
public class MyBean 
{ 
    @Resource(lookup = "java:/app/registered_datasource_name") 
    private DataSource dataSource; 

    public void businessMethod() 
    { 
     try (Connection connection = dataSource.getConnection()) 
     { 
     // Work with connection here 
     } 
     catch (SQLException e) 
     { 
     throw new SomeRuntimeException(e); 
     } 
    } 

} 
+0

관리 콘솔에서 새 JDBC 연결 풀과 JDBC 리소스를 함께 연결했습니다. JNDI 이름은 ecomDB입니다. 그래서 내가 할 때 : '@Resource (lookup = "java :/app/ecomDB") private DataSource dataSource; 연결 연결 = dataSource.getConnection()' 그것은 nullExceptionPointerException을 제공합니다. 어떻게 DataSource를 초기화해야합니까? (처음에는 문자열이 "java :/myApp/ecomDB"였지만 아무 것도 변경하지 않았 음) –

+0

아마도 도움이 될 것입니다. https://docs.oracle.com/cd/E18930_01/html/821-2416 /ggjue.html –

+0

감사합니다. 문제가 해결되지 않았지만 이제는 프로젝트가 더욱 깨끗해졌습니다. –

관련 문제