blob: 7b2310445e8dd7c8569361241774a055ae76770e [file] [log] [blame]
/*
* Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package test;
import jakarta.ejb.*;
import javax.naming.*;
/**
* This SessionBean is used to test setting CMP field 'name' to a value
* that is too large for the column size that it is mapped to.
* The test is expected to be executed with flush after business method
* set to true for setNameWithFlush() and to false for setName().
* The test is executed for CMP1.1 bean (A1) and CMP2.x bean (A2).
*/
public class TestBean implements SessionBean {
private A1LocalHome a1Home = null;
private A2LocalHome a2Home = null;
private A1Local a1bean = null;
private A2Local a2bean = null;
// SessionBean methods
public void ejbCreate() throws CreateException {
System.out.println("TestBean ejbCreate");
try {
a1Home = lookupA1();
a2Home = lookupA2();
} catch (NamingException ex) {
throw new EJBException(ex.getMessage());
}
}
public void ejbActivate() {
System.out.println("TestBean ejbActivate");
}
public void ejbPassivate() {
a1Home = null;
a2Home = null;
}
public void ejbRemove() {
}
public void setSessionContext(SessionContext sc) {
}
private A1LocalHome lookupA1() throws NamingException {
Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/A1Flush");
return (A1LocalHome) objref;
}
private A2LocalHome lookupA2() throws NamingException {
Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/A2Flush");
return (A2LocalHome) objref;
}
/**
* Run test for CMP1.1 bean without flush after business
* method. This method will fail at commit and the client
* will get a RuntimeException.
*/
public void testA1() throws CreateException {
a1bean = a1Home.create("A1");
a1bean.setName("A12345678901234567890");
}
/**
* Run test for CMP2.x bean without flush after business
* method. This method will fail at commit and the client
* will get a RuntimeException.
*/
public void testA2() throws CreateException {
a2bean = a2Home.create("A2");
a2bean.setName("A12345678901234567890");
}
/**
* Run test for CMP1.1 bean with flush after business
* method. This method will fail at flush and the client
* will get our FlushException.
*/
public void testA1WithFlush() throws CreateException, FlushException {
a1bean = a1Home.create("B1");
try {
a1bean.setNameWithFlush("A12345678901234567890");
} catch (EJBException e) {
if (isExpectedException(e))
throw new FlushException(e.toString());
else
throw e;
}
}
/**
* Run test for CMP2.x bean with flush after business
* method. This method will fail at flush and the client
* will get our FlushException.
*/
public void testA2WithFlush() throws CreateException, FlushException {
a2bean = a2Home.create("B2");
try {
a2bean.setNameWithFlush("A12345678901234567890");
} catch (EJBException e) {
if (isExpectedException(e))
throw new FlushException(e.toString());
else
throw e;
}
}
private boolean isExpectedException (Exception e) {
boolean expected = false;
Throwable c = e.getCause();
if (c != null &&
(c instanceof com.sun.jdo.api.persistence.support.JDODataStoreException)) {
String msg = c.getMessage();
expected = (msg != null) && (msg.indexOf("JDO76400") > -1);
}
return expected;
}
}