[JBoss JIRA] Created: (EJBTHREE-1647) @Resource injection of primitive types from JNDI
by Dennis Reed (JIRA)
@Resource injection of primitive types from JNDI
------------------------------------------------
Key: EJBTHREE-1647
URL: https://jira.jboss.org/jira/browse/EJBTHREE-1647
Project: EJB 3.0
Issue Type: Bug
Components: injection
Affects Versions: AS 4.2.1.GA
Reporter: Dennis Reed
The following does not work to inject an arbitrary JNDI entry for primitive/primitive wrapper/String fields:
@Resource( mappedName = "java:/blah/blah" )
String myVar;
In older versions, a "NYI" exception was thrown (then changed to a different exception before getting to the user).
In newer versions, the literal value in mappedName is injected.
For all other types, the JNDI entry injection works. For example, the following does inject that same String from JNDI:
@Resource( mappedName = "java:/blah/blah" )
Object myVar;
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
15 years, 2 months
[JBoss JIRA] Created: (JBRULES-1769) Improvements to pluggable operator framework
by Edson Tirelli (JIRA)
Improvements to pluggable operator framework
--------------------------------------------
Key: JBRULES-1769
URL: https://jira.jboss.org/jira/browse/JBRULES-1769
Project: JBoss Drools
Issue Type: Feature Request
Security Level: Public (Everyone can see)
Reporter: Edson Tirelli
Assignee: Edson Tirelli
e-mail from Michel Zimmermann:
-----------
Hi Edson,
I think I got it working :-)
Edson Tirelli wrote:
> For an example, look at the file SetEvaluatorsDefinition and look at
> the BaseMemberOf inner class. So, all the logic is in there, but we
> still used subclasses just to set the constructor attributes and
> override the toString() method, but you could still implement
> everything in a single class I guess.
Yes, this approach makes sense as long as you don't need to use the
different VariableContextEntry subclasses for handling double, char etc.
Yet, this can be handled, too.
toString():
You can avoid subclassing from your BaseMyEvaluatorClass to override
toString() by using a string method like:
public String toString() {
return getValueType().getName() + " " +
getOperator().getOperatorString();
}
Regarding the evaluator API:
If you only need one evaluator class (subclassed from BaseEvaluator),
personally I don't like the > 10 static calls to
addEvaluator(type, operator, myEvaluatorInstance)
in the EvaluatorDefinition class.
So, how about adding the method addDefaultEvaluator(operator,
evaluatorClass) to EvaluatorCache, see attachment?
This would allow you to register a evaluator as default and only overide
the special cases...
PS: If you are interested I will write some small tutorial about custom
evaluators / operators in drools trunk. This might take a week or two,
though. Any preferences regarding the format?
Thanks for the help....
cu, Michael
@SuppressWarnings("unchecked")
public void addDefaultEvaluator(final Operator operator, Class evaluatorClass) {
// define the constructor
Class[] evaluatorParameters = new Class[2];
evaluatorParameters[0] = ValueType.class;
evaluatorParameters[1] = Operator.class;
// get the constructor
try {
Constructor<BaseEvaluator> constructor;
constructor = evaluatorClass.getConstructor( evaluatorParameters );
// add feault operators
addEvaluator(ValueType.ARRAY_TYPE, operator, constructor.newInstance(ValueType.ARRAY_TYPE, operator));
addEvaluator(ValueType.BIG_DECIMAL_TYPE, operator, constructor.newInstance(ValueType.BIG_DECIMAL_TYPE, operator));
addEvaluator(ValueType.BIG_INTEGER_TYPE, operator, constructor.newInstance(ValueType.BIG_INTEGER_TYPE, operator));
addEvaluator(ValueType.BOOLEAN_TYPE, operator, constructor.newInstance(ValueType.BOOLEAN_TYPE, operator));
addEvaluator(ValueType.PBOOLEAN_TYPE, operator, constructor.newInstance(ValueType.PBOOLEAN_TYPE, operator));
addEvaluator(ValueType.BYTE_TYPE, operator, constructor.newInstance(ValueType.BYTE_TYPE, operator));
addEvaluator(ValueType.PBYTE_TYPE, operator, constructor.newInstance(ValueType.PBYTE_TYPE, operator));
addEvaluator(ValueType.CHAR_TYPE, operator, constructor.newInstance(ValueType.CHAR_TYPE, operator));
addEvaluator(ValueType.PCHAR_TYPE, operator, constructor.newInstance(ValueType.PCHAR_TYPE, operator));
addEvaluator(ValueType.DATE_TYPE, operator, constructor.newInstance(ValueType.DATE_TYPE, operator));
addEvaluator(ValueType.DOUBLE_TYPE, operator, constructor.newInstance(ValueType.DOUBLE_TYPE, operator));
addEvaluator(ValueType.PDOUBLE_TYPE, operator, constructor.newInstance(ValueType.PDOUBLE_TYPE, operator));
addEvaluator(ValueType.FLOAT_TYPE, operator, constructor.newInstance(ValueType.FLOAT_TYPE , operator));
addEvaluator(ValueType.PFLOAT_TYPE, operator, constructor.newInstance(ValueType.PFLOAT_TYPE, operator));
addEvaluator(ValueType.INTEGER_TYPE, operator, constructor.newInstance(ValueType.INTEGER_TYPE, operator));
addEvaluator(ValueType.PINTEGER_TYPE, operator, constructor.newInstance(ValueType.PINTEGER_TYPE, operator));
addEvaluator(ValueType.LONG_TYPE, operator, constructor.newInstance(ValueType.LONG_TYPE, operator));
addEvaluator(ValueType.PLONG_TYPE, operator, constructor.newInstance(ValueType.PLONG_TYPE, operator));
addEvaluator(ValueType.OBJECT_TYPE, operator, constructor.newInstance(ValueType.OBJECT_TYPE, operator));
addEvaluator(ValueType.SHORT_TYPE, operator, constructor.newInstance(ValueType.SHORT_TYPE, operator));
addEvaluator(ValueType.PSHORT_TYPE, operator, constructor.newInstance(ValueType.PSHORT_TYPE, operator));
addEvaluator(ValueType.STRING_TYPE, operator, constructor.newInstance(ValueType.STRING_TYPE, operator));
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
15 years, 2 months
[JBoss JIRA] Created: (JBRULES-1322) Accumulate functions are highly unreliable for long's and BigDecimals
by Geoffrey De Smet (JIRA)
Accumulate functions are highly unreliable for long's and BigDecimals
---------------------------------------------------------------------
Key: JBRULES-1322
URL: http://jira.jboss.com/jira/browse/JBRULES-1322
Project: JBoss Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: Drl Parser/Builder
Affects Versions: 4.0.3
Reporter: Geoffrey De Smet
Assigned To: Edson Tirelli
Priority: Critical
Fix For: 4.1.0
When dealing with financial data, one should never ever use double's. Instead BigDecimal should be used.
Not because BigDecimal is bigger (that's rarely a problem) but because it doesn't do any decimal to binary transformation.
For example, it's impossible for a double to correctly represent "0.2", aka 1/5.
Summing many doubles (or even a few differing in scale), can easily give wrong results (and for financial data this tends to be important).
Using doubles to sum longs have the exact same problem.
Attached is a testcase patch which proves this by checking if (MAX_LONG - 4L) and 3L sum up to be (MAX_LONG - 1L).
Currently they don't.
One possible way to solve this is to fix JBRULES-1075,
which just happens to give drools-solver 3% more performance ;) what a coincidence ^^
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
15 years, 2 months
[JBoss JIRA] Created: (JBRULES-1199) Add a field constraint negation operator to drools
by Arsalan Zaidi (JIRA)
Add a field constraint negation operator to drools
---------------------------------------------------
Key: JBRULES-1199
URL: http://jira.jboss.com/jira/browse/JBRULES-1199
Project: JBoss Rules
Issue Type: Feature Request
Security Level: Public (Everyone can see)
Reporter: Arsalan Zaidi
Assigned To: Mark Proctor
Arsalan,
Unfortunately Drools does not have a field constraint negation operator, mostly because when writing rules, it was not needed, since you can always negate the constraint itself.
Although, I understand a agree with your use case. My suggestion is for you to open a JIRA feature request and we will include that as soon as possible in the product.
Although, meanwhile, the only workaround I can see for your case is to translate the expression you are using directly into a java or mvel expression and write it inside an in-line eval.
[]s
Edson
2007/9/14, Arsalan S. Zaidi <arsalan.zaidi(a)capgemini.com>:
Hi
I'll try to explain the situation that Gaurav finds himself in. We're working on this problem together and so far, we haven't been able to crack it.
We're using drools to handle the business rules for an application. The rules however, are not provided to us in a .drl file, rather, we get an XLS sheet from the analysts with rules in a different grammar.
We're using ANTLR to read and parse these rules to generate the drools rules programmatically. However, we're running into problems with NOT.
The input rules (in the non-drools business language) have a NOT operator which works like '!' in Java. It flips the Boolean around, so to speak. So:
NOT((some sub expression which evaluates to TRUE)) == FALSE
MVEL doesn't seem to support this. So how do we simulate it?
If it were only being used with NOT IN, we could manage, but its use is completely arbitrary. Changes to the input rules or to the input rules grammar have been (ha ha) ruled out.
Any help would be appreciated.
Regards,
_____________________________________________________
Arsalan Zaidi / Capgemini - India (FS SBU) / Mumbai
Technical Architect
Mobile Phone: +91 - 9892 8970 03 / www.capgemini.com
Together: the Collaborative Business Experience
_____________________________________________________
--------------------------------------------------------------------------------
From: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Anstis, Michael (M.)
Sent: 13 September 2007 13:31
To: Rules Users List
Subject: RE: [rules-users] How to use not operator in drool.
What dialect do your rules use?
You could also simplify the logic using DeMorgans Theorem (which might be troublesome to accomplish programmatically)
I don't know whether your example is flawed as the brackets don't match, but assuming you mean something like this:-
(NOT (G13.1 IN ("1","2","3") OR (G250.8 = Y)))
You can re-write this as
(G13.1NOT IN ("1","2","3") AND G250.8 != Y)
With kind regards,
Mike
--------------------------------------------------------------------------------
From: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of JOSHI, GAURAV
Sent: 13 September 2007 08:20
To: Rules Users List
Subject: RE: [rules-users] How to use not operator in drool.
Thank's for your sugession of using "not in" instead of "not" but my problem is that "not" can also come without "in".
Actually I am making a generator of rule file from expression like
((NOT (ENDS WITH (G10.2, ",")))
((NOT (G13.1 IN ("1","2","3"))) OR (G250.8 = Y)))
Where G13.2, G250.8, G10.2 are variables coming from a map inserted in working memory.
I am accessing these variables from map.
My rules are as follows
This rule is working fine.
rule "Editable_G10.3"
when
((Map( this["G10.3"] !=8))||(Map( this["G10.2"] ==19)))
then
System.out.println("comming here----------------------------------------------------->");
End
This is not working
rule "Mandatory_G10.3"
when
(not((Map( this["G10.3"] !=8))||(Map( this["G10.2"] ==19))))
Then
System.out.println("comming here----------------------------------------------------->");
End
In also tried following approaches:
1) eval(not((Map( this["G10.3"] !=8))||(Map( this["G10.2"] ==19))))
2) eval(!((Map( this["G10.3"] !=8))||(Map( this["G10.2"] ==19))))
But in both cases it is giving same error:
org.drools.rule.InvalidRulePackage: Rule Compilation error : [Rule name=ValidationRuleExp_G10.3, agendaGroup=MAIN, salience=0, no-loop=false]
com/telekurs/nva/mde/fe/ak/validation/Rule_ValidationRuleExp_G10_3_0.java (11:495) : Cannot use this in a static context
com/telekurs/nva/mde/fe/ak/validation/Rule_ValidationRuleExp_G10_3_0.java (11:500) : Type mismatch: cannot convert from String to int
I am trying to find out some general concept so that I can change just achieve the functionality of not.
Thanks
Gaurav
--------------------------------------------------------------------------------
From: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Edson Tirelli
Sent: Wednesday, September 12, 2007 10:20 PM
To: Rules Users List
Subject: Re: [rules-users] How to use not operator in drool.
Remove your "eval" and use "or" instead of "||" for the OR CE.
Although, I feel that this is not what you want... what you want is simply:
when
Map( this['city'] not in ( "mumbai", "delhi" ) )
then
//...
end
[]s
Edson
2007/9/12, Gaurav2007 < gaurav.a.joshi(a)capgemini.com>:
Hi ALL,
I am using drool4.0.1 in my application i am able to use IN,OR,AND operator
but i am facing problem in using not operator.
my requirement of not operator is just like a not gate.
the way i am using it is :
eval(not((Map( this["city"] !="mumbai"))||(Map( this["city"] =="delhi"))))
so can you please help me out to solve this problem:
should i use not operator or some thing else in drool.
Thanks,
--
View this message in context: http://www.nabble.com/How-to-use-not-operator-in-drool.-tf4430240.html#a1...
Sent from the drools - user mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
Edson Tirelli
Software Engineer - JBoss Rules Core Developer
Office: +55 11 3529-6000
Mobile: +55 11 9287-5646
JBoss, a division of Red Hat @ www.jboss.com
This message contains information that may be privileged or confidential and is the property of the Capgemini Group. It is intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to read, print, retain, copy, disseminate, distribute, or use this message or any part thereof. If you receive this message in error, please notify the sender immediately and delete all copies of this message.
This message contains information that may be privileged or confidential and is the property of the Capgemini Group. It is intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to read, print, retain, copy, disseminate, distribute, or use this message or any part thereof. If you receive this message in error, please notify the sender immediately and delete all copies of this message.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
Edson Tirelli
Software Engineer - JBoss Rules Core Developer
Office: +55 11 3529-6000
Mobile: +55 11 9287-5646
JBoss, a division of Red Hat @ www.jboss.com
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
15 years, 2 months