2012-01-17 77 views
0

我按照說明here創建了遠程SessionBean的客戶端。我在運行Glassfish 3.1.2 beta的同一臺機器上運行客戶端。當我使用GF-client.jar中從3.1.2測試版GlassFish中,我得到以下異常這是相同的異常,如果我離開了GF-client.jar中出類路徑:將獨立客戶端連接到Glassfish 3中的無狀態SessionBean

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 

如果我使用一個來自Maven倉庫的3.1.1 gf-client.jar我得到一個巨大的堆棧跟蹤,抱怨它無法從Derby中找到一些我甚至沒有使用的.jar文件。顯然是版本不匹配問題。

有沒有人得到獨立的客戶端連接到Glassfish 3.1.2測試版? JavaEE 6中有這種變化嗎?

下面的代碼:

public class LoadTestClient { 
    static Logger logger = Logger.getLogger(LoadTestClient.class); 
    public static void main(String[] args) { 
    String jndiName = "java:global/locktest-0.0.1-SNAPSHOT/LockTestDeadlockService"; 
    try { 
     LockTestDeadlockServiceI lockTestService = 
     (LockTestDeadlockServiceI) new InitialContext().lookup(jndiName); 
     logger.info("Got lockTestService Remote Interface"); 
    } catch (NamingException e) { 
     logger.info("Failed to get lockTestService Remote Interface: " + e); 
    } 
    } 
} 

回答

0

簡短的回答是,從客戶端連接到GF 3.x中,你需要一個小型的GlassFish通過安裝:

@Stateless 
public class LockTestDeadlockService implements LockTestDeadlockServiceI { 
    public int getP1Id() throws SQLException { 
    int parentId = -1; 
    return parentId; 
    } 
} 


@Remote 
public interface LockTestDeadlockServiceI { 
    public int getP1Id() throws SQLException; 
    public void insertChildUpdateParent(int parentId) throws SQLException; 
} 

這裏是我的客戶應用程序客戶端容器(ACC)使用webstart或package-appclient腳本。打開gf-client.jar並查看清單文件中的類路徑。那裏列出了大量的文件。這在GF 2.x中是類似的,但它似乎需要較少的客戶端依賴性(儘管該版本爲15MB)。

看到這些:

Create an "Application Client" with Maven in Java EE

With which maven dependencies can i create a standalone JMS client for Glassfish?

http://docs.oracle.com/cd/E18930_01/html/821-2418/beakt.html#scrolltoc

http://docs.oracle.com/cd/E18930_01/html/821-2418/beakv.html#beakz