Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EntityBean ---> SessionBean 
:(
    Опции темы
Unlimited
  Дата 21.8.2007, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 9.7.2003
Где: Германия

Репутация: нет
Всего: нет



Привет Всем!!!
У меня есть EntityBean  „PersonEJB“   в котором реализуется максимальный „Primary Key“ (определяется MAX  и потом дабавляется  1) из таблицы PeronEJBTable. Т.к. эта функция для других EJBs необходима, нужно реализовать эту фукцию в ststeless SessionBean (HandlerEJB)  и соответственно вызов в PersonEJB  этой функции. Т.е. убрать функцию
 private Integer maxPrimaryKey(String idName, String tabellenName)
из PersonEJB  и реализовать  в HandlerEJB(SessionBean) .
Подскажите пожалуйста как это реализовать, желательно с примерами для наглядности.

cod EntityBean см. ниже

Заранее спасибо!!!!


PersonEJB

Код

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public abstract class PersonEJB implements EntityBean {

    Connection conn;

    PreparedStatement prepStmt;

    ResultSet result;

    public PersonEJB() {
    }

    // die abstakten Zugriffsmethoden
    public abstract Integer getPersonID();

    public abstract String getName();

    public abstract String getRufname();

    // public abstract Date getGebDate();
    public abstract String getGebDate();

    public abstract String getMobilTel();

    public abstract void setPersonID(Integer inValue);

    public abstract void setName(String inValue);

    public abstract void setRufname(String inValue);

    // public abstract void setGebDate(Date inValue);
    public abstract void setGebDate(String inValue);

    public abstract void setMobilTel(String inValue);

    // die zwei create-Methoden:

    // public Integer ejbCreatePerson(String name, String rufname, Date gebDate,
    // String mobilTel)throws
    public Integer ejbCreatePerson(String name, String rufname, String gebDate,
            String mobilTel) throws javax.ejb.CreateException {

        Integer ps = maxPrimaryKey("personID", "PersonEJBTable");
        if (ps == null)
            setPersonID(new Integer(0));
        else {
            setPersonID(new Integer(ps.intValue() + 1));
        }
        setName(name);
        setRufname(rufname);
        setGebDate(gebDate);
        setMobilTel(mobilTel);
        return null;
    }

    // postCreate mit gleichen Parametern
    // public void ejbPostCreatePerson(String name, String rufname, Date
    // gebDate, String mobilTel)throws
    public void ejbPostCreatePerson(String name, String rufname,
            String gebDate, String mobilTel) throws javax.ejb.CreateException {
    }

    // die sieben callback-Methoden des life-cycle
    // aus "javax.ejb.EntityBean"
    public void setEntityContext(EntityContext ctx) {
    }

    public void unsetEntityContext() {
    }

    public void ejbActivate() {
    }

    public void ejbPassivate() {
    }

    public void ejbLoad() {
    }

    public void ejbStore() {
    }

    public void ejbRemove() {
    }

    // nur als Bsp. eine "buisness"-Methode

    public String checkDoubleName() {
        // Doppelnamen enthalten Bindenstrich:
        if (getName().indexOf("-") > -1)
            return getName();
        else
            return null;
    }

    private Integer maxPrimaryKey(String idName, String tabellenName) {
        Integer ps;
        conn = getConn();
        try {
            prepStmt = conn.prepareStatement("SELECT MAX(\"" + idName
                    + "\") FROM \"" + tabellenName + "\"");
            result = prepStmt.executeQuery();
            if (result.next()) {
                ps = new Integer(result.getInt(1));
                closeResourses(conn, prepStmt);
                return ps;
            }
        } catch (SQLException sqle) {
            System.out.println("PersonEJB-SQLException: " + sqle.getMessage());
            closeResourses(conn, prepStmt);
        }

        return null;
    }

    private void closeResourses(Connection conn, PreparedStatement prepStmt) {
        try {
            prepStmt.close();
            conn.close();
        } catch (SQLException sqle) {
            System.out.println("PersonEJB-SQLException: " + sqle.getMessage());
        }
    }

    private Connection getConn() {
        DataSource ds = null;
        try {
            Context jndiContext = new InitialContext();
            ds = (DataSource) jndiContext.lookup("jdbc/Cloudscape");
            return ds.getConnection();
        } catch (NamingException ne) {
            System.out.println("PersonEJB-NamingException: " + ne.getMessage());
        } catch (SQLException sqle) {
            System.out.println("PersonEJB-SQLException: " + sqle.getMessage());
        }
        return null;

    }

}




PersonHome
Код

import javax.ejb.CreateException;
import javax.ejb.FinderException;
import java.rmi.RemoteException;
import java.util.Date;

public interface PersonHome extends javax.ejb.EJBHome {

    public PersonRemote createPerson(String name, String rufname, String gebDate,
            String mobilTel) throws CreateException, RemoteException;

    public PersonRemote findByPrimaryKey(Integer id) throws FinderException,
            RemoteException;

    public java.util.Collection findByFullName(String name, String rufname)
            throws FinderException, RemoteException;

    public java.util.Collection findByName(String name)
            throws FinderException, RemoteException;
    
    public java.util.Collection findByCallName(String rufname)
    throws FinderException, RemoteException;
    
    

}



PersonRemote
Код

import java.rmi.RemoteException;
import java.util.Date;
 
public interface PersonRemote extends javax.ejb.EJBObject {
//     die abstakten Zugriffsmethoden
    public abstract Integer getPersonID() throws RemoteException;
    public abstract String getName()throws RemoteException;
    public abstract String getRufname()throws RemoteException;
    public abstract String getGebDate()throws RemoteException;
    public abstract String getMobilTel()throws RemoteException;
    
    public abstract void setPersonID( Integer inValue)throws RemoteException;
    public abstract void setName(String inValue)throws RemoteException;
    public abstract void setRufname(String inValue)throws RemoteException;
    public abstract void setGebDate(String inValue)throws RemoteException;
    public abstract void setMobilTel(String inValue)throws RemoteException;
    
    public String checkDoubleName() throws RemoteException;
    

}


PM MAIL   Вверх
Unlimited
  Дата 22.8.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 9.7.2003
Где: Германия

Репутация: нет
Всего: нет



есть у кого либо какие-то  идеи, по этому поводу?
PM MAIL   Вверх
AxNe0
  Дата 23.8.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: нет
Всего: 5



а почему просто не перенести код в SessionBean? не совсем понятно, в чем проблема


--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
Unlimited
Дата 24.8.2007, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 9.7.2003
Где: Германия

Репутация: нет
Всего: нет



Приветик 

я перенёс в SessionBean. Т.к. эта функция для других EJBs необходима, соответственно я думаю, что  он у PrimaryKeyEJB : Local и LocalHome Interfaces код ниже. 

Как сделать вызов  в PersonEJB  этой функции?
я написал но не уверен, что правильно и как дальше вызвать посмотрите пожалуйста код, что я должен сделать чтобы вызвать  метод maxPrimaryKey(String idName, String tabellenName) находящуюся в PrimaryKeyEJB  из класса PersonEJB (к коде обозначино крассным цветом).



 

PrimaryKeyEJB :

Код

import java.rmi.RemoteException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


public class PrimaryKeyEJB implements SessionBean {
    
    Connection conn;

    PreparedStatement prepStmt;

    ResultSet result;


    /** The session context */
    private SessionContext context;

    public PrimaryKeyEJB() {
        // TODO Auto-generated constructor stub
    }

    public void ejbActivate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub

    }

    public void ejbPassivate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub

    }

    public void ejbRemove() throws EJBException, RemoteException {
        // TODO Auto-generated method stub

    }

    
    public void setSessionContext(SessionContext newContext)
        throws EJBException {
        context = newContext;
    }

    
    public void ejbCreate() throws CreateException {
        // TODO Add ejbCreate method implementation
    }

    
    public void replaceWithRealBusinessMethod() throws EJBException {
        // rename and start putting your business logic here
    }
    
    private Integer maxPrimaryKey(String idName, String tabellenName) {
        Integer ps;
        conn = getConn();
        try {
            prepStmt = conn.prepareStatement("SELECT MAX(\"" + idName
                    + "\") FROM \"" + tabellenName + "\"");
            result = prepStmt.executeQuery();
            if (result.next()) {
                ps = new Integer(result.getInt(1));
                closeResourses(conn, prepStmt);
                return ps;
            }
        } catch (SQLException sqle) {
            System.out.println("PrimaryKeyEJB-SQLException: " + sqle.getMessage());
            closeResourses(conn, prepStmt);
        }

        return null;
    }

    private void closeResourses(Connection conn, PreparedStatement prepStmt) {
        try {
            prepStmt.close();
            conn.close();
        } catch (SQLException sqle) {
            System.out.println("PrimaryKeyEJB-SQLException: " + sqle.getMessage());
        }
    }

    private Connection getConn() {
        DataSource ds = null;
        try {
            Context jndiContext = new InitialContext();
            ds = (DataSource) jndiContext.lookup("jdbc/Cloudscape");
            return ds.getConnection();
        } catch (NamingException ne) {
            System.out.println("PrimaryKeyEJB-NamingException: " + ne.getMessage());
        } catch (SQLException sqle) {
            System.out.println("PrimaryKeyEJB-SQLException: " + sqle.getMessage());
        }
        return null;

    }

}



PrimaryKeyLocalHome:
Код

mport javax.ejb.CreateException;


public interface PrimaryKeyLocalHome extends javax.ejb.EJBLocalHome {
    
    public PrimaryKeyLocalHome create()throws CreateException;

}



PrimaryKeyLocal:
Код

import javax.ejb.FinderException;


public interface PrimaryKeyLocal extends javax.ejb.EJBLocalObject {
    
    public Integer maxPrimaryKey(String idName, String tabellenName)throws FinderException; 

}


PersonEJB:   в нём вызывается метод maxPrimaryKey из SessionBean(PrimaryKeyEJB )
Код

public abstract class PersonEJB implements EntityBean {
...
...
...
public Integer ejbCreatePerson(String name, String rufname, String gebDate,
            String mobilTel) throws javax.ejb.CreateException {

        PrimaryKeyLocalHome home =  getPrimaryKeyHome();
        Integer ps = home.create();
        
[color=red]Как дальше вызвать из interface PrimaryKeyLocal метод: maxPrimaryKey(String idName, String tabellenName)
        
        Integer ps = ????.....??? maxPrimaryKey("personID", "PersonEJBTable");[/color]    
    
        if (ps == null)
            setPersonID(new Integer(0));
        else {
            setPersonID(new Integer(ps.intValue() + 1));
        }
        setName(name);
        setRufname(rufname);
        setGebDate(gebDate);
        setMobilTel(mobilTel);
        return null;
    }

...
...
private PrimaryKeyLocalHome getPrimaryKeyHome(){
        
        try {
            Context jndiContext =  new InitialContext();
            PrimaryKeyLocalHome home =(PrimaryKeyLocalHome)
            jndiContext.lookup("java:comp/env/ejb/PersonEJB");
            return home;
        } catch (NamingException nex) {
            return null;
        }
    }

PM MAIL   Вверх
y3u
Дата 24.8.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13





--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
AxNe0
Дата 24.8.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: нет
Всего: 5



Unlimited, а зачем тебе вообще оставлять EntityBean? они оооочень редко используются... я бы, к примеру, сделал SessionBean, в котором уже вызывал бы методы обычного класса Person...


--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.