CMP of Collection of Strings

Hi there,
I have an Entity EJB which has as one of it's fields a Collection of Strings. Is there anyway to CMP this field besides storing it as a BLOB?
I've had a look through the documentation and I can't find a way, but it must be such a common scenario I find it hard to believe.
Any help or comments appreciated!

Hi John,
As you mentioned, here's no direct way to store this Collection field. You might try to append all strings into a new string and store it in a CMP String field, depending on the maximum String size supported by your database. The Collection has to be transient. S1AS 8 will support CLOB fields.
Regards,
-- markus.

Similar Messages

  • Collection of Strings

    Is it possible to have a collection of strings? Using Toplink and JPA
    For instance:
    Collection<String> dataName;
    it gives me Error
    "is not a valid type for a serialized mapping"
    Also is it possible to have nested collections?
    Collection<Collection<int>> data;
    Thanks

    Both are valid. In JPA you could map them as @Basic and the value will be serialized into a binary column type. For the Collection<String> you could also use the TopLink DirectCollectionMapping to map this, this mapping type is not part of JPA, but you could define it through a DescriptorCustomizer, or using the @BasicCollection annotation or XML in EclipseLink.
    You could also create an Entity class to wrap the String or nested Collection, and map it as a @OneToMany.
    -- James : http://www.eclipselink.org

  • SQL Azure indexer support for Collection(Edm.String)

    Is there a plan to support "Collection(Edm.String)
    " with a SQL Azure indexer? Maybe via an XML type?
    Unless I'm misunderstanding the supported types
    https://msdn.microsoft.com/en-us/library/azure/dn946880.aspx
    It sort of fizzles out after "time, timespan" but I'm assuming it's Not Supported's all the way down

    http://feedback.azure.com/forums/263029-azure-search/suggestions/7189214-sql-azure-indexer-support-for-collection-edm-strin
    Was going to start there but just wanted to vet that it indeed wasn't there.... I realize it's a bit awkward and anti - sql storing data like that in a column and will probably annoy DBAs.
     Currently the data we'd use this for would be Customer phone numbers, addresses, VIN for vehicles, and some account numbers... So nothing super fancy...   Straight delimiters might get funky with addresses but maybe a standard backspace escape
    sequence or letting user use ascii hexcode if the delimiter is in the text..  
    For now we already have a comma separated SearchText field we've indexed for use with FTS and I just pointed an Edm.string at that column in our DB and it seems to pick up all the comma separated elements... But I'm guessing it's not as efficient as if it
    was stored in more specific collections.

  • Persisting collection of Strings - EJB,  TopLink

    I am a student and I have to write small java EE application.
    I am writing in NetBeans 5.5 and use Java Application Server, EJB 3.0 and TopLink.
    In my system, teachers make tasks (stored on server) and pupils have to solve them.
    Possible answers defined by teacher, while viewed by a pupil, have to in the same order, as the teacher defined. I think, list of strings would by the easiest solution to store possible answers.
    @Entity
    public class Task implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String question;
    private List possibleAnswers;
    public Task(String q, List a) {
    possibleAnswers = a;
    question = q;
    /* setters and getters */
    possibleAnswers is a list of Strings.
    When I left possibleAnswers unitialized, the task is persisted properly(just possibleAnswers is a null)
    The problem is, when I initialize list(with new ArrayList() or new LinkedList()), persisting fails. It doesn`t matter whether this list is empty or not.
    java.rmi.RemoteException: Transaction aborted
    I found this link:
    http://www.oracle.com/technology/products/ias/toplink/doc/10131/main/_html/relmapun010.htm#CHDHHGBG
    Can I use it in my project? How?

    What error do you get? You should see the exception in your server's log.
    Typically for a List you need to specify what it references, and how to map it.
    i.e.
    @Basic
    private List<String> possibleAnswers;
    This would serialize the List into a binary field in the database, which is what I would assume the default would do as well.
    You could also map it as a @OneToMany, but then you would need an Answer class instead of just a String.
    In TopLink you could map a collection of Strings to a seperate table using a DirectCollectionMapping, this mapping type is not part of JPA, but you could use a DescriptorCustomizer to add this mapping to your TopLink descriptor.

  • CMP with Collection

    Hi
    i have a CMP with a Collection of other CMPs (that is, i have a CMR between two CMPs)
    Let's say that the CMP Invoice, has a Collection of Line CMPs
    How can i add one Line the a given Invoice ?
    I've been looking at the CMP and my only option is to get the entire collection, add the Line and then set the collection to the CMP, but i really don't think this is the way to go
    Any ideas ?
    Thank you

    I think you just have to add a new Line with the EJB. I suppose during the EJB CMP line creation you give the EJB CMP invoice, like
    EJBEntityLineLocal.create(EJBEntityInvoiceLocal, param2, param3, ....)
    So, when you access to the collection of EJBLineLocal from EJBInvoiceLocal, all is ok.

  • Are globals the best way to pass a collection of strings?

    I have an ATE application that is used on several models of the same
    product. The models have optioning commands and status screen layouts
    that use different terms for the same function. For example: "LBO" on
    one model might be labeled "EQ" on another. I capture the screen
    output as serial data and then parse it for the string I need to read.
    In order to use the same code on different models I have a config file
    that loads the correct strings into global variables based on the
    model I'm testing. The globals are then read by the sub-VIs. This
    works well, but I use over a hundred globals to do this and I worry
    that some day the overhead will catch up to me.
    Does anyone know a better way to do this? The re
    quirement is that the
    strings be kept in a central location for maintainability, yet be
    accessable to several sub-VIs.
    I'm running LV 6i, but I could upgrade to 6.1 if necessary.
    Ed

    Could you pass them in via a cluster of strings?
    "Ed Ward" wrote in message
    news:[email protected]..
    > I have an ATE application that is used on several models of the same
    > product. The models have optioning commands and status screen layouts
    > that use different terms for the same function. For example: "LBO" on
    > one model might be labeled "EQ" on another. I capture the screen
    > output as serial data and then parse it for the string I need to read.
    >
    > In order to use the same code on different models I have a config file
    > that loads the correct strings into global variables based on the
    > model I'm testing. The globals are then read by the sub-VIs. This
    > works well, but I use over a hundred glob
    als to do this and I worry
    > that some day the overhead will catch up to me.
    >
    > Does anyone know a better way to do this? The requirement is that the
    > strings be kept in a central location for maintainability, yet be
    > accessable to several sub-VIs.
    >
    > I'm running LV 6i, but I could upgrade to 6.1 if necessary.
    >
    > Ed

  • ImmutableArrayList default for Map Long, Collection String

    Hi,
    There are a few topics out there about the com.tangosol.util.ImmutableArrayList default, but the actual fix still seems a bit unclear to me.
    In my example there is a Map with each entry containing a Collection of Strings (i.e. Map<Long, Collection<String>>). Objects will be placed in the Map as ArrayLists, but they seem to come out as ImmutableArrayLists.
    The Oracle site mentions wrapping the Collection (http://extranet.tangosol.com/display/COH35UG/Best+Practices+for+Coherence+Extend).
    There is another Oracle forum post that suggests using more general classes (List instead of ArrayList). (Serialize an ArrayList<ArrayList>
    It seems like you have to make a new collection anytime you wish to reserialize the object. Is there a better way?
    Thanks for taking the time,
    Mike

    This problem comes up for us when persisting documents. We are torn between saving as XML vice saving a normalized object model or something else: like your database solution.
    Since you have already designed the database, then you can reverse out the TopLink class from that database design in the mapping workbench. You then have to perform a transform in the middle tier to extract your business model.
    Alternatively, if you want your business model to map via ORM to the data model, then you would have a database design that more closely maps the business model design then you get three tables:
    TopLevel
    Integer primaryKey; //This table may just have the PK
    SetMap theSets;
    SetMap
    TopLevel parent; //FK to the Parent table
    Long primaryKey; //Assumes the Longs are globally unique. If not, the PK will include the parent
    SetList theSet;
    SetList
    SepMap parent; //Part of PK. This can get complicated if the PK migrates all the way from TopLevel. We insert a surrogate key at this point.
    String setMember; //Rest of PK
    The database constraints ensure that the SetList is unique. The equivalent string may exist in different SetMaps, but may not be duplicated for a particular parent.

  • Comparing Collection object with a string

    Hi everyone,
    There is my problem: I have a program that generate all possible combinations of a certain number of letters for example: -ABC- will gives A, B, C, AB, AC, BC, ABC. Everything is fine at this point. But then the user can input a string like "AB" and I have to tell him if this string is contained in the generated set. My set is in a Collection, but when I used : LetterCombination.Contains(TextString), it returns always false. Even if I know that the string is contained in the set.
    Here is the code to generate the set:
    public class Recursion
         Collection LetterCombination;
    /*String Letters is the letters which I have to generate the combination, and
    the LetterNumber is the number of letters contained in my string.*/
         public Recursion(Set ItemLetters, String Letters, int LetterNumbers)
              ItemLetters = new TreeSet();
    String[] Token = Letters.split(" ");
    /*Adding the letters in the TreeSet*/
    for (int i = 0; i < LetterNumbers; i++)
         ItemLetters.add(Token);
    LetterCombination = BuildLetterSet(ItemLetters);
    private Collection BuildLetterSet(Set ItemLetters)
    Set NotUsedYet = new TreeSet();
    Set thisPowerSet = new TreeSet();
    Collection Letterresult = new ArrayList();
    NotUsedYet.addAll(ItemLetters);
    BuildByRecursion(NotUsedYet, thisPowerSet, Letterresult);
    return Letterresult;
    private void BuildByRecursion(Set notUsedYet, Set thisPowerSet, Collection result)
    if(notUsedYet.isEmpty())
    if(!thisPowerSet.isEmpty())
    Set copy = new TreeSet();
    copy.addAll(thisPowerSet);
    result.add(copy);
    return;
    Object item = notUsedYet.iterator().next();
    notUsedYet.remove(item);
    BuildByRecursion(notUsedYet, thisPowerSet, result);
    thisPowerSet.add(item);
    BuildByRecursion(notUsedYet, thisPowerSet, result);
    thisPowerSet.remove(item);
    notUsedYet.add(item);
    And if I print out the LetterCombination collection, it gives me:
    [C]
    [B, C]
    [A]
    [A, C]
    [A, B]
    [A, B, C]
    Which are the good combination needed. But I really don't understand how to compare this collection with the string entered by the user.
    I'm really lost. can somebody help me! Thanks in advance...

    You don't show where you call this constructor, or what your arguments are:
    public Recursion(Set ItemLetters, String Letters, int LetterNumbers)
       ItemLetters = new TreeSet();
       String[] Token = Letters.split(" ");
       /*Adding the letters in the TreeSet*/
       for (int i = 0; i < LetterNumbers; i++)
          ItemLetters.add(Token[ i ]);
       LetterCombination = BuildLetterSet(ItemLetters);
    }But, the constructor doesn't make sense, anyway. itemLetters is immediately set to a new TreeSet, so whatever you passed in (if anything) for the first argument is unchanged by the constructor (and the new TreeSet is lost when you finish the constructor). Also, you split your input Letters on space, but rely on LetterNumbers for the length of the split array (which may or may not be accurate). Why not do a 'for' loop testing for "i < Token.length", and eliminate LetterNumbers parameter? Your input for the second parameter to this constructor would have to be "A B C D" (some letters delimited by spaces). Your constructor only needs one parameter--that String.
    The capitalization of your variables doesn't follow standard coding conventions. Your code is hard to read without the "code" formatting tags (see "Formatting Tips"/ [ code ] button above message posting box).

  • Unable to execute the cmp using the weblogic

    I was trying to execute cmp using weblogic server7.0.
    It a simple program,
    The remote interface-
    import javax.ejb.*;
    import java.rmi.RemoteException;
    public interface SportTeam extends EJBObject{
    public void setOwnerName(String ownerName) throws RemoteException;
    public String getOwnerName() throws RemoteException;
    public void setFranchiseName(String franchiseName) throws RemoteException;
    public String getFranchiseName() throws RemoteException;
    }The home interface
    import javax.ejb.*;
    import java.rmi.RemoteException;
    import java.util.Collection;
    public interface SportTeamHome extends EJBHome{
    SportTeam create(String sport,String nickName)throws RemoteException,CreateException;
    SportTeam create(String sport,String nickName,String ownerName,String franchisePlayer)throws RemoteException,CreateException;
    SportTeam findByPrimaryKey(SportTeamPK sportTeam) throws RemoteException,FinderException;
    Collection findByOwnerName(String ownerName) throws RemoteException,FinderException;
    }The bean
    import javax.ejb.*;
    import javax.naming.*;
    import java.rmi.RemoteException;
    import java.sql.*;
    import java.util.*;
    public abstract class SportTeamEJB implements EntityBean{
    public SportTeamPK ejbCreate(String sport,String nickName) throws CreateException {
    setSport(sport);
    setNickName(nickName);
    setOwnerName(null);
    setFranchiseName(null);
    return null;
    public void ejbPostCreate(String sport,String nickName){}
    public SportTeamPK ejbCreate(String sport,String nickName,String ownerName,String franchiseName) throws CreateException {
    setSport(sport);
    setNickName(nickName);
    setOwnerName(ownerName);
    setFranchiseName(franchiseName);
    return null;
    public void ejbPostCreate(String sport,String nickName,String ownerName,String franchiseName){}
    public void ejbLoad(){}
    public void ejbStore(){}
    public void ejbRemove(){}
    public void ejbActivate(){}
    public void ejbPassivate(){}
    public void setEntityContext(EntityContext ctx){}
    public void unsetEntityContext(){}
    abstract public String getSport();
    abstract public void setSport(String sport);
    abstract public String getNickName();
    abstract public void setNickName(String nickName);
    abstract public String getOwnerName();
    abstract public void setOwnerName(String ownerName);
    abstract public String getFranchiseName();
    abstract public void setFranchiseName(String franchiseName);
    }the client side program
    import java.rmi.RemoteException;
    import javax.ejb.*;
    import javax.naming.*;
    import javax.rmi.PortableRemoteObject;
    import java.util.Properties;
    import java.util.Collection;
    import java.util.Iterator;
    public class TestClient{
    public static void main(String[] args){
    try{
         Properties prop=new Properties();
         prop.setProperty(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
         prop.setProperty(Context.PROVIDER_URL,"t3://localhost:7001");
         InitialContext initial=new InitialContext(prop);
         Object objref=initial.lookup("CMPSportBean");
         SportTeamHome home=(SportTeamHome)PortableRemoteObject.narrow(objref,SportTeamHome.class);
         System.out.println("Creating a row.");
         home.create("basketball","Kings","Joe Maloof","Jason Williams");
         System.out.println("Looking up by primary key...");
         SportTeam team=home.findByPrimaryKey(new SportTeamPK("basketball","Kings"));
         System.out.println("Current franchise player:");
         System.out.println(team.getFranchiseName());
         System.out.println("Looking by by owner...");
         Collection col=home.findByOwnerName("Joe Maloof");
         if(     0 == col.size()     ){
              System.out.println("Found no such owner");
         }else {
              Iterator iter=col.iterator();
              while(iter.hasNext()){
              Object objref2=iter.next();
              SportTeam teamRef2=(SportTeam) PortableRemoteObject.narrow(objref2,SportTeam.class);
              System.out.println("Owner name:"+ teamRef2.getOwnerName());
    team.remove();
    }catch(RemoveException re){
         re.printStackTrace();
    }catch(NamingException ne){
         ne.printStackTrace();
    }catch(CreateException ce){
         ce.printStackTrace();
    }catch(FinderException fe){
         fe.printStackTrace();
    }catch(RemoteException re){
                  re.printStackTrace();
    }The primary key class
    //package sportBean.cmp;
    import java.io.Serializable;
    public class SportTeamPK implements Serializable{
    public String sport;
    public String nickName;
    public SportTeamPK(){}
    public SportTeamPK(String sport,String nickName){
    this.sport =sport;
    this.nickName=nickName;
    public String getSport(){
    return sport;
    public String getNickName(){
    return nickName;
    public int hashCode(){
    return (sport+nickName).hashCode();
    public boolean equals(Object other){
         if( (other == null) ||! (other instanceof SportTeamPK) ){
            return false;
         SportTeamPK otherPK=(SportTeamPK)other;
         return sport.equals(otherPK.sport) && nickName.equals(otherPK.nickName);
    The program has complied successfully .
    The META-INF directory has been created automatically
    the ejb-jar.xml file
    <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
    <!-- Generated XML! -->
    <ejb-jar>
      <enterprise-beans>
        <entity>
          <ejb-name>CMPSportBean</ejb-name>
          <home>SportTeamHome</home>
          <remote>SportTeam</remote>
          <ejb-class>SportTeamEJB</ejb-class>
          <persistence-type>Container</persistence-type>
          <prim-key-class>SportTeamPK</prim-key-class>
          <reentrant>False</reentrant>
          <abstract-schema-name>SportEJB</abstract-schema-name>
          <cmp-field>
            <field-name>sport</field-name>
          </cmp-field>
          <cmp-field>
            <field-name>nickName</field-name>
          </cmp-field>
          <cmp-field>
            <field-name>ownerName</field-name>
          </cmp-field>
          <cmp-field>
            <field-name>franchiseName</field-name>
          </cmp-field>
          <query>
            <query-method>
              <method-name>findByOwnerName</method-name>
              <method-params>
                <method-param>java.lang.String</method-param>
              </method-params>
            </query-method>
            <ejb-ql><![CDATA[SELECT OBJECT(o) FROM SportEJB AS o WHERE o.ownerName=?1]]></ejb-ql>
          </query>
        </entity>
      </enterprise-beans>
      <assembly-descriptor>
      </assembly-descriptor>
    </ejb-jar>the weblogic-ejb-jar.xml file
    <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 7.0.0 EJB//EN' 'http://www.bea.com/servers/wls700/dtd/weblogic-ejb-jar.dtd'>
    <!-- Generated XML! -->
    <weblogic-ejb-jar>
      <weblogic-enterprise-bean>
        <ejb-name>CMPSportBean</ejb-name>
        <entity-descriptor>
          <pool>
          </pool>
          <entity-cache>
            <max-beans-in-cache>1000</max-beans-in-cache>
            <idle-timeout-seconds>600</idle-timeout-seconds>
            <read-timeout-seconds>600</read-timeout-seconds>
            <cache-between-transactions>False</cache-between-transactions>
          </entity-cache>
          <persistence>
            <persistence-use>
              <type-identifier>WebLogic_CMP_RDBMS</type-identifier>
              <type-version>6.0</type-version>
              <type-storage>META-INF/weblogic-cmp-rdbms-jar.xml</type-storage>
            </persistence-use>
          </persistence>
          <entity-clustering>
          </entity-clustering>
        </entity-descriptor>
        <transaction-descriptor>
          <trans-timeout-seconds>2</trans-timeout-seconds>
        </transaction-descriptor>
        <jndi-name>CMPSportBean</jndi-name>
      </weblogic-enterprise-bean>
    </weblogic-ejb-jar>the weblogic-cmp-rdbms-jar.xml file
    <!DOCTYPE weblogic-rdbms-jar PUBLIC  '-//BEA Systems, Inc.//DTD WebLogic 7.0.0 EJB RDBMS Persistence//EN' 'http://www.bea.com/servers/wls700/dtd/weblogic-rdbms20-persistence-700.dtd'>
    <!-- Generated XML! -->
    <weblogic-rdbms-jar>
      <weblogic-rdbms-bean>
        <ejb-name>CMPSportBean</ejb-name>
        <data-source-name>myjdbcjndi</data-source-name>
        <table-map>
          <table-name>sportsteams</table-name>
          <field-map>
            <cmp-field>ownerName</cmp-field>
            <dbms-column>ownername</dbms-column>
          </field-map>
          <field-map>
            <cmp-field>franchiseName</cmp-field>
            <dbms-column>franchisename</dbms-column>
          </field-map>
          <field-map>
            <cmp-field>nickName</cmp-field>
            <dbms-column>nickname</dbms-column>
          </field-map>
          <field-map>
            <cmp-field>sport</cmp-field>
            <dbms-column>sport</dbms-column>
          </field-map>
        </table-map>
        <weblogic-query>
          <query-method>
            <method-name>findByOwnerName</method-name>
            <method-params>
              <method-param>java.lang.String</method-param>
            </method-params>
          </query-method>
        </weblogic-query>
        <check-exists-on-method>False</check-exists-on-method>
      </weblogic-rdbms-bean>
      <create-default-dbms-tables>True</create-default-dbms-tables>
    </weblogic-rdbms-jar>I tried to write config.xml file
    <JDBCDataSource
       Name=" "
       JNDIName="myjdbcjndi"
       PoolName="MyJDBC Connection Pool"
       Targets="myserver"
    />
    <JDBCConnectionPool
       Name="MyJDBC Connection Pool"
       Targets="myserver"
        URL="jdbc:odbc:test"
        DriverName="sun.jdbc.odbc.JdbcOdbcDriver"
        InitialCapacity="1"
        MaxCapacity="10"
    />When i tried to deploy, it showed me errors-
    weblogic.management.ApplicationException: activate failed forcmp
    Start server side stack trace:
    weblogic.management.ApplicationException: activate failed forcmp
    Module Name: cmp, Error: Exception activating module: EJBModule(cmp,status=PREPARED)
    Unable to deploy EJB: CMPSportBean from cmp:
    weblogic.ejb20.WLDeploymentException: The DataSource with the JNDI name: myjdbcjndi could not be located. Please ensure that the DataSource has been deployed successfully and that the JNDI name in your EJB Deployment descriptor is correct.
         at weblogic.ejb20.cmp.rdbms.RDBMSPersistenceManager.setup(RDBMSPersistenceManager.java:138)
         at weblogic.ejb20.manager.BaseEntityManager.setupPM(BaseEntityManager.java:211)
         at weblogic.ejb20.manager.BaseEntityManager.setup(BaseEntityManager.java:181)
         at weblogic.ejb20.manager.DBManager.setup(DBManager.java:162)
         at weblogic.ejb20.deployer.ClientDrivenBeanInfoImpl.activate(ClientDrivenBeanInfoImpl.java:945)
         at weblogic.ejb20.deployer.EJBDeployer.activate(EJBDeployer.java:1296)
         at weblogic.ejb20.deployer.EJBModule.activate(EJBModule.java:349)
         at weblogic.j2ee.J2EEApplicationContainer.activateModule(J2EEApplicationContainer.java:1592)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1029)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1016)
         at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(SlaveDeployer.java:1112)
         at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(SlaveDeployer.java:732)
         at weblogic.drs.internal.SlaveCallbackHandler$1.execute(SlaveCallbackHandler.java:24)
         at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153)
         at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)
    TargetException:
    Unable to deploy EJB: CMPSportBean from cmp:
    weblogic.ejb20.WLDeploymentException: The DataSource with the JNDI name: myjdbcjndi could not be located. Please ensure that the DataSource has been deployed successfully and that the JNDI name in your EJB Deployment descriptor is correct.
         at weblogic.ejb20.cmp.rdbms.RDBMSPersistenceManager.setup(RDBMSPersistenceManager.java:138)
         at weblogic.ejb20.manager.BaseEntityManager.setupPM(BaseEntityManager.java:211)
         at weblogic.ejb20.manager.BaseEntityManager.setup(BaseEntityManager.java:181)
         at weblogic.ejb20.manager.DBManager.setup(DBManager.java:162)
         at weblogic.ejb20.deployer.ClientDrivenBeanInfoImpl.activate(ClientDrivenBeanInfoImpl.java:945)
         at weblogic.ejb20.deployer.EJBDeployer.activate(EJBDeployer.java:1296)
         at weblogic.ejb20.deployer.EJBModule.activate(EJBModule.java:349)
         at weblogic.j2ee.J2EEApplicationContainer.activateModule(J2EEApplicationContainer.java:1592)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1029)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1016)
         at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(SlaveDeployer.java:1112)
         at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(SlaveDeployer.java:732)
         at weblogic.drs.internal.SlaveCallbackHandler$1.execute(SlaveCallbackHandler.java:24)
         at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153)
         at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1035)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1016)
         at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(SlaveDeployer.java:1112)
         at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(SlaveDeployer.java:732)
         at weblogic.drs.internal.SlaveCallbackHandler$1.execute(SlaveCallbackHandler.java:24)
         at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153)
         at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)
    End server side stack trace
    Module Name: cmp, Error: Exception activating module: EJBModule(cmp,status=PREPARED)
    Unable to deploy EJB: CMPSportBean from cmp:
    weblogic.ejb20.WLDeploymentException: The DataSource with the JNDI name: myjdbcjndi could not be located. Please ensure that the DataSource has been deployed successfully and that the JNDI name in your EJB Deployment descriptor is correct.
         at weblogic.ejb20.cmp.rdbms.RDBMSPersistenceManager.setup(RDBMSPersistenceManager.java:138)
         at weblogic.ejb20.manager.BaseEntityManager.setupPM(BaseEntityManager.java:211)
         at weblogic.ejb20.manager.BaseEntityManager.setup(BaseEntityManager.java:181)
         at weblogic.ejb20.manager.DBManager.setup(DBManager.java:162)
         at weblogic.ejb20.deployer.ClientDrivenBeanInfoImpl.activate(ClientDrivenBeanInfoImpl.java:945)
         at weblogic.ejb20.deployer.EJBDeployer.activate(EJBDeployer.java:1296)
         at weblogic.ejb20.deployer.EJBModule.activate(EJBModule.java:349)
         at weblogic.j2ee.J2EEApplicationContainer.activateModule(J2EEApplicationContainer.java:1592)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1029)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1016)
         at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(SlaveDeployer.java:1112)
         at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(SlaveDeployer.java:732)
         at weblogic.drs.internal.SlaveCallbackHandler$1.execute(SlaveCallbackHandler.java:24)
         at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153)
         at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)
    TargetException:
    Unable to deploy EJB: CMPSportBean from cmp:
    weblogic.ejb20.WLDeploymentException: The DataSource with the JNDI name: myjdbcjndi could not be located. Please ensure that the DataSource has been deployed successfully and that the JNDI name in your EJB Deployment descriptor is correct.
    Start server side stack trace:
    weblogic.ejb20.WLDeploymentException: The DataSource with the JNDI name: myjdbcjndi could not be located. Please ensure that the DataSource has been deployed successfully and that the JNDI name in your EJB Deployment descriptor is correct.
         at weblogic.ejb20.cmp.rdbms.RDBMSPersistenceManager.setup(RDBMSPersistenceManager.java:138)
         at weblogic.ejb20.manager.BaseEntityManager.setupPM(BaseEntityManager.java:211)
         at weblogic.ejb20.manager.BaseEntityManager.setup(BaseEntityManager.java:181)
         at weblogic.ejb20.manager.DBManager.setup(DBManager.java:162)
         at weblogic.ejb20.deployer.ClientDrivenBeanInfoImpl.activate(ClientDrivenBeanInfoImpl.java:945)
         at weblogic.ejb20.deployer.EJBDeployer.activate(EJBDeployer.java:1296)
         at weblogic.ejb20.deployer.EJBModule.activate(EJBModule.java:349)
         at weblogic.j2ee.J2EEApplicationContainer.activateModule(J2EEApplicationContainer.java:1592)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1029)
         at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:1016)
         at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(SlaveDeployer.java:1112)
         at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(SlaveDeployer.java:732)
         at weblogic.drs.internal.SlaveCallbackHandler$1.execute(SlaveCallbackHandler.java:24)
         at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:153)
         at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:134)
    End server side stack trace
         <<no stack trace available>>
         <<no stack trace available>>
    I tried to put the file into the directory structure.
    I kept the class files into the WEB-INF/classess
    I could'nt understand whats wrong with it.
    Please help me it is urgent, if i could understand it i can proceed further

    Hi,
    I had the same error as you. I'm agree with arvind_India (previous). You must :
    1. Define a correct Connection Pool (warning: deploy it on your managed server).
    2. Test your connection Pool on your managed server.
    3. Create a DataSource from your connection Pool.
    4. Deploy your DataSource on your managed server.
    5. Verify the JNDI TREE of your managed server (Now, the JNDI name of your dataSource must appair).
    6. Deploy your Entity Bean (the error has disapeared).
    David (Paris-France).

  • Error while deploying CMP.. can u pls tell me...

    Hi,
    Below is the error my jboss 3.2.3 container is throwing when i tried to deploy my CMP entity bean. It says
    my ejbFindByPrimaryKey() method must be implemented,but in a CMP i am told the container will take care of the implementation, one just has to specify it in the home object.. can anyone pls tell me where i could have gone wrong.
    2004-07-09 12:47:39,825 INFO [org.jboss.deployment.MainDeployer] Starting deployment of package: file:/D:/jboss-3.2.3/server/default/deploy/product.jar
    2004-07-09 12:47:40,404 WARN [org.jboss.ejb.EJBDeployer.verifier] EJB spec violation:
    Bean : Product
    Section: 12.2.2
    Warning: The class must be defined as public and must not be abstract.
    2004-07-09 12:47:40,404 WARN [org.jboss.ejb.EJBDeployer.verifier] EJB spec violation:
    Bean : Product
    Section: 12.2.5
    Warning: Every entity bean must define the ejbFindByPrimaryKey method.
    2004-07-09 12:47:40,419 ERROR [org.jboss.deployment.MainDeployer] could not create deployment: file:/D:/jboss-3.2.3/server/default/deploy/product.jar
    org.jboss.deployment.DeploymentException: Verification of Enterprise Beans failed, see above for error messages.
         at org.jboss.ejb.EJBDeployer.create(EJBDeployer.java:491)
         at org.jboss.deployment.MainDeployer.create(MainDeployer.java:786)
         at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:641)
         at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:605)
         at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
         at java.lang.reflect.Method.invoke(Unknown Source)
         at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
         at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:177)
         at $Proxy6.deploy(Unknown Source)
         at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:302)
         at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:476)
         at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:201)
         at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:212)
         at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:191)

    This is my code
    ProductBean
    import javax.ejb.EntityContext;
    import javax.ejb.EntityBean;
    public abstract class ProductBean implements EntityBean {
         protected EntityContext ctx;
         //All set and get Methods
         public abstract String getName();
         public abstract void setName(String name);
         public abstract String getDescription() ;
         public abstract void setDescription(String desc);
         public abstract double getBasePrice() ;
         public abstract void setBasePrice(double baseprice);
         public abstract String getProductID();     
         public abstract void setProductID(String prodname);
         //EJB required Methods
         public void ejbActivate(){
              System.out.println("ejbActivate called");
         public void ejbRemove(){
              System.out.println("ejbRemove called");
         public void ejbPassivate(){
              System.out.println("ejbPassivate called");
         public void ejbLoad(){
              System.out.println("ejbLoad called");
         public void ejbStore(){
              System.out.println("ejbStore called");
         public void setEntityContext(EntityContext ctx){
              System.out.println("setEntityContext called");
              this.ctx=ctx;
         public void UnsetEntityContext(){
              System.out.println("UnsetEntityContext called");
              this.ctx=null;
         public void ejbPostCreate(String productID,String name,String description,double basePrice){
              System.out.println("ejbPostCreate called");
         public ProductKey ejbCreate(String productID,String name,String description,double basePrice){
              System.out.println("Create method  called");
              setProductID(productID);
              setName(name);
              setDescription(description);
              setBasePrice(basePrice);
              return new ProductKey(productID); // i am not sure which to retun,
              //return null;
                                               //Well just on a note for the above
                                              // I READ THAT CMP2.0 MUST RETURN NULL, BUT IN ED-ROMANS MASTERING
                                              // EJB  IT SAYS THE BEAN MUST RETURN THE PRIMARY KEY CLASS.
                                              // I HAVE TRIED BOTH THE ABOVE RETURN VALUES, STILL I GET THE SAME
                                              / /ERROR.
    HomeInterface
    import java.rmi.RemoteException;
    import java.util.Collection;
    import javax.ejb.CreateException;
    import javax.ejb.EJBHome;
    import javax.ejb.FinderException;
    public interface ProductHome extends EJBHome {
         public Product create(String productID,String name,String description,double basePrice)throws CreateException,RemoteException;
         public Product findByPrimaryKey(ProductKey key) throws FinderException,RemoteException;
         public Collection findByName(String name) throws RemoteException,FinderException;
         public Collection findByDescription(String desc) throws RemoteException,FinderException;
         public Collection findByBasePrice(double basePrice) throws RemoteException,FinderException;
         public Collection findByExpensiveProduct(double minPrice ) throws RemoteException,FinderException;
         public Collection findCheapProducts(double maxPrice) throws RemoteException,FinderException;
         public Collection findAllProducts() throws RemoteException,FinderException;
    RemoteInterface
    import java.rmi.RemoteException;
    import javax.ejb.EJBObject;
    public interface Product extends EJBObject {
         public String getName() throws RemoteException;
         public void setName(String name)throws RemoteException;
         public String getDescription() throws RemoteException;
         public void setDescription(String desc) throws RemoteException;
         public double getBasePrice() throws RemoteException;
         public void setBasePrice(double baseprice)throws RemoteException;
         public String getProductID()throws RemoteException;     
    ProductKey class - This is my PRIMARY KEY CLASS
    import java.io.Serializable;
    public class ProductKey implements Serializable{
         public String productID;
         public ProductKey(){          
         public ProductKey(String prodID){
              productID=prodID;
         public String toString(){
              return productID;
         public int hashCode()     {
              return productID.hashCode();
         public boolean equals(Object prod){
              return ((ProductKey)prod).productID.equals(productID);
    This is my ejb-jar.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar >
       <description><![CDATA[No Description.]]></description>
       <display-name>Generated by XDoclet</display-name>
       <enterprise-beans>
          <entity>
             <description><![CDATA[]]></description>
             <ejb-name>Product</ejb-name>
             <home>ProductHome</home>
             <local-home>ProductHomeLocal</local-home>
             <remote>Product</remote>
             <local-remote>ProductLocal</local-remote>
             <ejb-class>ProductBean</ejb-class>
               <persistence-type>Bean</persistence-type>
               <prim-key-class>ProductKey</prim-key-class>
               <reentrant>False</reentrant>     
               <cmp-version>2.x</cmp-version>
              <abstract-schema-name>ProductBean</abstract-schema-name>
              <cmp-field> <field-name>productID</field-name></cmp-field>
              <cmp-field> <field-name>name</field-name></cmp-field>
              <cmp-field> <field-name>description</field-name></cmp-field>
              <cmp-field> <field-name>basePrice</field-name></cmp-field>       
               <primkey-field>productID</primkey-field>
            <query>
                 <query-method>
                      <method-name>findByName</method-name>
                           <method-params>
                                <method-param>java.lang.String</method-param>
                           </method-params>
                 </query-method>
                 <ejb-ql>
                           <![CDATA[SELECT OBJECT(a) from ProductBean as a where name=?1]]>
                 </ejb-ql>
            </query>
            <query>
                 <query-method>
                      <method-name>findByBasePrice</method-name>
                           <method-params>
                                <method-param>double</method-param>
                           </method-params>
                 </query-method>
                 <ejb-ql>
                           <![CDATA[SELECT OBJECT(a) from ProductBean as a where basePrice = ?1]]>
                 </ejb-ql>
            </query>
            <query>
                 <query-method>
                      <method-name>findExpensiveProducts</method-name>
                           <method-params>
                                <method-param>double</method-param>
                           </method-params>
                 </query-method>
                 <ejb-ql>
                           <![CDATA[SELECT OBJECT(a) from ProductBean as a where basePrice > ?1]]>
                 </ejb-ql>
            </query>
            <query>
                 <query-method>
                      <method-name>findCheapProducts</method-name>
                           <method-params>
                                <method-param>double</method-param>
                           </method-params>
                 </query-method>
                 <ejb-ql>
                           <![CDATA[SELECT OBJECT(a) from ProductBean as a where basePrice < ?1]]>
                 </ejb-ql>
            </query>
                    <query>
                 <query-method>
                      <method-name>findAllProducts</method-name>
                           <method-params>
                                <method-param>double</method-param>
                           </method-params>
                 </query-method>
                 <ejb-ql>
                           <![CDATA[SELECT OBJECT(a) from ProductBean as a where productID IS NOT NULL]]>
                 </ejb-ql>
            </query>
                 </entity>
          </enterprise-beans>
       </ejb-jar>
    This is my jboss.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">
    <jboss>
       <unauthenticated-principal>nobody</unauthenticated-principal>
       <enterprise-beans>
          <entity>
             <ejb-name>Product</ejb-name>
             <jndi-name>ProductHome</jndi-name>
              <local-jndi-name>ProductHomeLocal</local-jndi-name>
          </entity>
       </enterprise-beans>
       <resource-managers>
       </resource-managers>
    </jboss>
    This is my jbosscmp-jdbc.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd">
    <jbosscmp-jdbc>
       <defaults>
         <datasource>java:/OracleDS</datasource>
         <datasource-mapping>Oracle8</datasource-mapping>
       </defaults>
       <enterprise-beans>
          <entity>
             <ejb-name>Product</ejb-name>
             <table-name>ProductTable</table-name>
             <cmp-field>
                <field-name>productID</field-name>
                <column-name>PRODUCTID</column-name>
            </cmp-field>
             <cmp-field>
                <field-name>name</field-name>
                <column-name>NAME</column-name>
            </cmp-field>
            <cmp-field>
                <field-name>description</field-name>
                <column-name>DESCRIPTION</column-name>
            </cmp-field>
            <cmp-field>
                <field-name>basePrice</field-name>
                <column-name>BASEPRICE</column-name>
            </cmp-field>
          </entity>
       </enterprise-beans>
    </jbosscmp-jdbc>

  • Error when deploying an CMP-Entity EJB

    Hi ,
    I am unable to deploy a simple example of CMP ,when i select Entity,then select Deployment Settings->Generate Default SQL,
    My SQL Query is:'SELECT OBJECT(p) FROM Product p' for FfindAllProducts().
    I get the error message:
    ERROR:while generating SQL.
    The SELECT clause has a return type that does not match the return type
    of the select query for which it is defined
    EJB QL statement: 'SELECT OBJECT(p)fROM Product p'
    EJB QL method:public abstract java.util.Collection com.aa.ProductHome.findAllProducts() throws javax.ejb.FinderException,java.rmi.RemoteException.
    Followinng are the codes of My bean
    ProductHome.java
    import javax.ejb.*;
    import java.rmi.RemoteException;
    import java.util.Collection;
    public interface ProductHome extends EJBHome
    Product create(String productId,String name , String description , double basePrice) throws CreateException,RemoteException;
    public Product findByPrimaryKey(ProductPK key) throws FinderException,RemoteException;
    public Collection findByName(String name) throws FinderException,RemoteException;
    public Collection findByDescription(String description) throws FinderException,RemoteException;
    public Collection findAllProducts() throws FinderException,RemoteException;
    ProductBean.java
    import javax.ejb.*;
    import java.rmi.RemoteException;
    public class ProductBean implements EntityBean
    protected EntityContext ctx;
    public String productid;
    public String name;
    public String description;
    public ProductBean()
    public String getName() throws RemoteException
    return this.name;
    public void setName(String name) throws RemoteException
    this.name=name;
    public String getDescription() throws RemoteException
    return this.description;
    public void setDescription(String description) throws RemoteException
    this.description=description;
    public String getProductId() throws RemoteException
    return this.productid;
    public void setProductId(String ProductId) throws RemoteException
    this.productid=ProductId;
    public void ejbActivate()
    public void ejbPassivate()
    public void ejbRemove()
    public void ejbLoad()
    public void ejbStore()
    public void setEntityContext(EntityContext ctx)
    this.ctx = ctx;
    public void unsetEntityContext()
    this.ctx = null;
    public void ejbPostCreate(String productId,String name,String description,double baseprice)
    public ProductPK ejbCreate(String productId,String name,String description,double baseprice) throws CreateException,RemoteException
    called ");
    setName(name);
    setProductId(productId);
    setDescription(description);
    return null;
    Product.java
    import javax.ejb.*;
    import java.rmi.RemoteException;
    public interface Product extends EJBObject
    public String getName() throws RemoteException;
    public void setName(String name) throws RemoteException;
    public String getDescription() throws RemoteException;
    public void setDescription(String description) throws RemoteException;
    public String getProductId() throws RemoteException;
    public void setProductId(String productid) throws RemoteException;
    ProductClient.java
    import java.rmi.*;
    import javax.rmi.*;
    import javax.naming.*;
    import javax.ejb.*;
    import java.util.*;
    public class ProductClient
    public static void main(String ars[])
    ProductHome home=null;
    try
    Context initial = new InitialContext();
    Context myEnv = (Context)initial.lookup("java:comp/env");
    Object objref = myEnv.lookup("ejb/TheProduct");
    home = (ProductHome)PortableRemoteObject.narrow(objref,ProductHome.class);
    home.create("123-446-7890","p5-350","350 Mhz Pentium",200 );
    home.create("123-446-7891","p5-400","400 Mhz Pentium",300 );
    home.create("123-446-7892","p5-450","450 Mhz Pentium",400 );
    home.create("123-446-7893","p5-500","500 Mhz Pentium",500 );
    home.create("123-446-7894","p5-550","550 Mhz Pentium",600 );
    Iterator i = home.findByName("p5-400").iterator();
    System.out.println(" Product Match the name of p5-400 " );
    if ( i.hasNext() )
    Product prod = (Product)PortableRemoteObject.narrow(i.next(),Product.class);
    System.out.println(prod.getDescription());
    else
    throw new Exception(" Could not find Product ");
    catch(Exception e)
    System.out.println("Caught Exception " );
    e.printStackTrace();
    finally
    if ( home != null)
    System.out.println(" Destroying all products " );
    try
    Iterator i = home.findAllProducts().iterator();
    while ( i.hasNext() )
    Product prod = (Product)PortableRemoteObject.narrow(i.next(),Product.class);
    if (prod.getProductId().startsWith("123"))
    prod.remove();
    catch (Exception e)
    e.printStackTrace();
    ProductPk.java
    import java.io.Serializable;
    public class ProductPK implements java.io.Serializable
    public String ProductId ;
    public ProductPK(String id)
    this.ProductId = id;
    public ProductPK()
    public String toString()
    return ProductId;
    public int hashCode()
    return ProductId.hashCode();
    public boolean equals(Object Product)
    return ((ProductPK)Product).ProductId.equals(ProductId);

    can u pls tell me u are using ejb1.1 specifications or ejb2.0 specifications.in both cases pls shoe u are descripters so that i can check.

  • How to implement find methods in CMP?

    As OC4J does not support EJB-QL, we need to implement the find methods by ourselves. But how? Here is my thought.
    1) Still declare the find methods in EJB home, such as
    public Collection findBySponsor(String sponsorGuid);
    2) Do not add query part to ejb-jar.xml file;
    3) In the bean class, implement the find method using JDBC code.
    Does CMP allows explicit-implementation of finder methds?
    Does CMP allows explicit-call to JDBC code?
    Thanks,

    Henry -- Why go to that trouble? For the near term I would suggest that you just modify the generated
    orion-ejb-jar.xml descriptors which will include tags to allow you to either 1) enter a partial criteria or
    2) enter a complete SQL statement. This is much less work and when EJB-QL is available with the product,
    then you have to only add the EJB-QL to the ejb-jar.xml.
    Thanks -- Jeff

  • Finder that returns Collection complains about more than one row

    Hi all,
    I have a finder method in my local home with this signature:
    public java.util.Collection findByManufacturer (String manufacturer) throws
    FinderException;
    and am getting this error:
    javax.ejb.FinderException: finder/ejbSelect 'findByManufacturer'has returned
    more than one value. We were expecting only ONE value. See EJB Spec
    10.5.6.1, 10.5.7.1
    from what i understand, shouldn't the finder allow multiple rows to be
    returned? i looked up the EJB spec and that portion seems to address
    single-object finders.
    system info is as follows:
    java weblogic.Admin VERSION
    WebLogic Server 6.1 SP2 12/18/2001 11:13:46 #154529
    WebLogic XML Module 6.1 SP2 12/18/2001 11:28:02 #154529
    thanks,
    -saad

    yes, just to verify i just did a complete re-assembly ( compile beans ; jar
    ; weblogic.ejbc ; move to domain\config\applications\application ) and am
    still getting the same error as before.
    furthermore, i dont know about wl internals at all, but it seems that the
    container does recognize that this is a collection since the stacktrace
    reveals a call to
    weblogic.ejb20.cmp.rdbms.RDBMSPersistenceManager.collectionFinder() ...
    the stack trace in question is pasted below. thanks for any help.
    -saad
    <Feb 19, 2002 9:49:14 PM CST> <Error> <HTTP>
    <[WebAppServletContext(595826,catal
    og,/catalog)] Root cause of ServletException
    javax.ejb.FinderException: finder/ejbSelect 'findByManufacturer'has returned
    mor
    e than one value. We were expecting only ONE value. See EJB Spec 10.5.6.1,
    10.
    5.7.1
    at
    com.metavonni.platinum.catalog.item.PhoneBean_g458gu__WebLogic_CMP_RD
    BMS.ejbFindByManufacturer(PhoneBean_g458gu__WebLogic_CMP_RDBMS.java:1297)
    at java.lang.reflect.Method.invoke(Native Method)
    at
    weblogic.ejb20.cmp.rdbms.RDBMSPersistenceManager.collectionFinder(RDB
    MSPersistenceManager.java:274)
    at
    weblogic.ejb20.manager.BaseEntityManager.collectionFinder(BaseEntityM
    anager.java:669)
    at
    weblogic.ejb20.manager.BaseEntityManager.collectionFinder(BaseEntityM
    anager.java:642)
    at
    weblogic.ejb20.internal.EntityEJBLocalHome.finder(EntityEJBLocalHome.
    java:381)
    at
    com.metavonni.platinum.catalog.item.PhoneBean_g458gu_LocalHomeImpl.fi
    ndByManufacturer(PhoneBean_g458gu_LocalHomeImpl.java:184)
    at jsp_servlet.__x._jspService(__x.java:102)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
    "Rajesh Mirchandani" <[email protected]> wrote in message
    news:[email protected]...
    This should work. Did you recompile your beans when you upgraded to SP2?
    Saad Rehmani wrote:
    Hi all,
    I have a finder method in my local home with this signature:
    public java.util.Collection findByManufacturer (String manufacturer)
    throws
    FinderException;
    and am getting this error:
    javax.ejb.FinderException: finder/ejbSelect 'findByManufacturer'hasreturned
    more than one value. We were expecting only ONE value. See EJB Spec
    10.5.6.1, 10.5.7.1
    from what i understand, shouldn't the finder allow multiple rows to be
    returned? i looked up the EJB spec and that portion seems to address
    single-object finders.
    system info is as follows:
    java weblogic.Admin VERSION
    WebLogic Server 6.1 SP2 12/18/2001 11:13:46 #154529
    WebLogic XML Module 6.1 SP2 12/18/2001 11:28:02 #154529
    thanks,
    -saad--
    Rajesh Mirchandani
    Developer Relations Engineer
    BEA Support

  • Does CMP bean finder method supports "LIKE" sql?

    I put something like this in the orion-ejb-jar.xml file:
    <finder-method partial="false" query="select * from EMP where $ename like $1 AND $job like $2">
    </finder-method>
    If I put in exact value like 'ADAMS' or 'CLERK', it works fine. But if I put in 'A%' or 'CL%', it does not work. I know the record is there and the same sql does return a row in sql-plus.
    Appreciate any help.
    Adam

    I put something like this in the orion-ejb-jar.xml file:
    <finder-method partial="false" query="select * from EMP where $ename like $1 AND $job like $2">
    </finder-method>
    If I put in exact value like 'ADAMS' or 'CLERK', it works fine. But if I put in 'A%' or 'CL%', it does not work. I know the record is there and the same sql does return a row in sql-plus.
    Appreciate any help.
    Adam gday Adam -
    I don't think there is anything in the persistence manager that will prevent this from working as you want.
    Can I ask what version of OC4J you are using?
    I'm not sure from your email if you are you specifying the fields in the finder method by surrounding them with SQL style quotes as in 'A%'? You shouldn't need to do that if you are.
    I just tested it out with a simple client and entity bean based on the employee table, which I created in about 30 seconds with the new JDeveloper CMP Entity Bean Wizard, using the create from existing table option.
    I added a finder method that looks like the following:
    Collection findByEnameAndJob(String ename, String job) throws RemoteException, FinderException;
    And then changed the SQL in the finder dialog (or orion-ejb-jar.xml) for the finder to be
    <finder-method partial="False" query="select * from emp where $ename like $1 and $job like $2">
    <method>
    <ejb-name>Emp</ejb-name>
    <method-name>findByEnameAndJob</method-name>
    <method-params>
    <method-param>java.lang.String</method-param>
    <method-param>java.lang.String</method-param>
    </method-params>
    </method>
    </finder-method>
    The client code then looked for employees with a name starting with the letter A and whose job started with the letters CL as follows:
    Collection coll = empHome.findByEnameAndJob("A%","CL%");
    System.out.println("*** There were : " + coll.size() + " records returned ***");
    Iterator iter = coll.iterator();
    while (iter.hasNext())
    emp = (Emp)iter.next();
    System.out.println("empno = " + emp.getEmpno());
    System.out.println("ename = " + emp.getEname());
    When the client was run, this was the resulting output:
    *** There were : 1 records returned ***
    empno = 7876
    ename = ADAMS
    job = CLERK
    mgr = 7788
    hiredate = 1987-05-23 00:00:00.0
    sal = 1100
    comm = 0
    deptno = 20
    If you want to find all the entries that have a job that starts with CL you can even use the same finder method like:
    Collection coll = empHome.findByEnameAndJob("%","CL%");
    This results in the output
    *** There were : 4 records returned ***
    empno = 7369
    ename = SMITH
    job = CLERK
    mgr = 7902
    hiredate = 1980-12-17 00:00:00.0
    sal = 800
    comm = 0
    deptno = 20
    empno = 7876
    ename = ADAMS
    job = CLERK
    mgr = 7788
    hiredate = 1987-05-23 00:00:00.0
    sal = 1100
    comm = 0
    deptno = 20
    empno = 7900
    ename = JAMES
    job = CLERK
    mgr = 7698
    hiredate = 1981-12-03 00:00:00.0
    sal = 950
    comm = 0
    deptno = 30
    empno = 7934
    ename = MILLER
    job = CLERK
    mgr = 7782
    hiredate = 1982-01-23 00:00:00.0
    sal = 1300
    comm = 0
    deptno = 10
    I can send you the packaged EAR file if you want to try this simple example for yourself - or you I would even encourage you to grab JDeveloper 9i and see how it easy it makes it to build and test the example I was just working with.
    cheers!
    -steve

  • Oracle, Null and empty Strings

    Currently I'm facing problems with a class, which contains a String, which
    is set to "" (empty String).
    When the class is persistent, oracle writes null to the table column
    (which seems to be common oracle behaviour) and when retrieving the class,
    the field is set to null as well, giving me a lot of null-pointer
    exceptions.
    Anyway ... I can cope with that (just a lot of extra work)
    far worse is the problem, wenn searching objects, that have this field set
    to "" oder null.
    Oracle can't find the records because JDO creates Querys "where
    string=null" or "where string=''" , where oracle expects "where string is
    null" to find the records.
    Is there a workaround or solution ?

    Yeah, that would work as well, thx, but since I have to cope with
    null-Strings now everywhere in my program, it doesn't hurt just to forbid
    empty strings on the program side.
    In future times I'll test on Oracle first, then porting to DB/2 - this way
    I suppose work is far less to garant compability.
    Nevertheless ... having to set the bankcode into quotes is a kodo bug in
    my opinion.
    Kodo knows the type of classfields (in this case string) and shouldn't
    send the parameter as a BigDecimal to the database.
    Given that, and having only bankcodes of null (only neccesary when using
    Oracle), the method would look like:
    public Collection getAccounts (String bankCode)
    throws Exception
    return getAccounts (Account.class, "bankcode=="+bankcode);
    which is how a transparent persistent layer, um, should be , um , I mean
    ... just transparent ;-D
    Marc Prud'hommeaux wrote:
    Stefan-
    Couldn't you just do something like:
    public Collection getAccounts (String bankCode)
    throws Exception
    String filter;
    if (bankCode == null || bankCode.length () == 0)
    filter = "(bankCode == null || bankCode == "")";
    else
    filter = "bankCode == "" + bankCode + """;
    return getAccounts (Account.class, filter);
    If I understand the problem correctly, this should work for all the
    databases.
    In article <[email protected]>, Stefan wrote:
    What operations are you performing to cause this SQL to be issued? You
    say you are having trouble removing objects, but this is clearly not a
    DELETE statement. Is this the SQL that is issued when looking up
    objects by identity?I'm not removing objects, I was removing just quotes from parameters ;-)
    A string column... is it also represented as a string field in your class?Yeah ... just to give you an impression of the code:
    First we have a class, representing a bank account:
    public class Account {
    private AccountMgr myAccountMgr;
    private String bankCode;
    private String id;
    Note, that in nearly all cases bankCode will be a number or null.
    I have a second class "AccountMgr", which does all of the persistant stuff
    (seaching, making persistent etc.)
    This class has two methods, one versatile (protected) to retrieve accounts
    by a given filterString and one who just returns accounts by bankCode,
    building the expected filterstring. Here is my current working version:
    public class AccountMgr {
    public Collection getAccounts(String bankCode) throws Exception {
    if (bankCode!=null) {
    if (bankCode.equals("")) {
    throw new Exception("check code, bankCode='' not allowed to get
    same behavior from DB2 and Oracle");
    // if set, quote the bankCode
    bankCode="""+bankCode+""";
    return getAccounts(Account.class,"bankCode=="+bankCode);
    protected Collection getAccounts(Class accountClass, String filterAdd)
    throws Exception {
    PersistenceManager pm = MyHelper.getPersistenceManager();
    String filter="";
    if (filterAdd!=null && !filterAdd.trim().equals("")) {
    filter+=filterAdd + " && ";
    filter += "myAccountMgr==_accMgr";
    Query query = pm.newQuery(accountClass, filter);
    query.declareParameters("AccountMgr _accMgr");
    return (Collection) query.execute(this);
    As you can see, in the first method I have to set the bankCode into
    quotes, when it's not null.
    This is because otherwise a filter like "bankCode=1234" will be translated
    in a way, where 1234 is send as a BigDecimal to the database:
    [...] executing statement <4239745>: (SELECT [...] FROM JDO_ACCOUNT t0
    WHERE t0.BANKCODE = ? : [reused=1;params={(BigDecimal) 1234}]
    Marc Prud'hommeaux [email protected]
    SolarMetric Inc. http://www.solarmetric.com

Maybe you are looking for

  • Random kernel panics going on for a long time, desperate for help!

    Hi, I didn'nt quite know what to name this thread, but I will try to describe the problems I have with my MacBook Pro here. I have a mid-2009 MacBook Pro and the problems started more than a year ago. They are present under both Snow Leopard and Lion

  • Configuration of Tax code under Tax Jurisdiction for Canada

    Hello All, We need to create new tax code for Canada & use Jurisdiction code. We have created a new jurisdiction code. Now, at the time of creation of tax code, it is observed that some line is active whereas some line is deactive. Question:- is ther

  • What are the reasons why a wideband modem can not take a CPE?

    I have an M-CMTS with RFGW1. I have the following settings: int c6/1/3 downstream Modular-Cable 1/0/0 rf-channel 16-17 upstream 0-3 int c6/1/4 downstream Modular-Cable 1/0/0 rf-channel 18-19 upstream 0-3 cable fiber-node 9   downstream Modular-Cable

  • A white stick for my mac

    I have a 2006 macpro Model Identifier: MacPro1,1 Processor Name: Dual-Core Intel Xeon Processor Speed: 2.66 GHz Number Of Processors: 2 Total Number Of Cores: 4 osx 10.6.6 last dec I bought a G-force 1tb hd my problem is I can't see it on my screen o

  • "Image not recognized" on img or dmg files...

    Hello all... Anyone had the same problem? I have just updated to OS Maverick and I tried to install a firmware for my external RAID. Downloaded from the official website but no luck. I get an error message "Image not recognized". Tried to open it wit