2012-11-13 5 views
3

현재 프로젝트에 MPJ-api를 사용하고 있습니다. 내가 사용하고있는 두 가지 구현은 MPJ-express와 Fast-MPJ입니다. 그러나 둘 다 동일한 API, 즉 MPJ-API를 구현하므로 이름 공간 충돌로 인해 두 구현을 동시에 지원할 수 없습니다.Java MPI 바인딩에서 네임 스페이스 충돌 방지

동일한 패키지와 클래스 이름을 가진 두 개의 다른 라이브러리를 포장하여 Java 또는 Scala에서 동시에 지원할 수있는 방법이 있습니까?

지금까지 내가 생각할 수있는 유일한 방법은 모듈을 별도의 프로젝트로 이동하는 것이지만 이것이 갈 길이 란 것을 확신하지 못합니다.

답변

0

코드에서 MPI 기능의 하위 집합 (예 : 검토 한 대부분의 MPI 코드) 만 사용하는 경우 실제로 사용중인 작업을 정의하는 추상화 계층 (특성 또는 Cake-Pattern)을 작성할 수 있습니다. 그런 다음 각 구현에 대해 구체적인 어댑터를 구현할 수 있습니다.

또한 비 MPI 통신 층 (생각 Akka, 위해 JGroups 등) 보너스 포인트로

, 당신은 SLF4J 접근 사용할 수와 함께 작동이 접근 방법 : 올바른 구현이 무엇에 따라 런타임에 선택을 실제로 classpath에 있습니다.

+0

mpi.MPI라는 클래스를 추가해야하는 두 개의 jar 파일이 모두 필요하기 때문에 작동하지 않을 것이라고 생각합니다. jar 파일을 핫 스왑 할 수 있기 때문에 이것은 문제가되지 않지만 일부 메소드가 (대문자로) 대문자로되어있는 라이브러리에도 불일치가 있습니다 ... – Felix

+0

@Felix 좋은 지적입니다. 'JarJar'를 사용하여 패키지의 이름을 바꿀 수 있습니다 : http://radomirml.com/2009/11/08/repackaging-conflicting-jars-with-jarjar 나는 그것을 결코 시도하지 않았다는 것을 고백해야합니다. – paradigmatic