2012-02-03 5 views
-1

私はこのコードを持っている:このJavaコードを修正するには?

package org.DX_57.osgi.SH_27.impl; 

import javax.sql.DataSource; 
import java.sql.SQLException; 

import java.util.Properties; 
import org.DX_57.osgi.SH_27.api.SessionHandle; 
import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 
import org.osgi.framework.Constants; 
import org.osgi.framework.Filter; 
import org.osgi.framework.ServiceReference; 
import org.osgi.util.tracker.ServiceTracker; 


public class SessionHandleApp implements BundleActivator { 

    public static final String DSNAME = "jdbc/Oracle"; 
    public ServiceTracker st; 

    @Override 
    public void start(final BundleContext bc) throws Exception { 
     debug("Activator started"); 


     Filter filter = bc.createFilter("(&" + "(" + Constants.OBJECTCLASS 
       + "=" + DataSource.class.getName() + ")" + "(jndi-name=" 
       + DSNAME + ")" + ")"); 
     st = new ServiceTracker(bc, filter, null) { 

      @Override 
      public Object addingService(ServiceReference reference) { 
       DataSource ds = (DataSource) bc.getService(reference); 
       try { 
        debug(ds.getConnection().toString()); 

       SessionHandle sh = new SessionHandleImpl(); 
           sh.ds = ds; 
           bc.registerService(SessionHandle.class.getName(), sh, new Properties()); 

       } catch (SQLException e) { 
       } 

       return super.addingService(reference); 
      } 

      @Override 
      public void removedService(ServiceReference reference, 
        Object service) { 
       super.removedService(reference, service); 
      } 

     }; 
     st.open();   

    } 

    public void stop(BundleContext bc) throws Exception { 
     bc.ungetService(bc.getServiceReference(SessionHandle.class.getName())); 
     st.close(); 
    } 

    private void debug(String msg) { 
     System.out.println("JDBCTestBundleActivator: " + msg); 
    } 
} 

私はこれは私が取得エラーですNetbeansのでコードをコンパイルしようとすると:私はこれを修正するにはどうすればよい

http://i39.tinypic.com/14xdw5c.png

これは完全なソースコードです: http://www.2shared.com/file/bziA4e-n/SH_27.html

ベストウイッシュ

+1

ないリンクでは、ここにあなたの完全なエラーメッセージテキストを表示してください。コードのどの行でエラーが発生したのかをコメントで示します。 –

+0

私はその小さな赤い線なしでスクリーンショットを投稿した場合に役立ちますか?ちなみに – yurib

+0

、下院は私のものではありません。 –

答えて

3

フィールドdsにアクセスしようとしていますが、変数shはこのフィールドを持たないタイプSessionHandle(インターフェイス)です。インプリメンテーションSessionHandleImplにはこのフィールドがあるかもしれませんが、コンパイラーはインターフェイスに定義されているメソッドとフィールドにしかアクセスできません。

あなたはこのフィールドのsetterメソッドを指定するには、インターフェイスを更新でき、追加することによって:

public void setDataSource(DataSource ds); 

を、次に実装クラスでそのセッターを実装 -のようなもの

public void setDataSource(DataSource ds) 
    { 
     this.ds = ds; 
    } 

をこれを正しく行うにはSessionHandleImplの内部を見る必要があります - 私は見ていないし、すでにセッターメソッドを持っているかもしれません!

は、最終的にアップデートsh.setDataSource(ds)ではなくsh.ds=ds

を呼び出します。また、あなたはとてもそのすべてのフィールドが表示されます、タイプSessionHandleImplとしてshを宣言することができます。あなたは、簡単に別の実装を変更することはできません - しかし、実装クラスは、ここではハードコーディングされているので、それが世界の終わりではない。

SessionHandleImpl sh = new SessionHandleImpl(); 
+0

私の知識が不足しているので、すみません。私はまだJavaを学んでいます。あなたは私に正しいコードを教えてくれますか? –

+0

ありがとうございました!できます! –

4

エラーマーカーは、単に何もアクセスできるメンバーdsSessionHandleクラスにありませんを示しています。それを超えて、あなたは私たちに何かを与えていない。多分それはプライベートだ、多分何か違うと呼ばれる?そのようなフィールドが存在するという前提を再検討する必要があります。マーカーと一緒に表示されるエラーメッセージにより詳細が表示されることがあります。

+0

ここにSessionHandleのコードがあります:http://pastebin.com/QV5FdzSr完全なソースコードはこちらhttp://www.2shared.com/file/bziA4e-n/SH_27.htmlこれはエラーです:http ://pastebin.com/nxbY1EUY –

関連する問題