2012-02-03 2 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 может иметь это поле, но компилятор разрешит вам доступ к методам и полям, определенным в интерфейсе.

Вы можете обновить интерфейс, чтобы указать метод установки для этого поля, добавив:

public void setDataSource(DataSource ds); 

затем реализовать этот сеттер в классе реализации - то как:

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

но вам нужно посмотреть на внутренности SessionHandleImpl, чтобы сделать это правильно - я не смотрел, и у него может даже быть метод setter уже!

Тогда, наконец, называют sh.setDataSource(ds), а не sh.ds=ds

Update: В качестве альтернативы вы можете объявить sh как тип SessionHandleImpl, поэтому все поля будут видны. После этого вы не можете легко переключиться на другую реализацию - но поскольку класс реализации зашит здесь, это не конец света:

SessionHandleImpl sh = new SessionHandleImpl(); 
+0

Прошу прощения за недостаток знаний. Я все еще изучаю Java. Не могли бы вы показать мне правильный код. –

+0

Большое спасибо! Оно работает! –

4

Маркер ошибка просто указует на нет доступного члена ds в SessionHandle классе; кроме того, вы не дали нам ничего, чтобы продолжать. Может быть, это личное, может быть, это называется чем-то другим? Вам нужно пересмотреть свое предположение о том, что такое поле существует. Сообщение об ошибке, которое идет с маркером, может предоставить более подробную информацию.

+0

Вот код SessionHandle: http://pastebin.com/QV5FdzSr Здесь вы можете найти полный исходный код http://www.2shared.com/file/bziA4e-n/SH_27.html Это ошибка: http : //pastebin.com/nxbY1EUY –

Смежные вопросы