千里冰封
          JAVA 濃香四溢
          posts - 151,comments - 2801,trackbacks - 0
          今天使用glassfish部署一個(gè)EJB的應(yīng)用,這個(gè)EJB又引用到了第三方庫(kù),并且第三方庫(kù)又使用了本地方法,需要導(dǎo)入兩個(gè)DLL動(dòng)態(tài)鏈接庫(kù).反反復(fù)復(fù)部署了很久,終于還是部署成功了.
           一開(kāi)始,我是把那兩個(gè)DLL文件放到SYSTEM32下面,后來(lái)發(fā)現(xiàn),當(dāng)服務(wù)器起動(dòng)的時(shí)候,總是提示鏈接錯(cuò)誤,找不到DLL文件,我就覺(jué)得奇怪了,SYSTEM32可是默認(rèn)最PATH的地方了,于是在起動(dòng)的時(shí)候特意輸出一句System.out.println(System.getProperty("java.library.path")),發(fā)現(xiàn)還真的沒(méi)有SYSTEM32文件夾,它輸出的盡是一些glassfish下面的一些目錄,什么bin啊,lib目錄啊,后來(lái)把這兩個(gè)dll文件放到這些里面以后,問(wèn)題又來(lái)了,拋出一個(gè)錯(cuò)誤,NoClassDefFoundError,沒(méi)有此類的定義,天啊,第三方的庫(kù)我可是都打進(jìn)了EJB的那個(gè)JAR包了,然后它不會(huì)自己找?無(wú)語(yǔ)了,只有把那三個(gè)第三方的JAR包,放到glassfish認(rèn)為的lib目錄下,終于完全起動(dòng)好了.

            小結(jié):1,不知道EJB的JAR包能不能把第三方的庫(kù)打入JAR包里面,以前寫(xiě)enterprise application的時(shí)候,JAR包是可以包進(jìn)去的,不過(guò)一直都是用netbeans的自動(dòng)打包自動(dòng)部署功能,所以一旦脫離了netbeans,都不知道該怎么辦了,鬼知道netbeans要打包的時(shí)候,搞了一些什么鬼東西.
                2,為什么system32的PATH,glassfish就是不認(rèn)呢?人才,確實(shí)是人才.

          今天心情不太好,所以瞎寫(xiě)了幾下,做為記錄,glassfish還是很牛的,只是我不會(huì)用罷了.



          盡管千里冰封
          依然擁有晴空

          你我共同品味JAVA的濃香.
          posted on 2008-08-07 22:55 千里冰封 閱讀(2532) 評(píng)論(3)  編輯  收藏 所屬分類: JAVAEENetbeans

          FeedBack:
          # re: glassfish下打包的問(wèn)題
          2008-08-07 23:50 | Beniao
          netbeans 開(kāi)發(fā)EJB很方面.
          而且Sun Application Server也好用,就是速度慢了點(diǎn).呵呵...  回復(fù)  更多評(píng)論
            
          # re: glassfish下打包的問(wèn)題
          2008-08-17 12:31 | 靜齋
          2,為什么system32的PATH,glassfish就是不認(rèn)呢?人才,確實(shí)是人才.
          -------------------------
          可能是glassfish為了跨平臺(tái)性,不去找windows下的system32目錄
          個(gè)人自己猜得。。見(jiàn)笑了。  回復(fù)  更多評(píng)論
            
          # re: glassfish下打包的問(wèn)題
          2009-10-10 18:39 | quqi99
          是這樣的,我們單獨(dú)使用數(shù)據(jù)源,可以像下面這樣:
          DB2SimpleDataSource ds = new DB2SimpleDataSource();
          ds.setDatabaseName("test");
          ds.setDeferPrepares(false);
          ds.setDriverType(2);
          ds.setUser("db2admin");
          ds.setPassword("password");
          try {
          Connection con = ds.getConnection();
          System.out.println(con);
          } catch (SQLException e) {
          e.printStackTrace();
          }
          在glassfish中的做法和上面是一樣的,只不過(guò)構(gòu)建DB2SimpleDataSource 對(duì)象時(shí)采用的是反射,如下(見(jiàn)glassfish源代碼的DataSourceObjectBuilder類的getDataSourceObject方法):
          Class dataSourceClass = Thread.currentThread().getContextClassLoader().loadClass(className);
          Object dataSourceObject = dataSourceClass.newInstance();
          看見(jiàn)沒(méi)有,在這里glassfish采用了自己的類加載器,這樣,你把db2jcct2.dll放到system32目錄下,它當(dāng)然就不認(rèn)羅,你放到%glassfish_home%\lib目錄下就可以了
            回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 榆树市| 塔河县| 封开县| 壶关县| 太原市| 鲁山县| 山丹县| 宝应县| 黎平县| 藁城市| 德惠市| 夏邑县| 江口县| 尼木县| 九龙坡区| 伊宁县| 湛江市| 百色市| 绍兴市| 大安市| 富平县| 贵溪市| 奈曼旗| 阿城市| 扶风县| 溧阳市| 大荔县| 沈阳市| 宕昌县| 合肥市| 百色市| 太谷县| 汕尾市| 镇沅| 富阳市| 昆明市| 平凉市| 乌鲁木齐市| 鹤岗市| 蛟河市| 阿鲁科尔沁旗|